Sample DFT Implementation
Definiton
The discrete Fourier transform transforms a sequence of N complex numbers
into another sequence of complex numbers, , which is defined by:
(Eq.1)
The transform is sometimes denoted by the symbol , as in or or
bufferSize = 140; % Number of samples
fs = bufferSize; % Sampling frequency (samples per second)
t = linspace(0, 1, bufferSize); % Time vector spanning 1 second
f = 10;
x = sin(2*pi*f*t); % Generate sine wave
% Compute DFT manually
X = zeros(1, bufferSize);
for k = 1:bufferSize
for l = 1:bufferSize
X(k) = X(k) + x(l) * exp(-1i * 2 * pi * (k-1) * (l-1) / bufferSize);
end
end
% Compute frequency axis (first half of spectrum)
freqs = (0:bufferSize/2-1) * (fs / bufferSize);
% Plot original signal
figure;
plot(t, x);
title('Original Signal');
xlabel('Time (s)');
ylabel('Amplitude');
1
% Plot properly scaled magnitude spectrum
figure;
plot(freqs, abs(X(1:bufferSize/2)));
title('Magnitude Spectrum');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
grid on;
2
3