I have implemented a (direct) DFT in MatLab (following script) and compared it to the built-in FFT routine. The magnitude response seems to be identical (excluding some possibly round-off errors), but in the phase I get different results.
I can't find the source of these differences and I would like some insight on that.
script (only the case of even vector length is presented here):
%% Calculate needed variables
DFT = zeros(length(data), 1); % Pre-allocate result vector
n = (1:length(data))/length(data); % Calculate the n/N factor
n = -1j * n * 2 * pi; % Calculate the (-j * n * 2 * pi)/N factor
dftLength = (length(data)/2) + 1; % Calculate the length of unique Fourier coefficients
% Calculate the coefficients
for i = 1:dftLength
exponent = exp((i - 1) * n); % Calculate the exponent
DFT(i) = exponent * data; % Multiply the signal with the exponent
% Add the conjugate symmetric part of the spectrum
if i ~= 1
% Skip first bin (it's DC)
DFT(2 * dftLength - i) = conj(DFT(i)); % Add conjugate symmetric bin
end
end
You can see the resulting plot here

https://dsp.stackexchange.com/questions/54848/measure-sine-wave-amplitude-from-adc-signal/54879#54879
Here is an article I wrote discussing an interpretation of the meaning of a DFT: https://www.dsprelated.com/showarticle/768.php
– Cedron Dawg Apr 07 '19 at 14:49