File:Fourier transform, Fourier series, DTFT, DFT.svg

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file (SVG file, nominally 1,128 × 672 pixels, file size: 100 KB)

Captions

Captions

A Fourier transform and 3 variations caused by periodic sampling (at interval T) and/or periodic summation (at interval P) of the underlying time-domain function.

Summary

[edit]
Description
English: A Fourier transform and 3 variations caused by periodic sampling (at interval T) and/or periodic summation (at interval P) of the underlying time-domain function.
Date
Source Own work
Author Bob K
Permission
(Reusing this file)
I, the copyright holder of this work, hereby publish it under the following license:
Creative Commons CC-Zero This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of their rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

Other versions

This file was derived from:

SVG development
InfoField
 
The source code of this SVG is invalid due to 13 errors.
 
This W3C-invalid vector image was created with LibreOffice.
Octave/Gnuplot source
InfoField
click to expand

This graphic was created with the help of the following Octave script:

graphics_toolkit gnuplot
pkg load signal
%=======================================================
function Y = DFT(y,t,f)
  W = exp(-j*2*pi * t' * f);                    % Nx1 × 1x8N = Nx8N
  Y = abs(y * W);                               % 1xN × Nx8N = 1x8N
% Y(1)  = SUM(n=1,2,...,N): { e^(-B × t(n)^2) × e^(-j2p ×-4096/8N × t(n)) }
% Y(2)  = SUM(n=1,2,...,N): { e^(-B × t(n)^2) × e^(-j2p ×-4095/8N × t(n)) }
% Y(8N) = SUM(n=1,2,...,N): { e^(-B × t(n)^2) × e^(-j2p × 4095/8N × t(n)) }
  Y = Y/max(Y);
endfunction  

  T = 1;                             % time resolution (arbitrary)
  Nyquist = 1/T;                     % Nyquist bandwidth
  N = 1024;                          % sample size
  I  = 8;                            % freq interpolation factor
  NI = N*I;                          % number of frequencies in Nyquist bandwidth
  freq_resolution = Nyquist/NI;
  X  = (-NI/2 : NI/2 -1);            % center the frequencies at the origin
  freqs = X * freq_resolution;       % actual frequencies to be sampled and plotted

% (https://octave.org/doc/v4.2.1/Graphics-Object-Properties.html#Graphics-Object-Properties)
  set(0, "DefaultAxesXlim",[min(freqs) max(freqs)])
  set(0, "DefaultAxesYlim",[0 1.05])
  set(0, "DefaultAxesXtick",[0])
  set(0, "DefaultAxesYtick",[])
% set(0, "DefaultAxesXlabel","frequency")
  set(0, "DefaultAxesYlabel","amplitude")

#{
Sample a funtion at intervals of T, and display only the Nyquist bandwidth [-0.5/T 0.5/T].  
Technically this is just one cycle of a periodic DTFT, but since we can't see the periodicity,
it looks the same as a continuous Fourier transform, provided that the actual bandwidth is
significantly less than the Nyquist bandwidth; i.e. no aliasing.
#}
% We choose the Gaussian function e^{-B (nT)^2}, where B is proportional to bandwidth.
  B = 0.1*Nyquist;
  x = (-N/2 : N/2 -1);              % center the samples at the origin
  t = x*T;                          % actual sample times
  y = exp(-B*t.^2);                 % 1xN  matrix
  Y = DFT(y, t, freqs);             % 1x8N matrix

% Re-sample to reduce the periodicity of the DTFT.  But plot the same frequency range.
  T = 8/3;
  t = x*T;                         % 1xN
  z = exp(-B*t.^2);                % 1xN
  Z = DFT(z, t, freqs);            % 1x8N
%=======================================================
  hfig = figure("position", [1 1 1200 900]);

  x1 = .08;                   % left margin for annotation
  x2 = .02;                   % right margin
  dx = .05;                   % whitespace between plots
  y1 = .08;                   % bottom margin
  y2 = .08;                   % top margin
  dy = .12;                   % vertical space between rows
  height = (1-y1-y2-dy)/2;    % space allocated for each of 2 rows
  width  = (1-x1-dx-x2)/2;    % space allocated for each of 2 columns
  x_origin1 = x1;
  y_origin1 = 1 -y2 -height;  % position of top row
  y_origin2 = y_origin1 -dy -height;
  x_origin2 = x_origin1 +dx +width;
%=======================================================
% Plot the Fourier transform, S(f)

  subplot("position",[x_origin1 y_origin1 width height])
  area(freqs, Y, "FaceColor", [0 .4 .6])
% xlabel("frequency")            % leave blank for LibreOffice input
%=======================================================
% Plot the DTFT

  subplot("position",[x_origin1 y_origin2 width height])
  area(freqs, Z, "FaceColor", [0 .4 .6])
  xlabel("frequency")
%=======================================================
% Sample S(f) to portray Fourier series coefficients

  subplot("position",[x_origin2 y_origin1 width height])
  stem(freqs(1:128:end), Y(1:128:end), "-", "Color",[0 .4 .6]);
  set(findobj("Type","line"),"Marker","none")
% xlabel("frequency")            % leave blank for LibreOffice input
  box on
%=======================================================
% Sample the DTFT to portray a DFT

  FFT_indices = [32:55]*128+1;
  DFT_indices = [0:31 56:63]*128+1;
  subplot("position",[x_origin2 y_origin2 width height])
  stem(freqs(DFT_indices), Z(DFT_indices), "-", "Color",[0 .4 .6]);
  hold on
  stem(freqs(FFT_indices), Z(FFT_indices), "-", "Color","red");
  set(findobj("Type","line"),"Marker","none")
  xlabel("frequency")
  box on
%=======================================================
% Output (or use the export function on the GNUPlot figure toolbar).
  print(hfig,"-dsvg", "-S1200,800","-color", 'C:\Users\BobK\Fourier transform, Fourier series, DTFT, DFT.svg')

LaTex

[edit]

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current13:59, 18 September 2024Thumbnail for version as of 13:59, 18 September 20241,128 × 672 (100 KB)Bob K (talk | contribs)added detail to labels
14:10, 23 August 2019Thumbnail for version as of 14:10, 23 August 20191,057 × 630 (97 KB)Bob K (talk | contribs)re-color the portion of the DFT computed by an FFT
14:32, 21 August 2019Thumbnail for version as of 14:32, 21 August 20191,089 × 630 (95 KB)Bob K (talk | contribs)replace copy/paste LaTex with LibreOffice "text boxes"
04:36, 19 August 2019Thumbnail for version as of 04:36, 19 August 20191,089 × 630 (78 KB)Bob K (talk | contribs)Bug fixed in Octave script... minor effect on DTFT plot
17:06, 8 January 2019Thumbnail for version as of 17:06, 8 January 2019922 × 594 (145 KB)Bob K (talk | contribs)User created page with UploadWizard

File usage on other wikis

Metadata