NOTE: THIS DOCUMENT IS OBSOLETE, PLEASE CHECK THE NEW VERSION: "Mathematics of the Discrete Fourier Transform (DFT), with Audio Applications --- Second Edition", by Julius O. Smith III, W3K Publishing, 2007, ISBN 978-0-9745607-4-8. - Copyright © 2017-09-28 by Julius O. Smith III - Center for Computer Research in Music and Acoustics (CCRMA), Stanford University
<< Previous page TOC INDEX Next page >>
Figure 7.3
Below is the Matlab for Fig. 7.3:
% Parameters (sampling rate = 1) N = 16; % DFT length k = N/4; % bin where DFT filter is centered wk = 2*pi*k/N; % normalized radian center-frequency for DFT_k() wStep = 2*pi/N; w = [0:wStep:2*pi - wStep]; % DFT frequency grid
interp = 10; N2 = interpN; % Denser grid showing “arbitrary” frequencies w2Step = 2pi/N2; w2 = [0:w2Step:2pi - w2Step]; % Extra dense frequency grid X = (1 - exp(j(w2-wk)N)) ./ (1 - exp(j(w2-wk))); % slightly offset to avoid divide by zero at wk X(1+k*interp) = N; % Fix divide-by-zero point (overwrite “NaN”)
% Plot spectral magnitude clf; magX = abs(X); magXd = magX(1:interp:N2); % DFT frequencies only subplot(2,1,1); plot(w2,magX,’-’); hold on; grid; plot(w,magXd,’*’); % Show DFT sample points title(‘DFT Amplitude Response at k=N/4’); xlabel(‘Normalized Radian Frequency (radians per sample)’); ylabel(‘Magnitude (Linear)’); text(-1,20,‘a)’);
% Same thing on a dB scale magXdb = 20log10(magX); % Spectral magnitude in dB % Since the zeros go to minus infinity, clip at -60 dB: magXdb = max(magXdb,-60ones(1,N2)); magXddb = magXdb(1:interp:N2); % DFT frequencies only subplot(2,1,2); hold off; plot(w2,magXdb,’-’); hold on; plot(w,magXddb,’*’); grid; xlabel(‘Normalized Radian Frequency (radians per sample)’); ylabel(‘Magnitude (dB)’); text(-1,40,‘b)’); print -deps ‘https://ccrma.stanford.edu/~jos//eps/dftfilter.eps'; hold off;