DFT Bin Response

Below is the Matlab for Fig.6.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
wStep = 2*pi/N;
w = [0:wStep:2*pi - wStep]; % DFT frequency grid

interp = 10;
N2 = interp*N; % Denser grid showing "arbitrary" frequencies
w2Step = 2*pi/N2;
w2 = [0:w2Step:2*pi - w2Step]; % Extra dense frequency grid
X = (1 - exp(j*(w2-wk)*N)) ./ (1 - exp(j*(w2-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 = 20*log10(magX);       % Spectral magnitude in dB
% Since the zeros go to minus infinity, clip at -60 dB:
magXdb = max(magXdb,-60*ones(1,N2));
magXddb = magXdb(1:interp:N2); % DFT frequencies only
subplot(2,1,2);
hold off; plot(w2,magXdb,'-'); hold on; plot(w,magXddb,'*');
xlabel('Normalized Radian Frequency (radians per sample)');
ylabel('Magnitude (dB)'); grid;
text(-1,40,'b)');
print -deps '../eps/dftfilter.eps';
hold off;


Next Section:
DFT Matrix
Previous Section:
DFT Sinusoids for