When you work with DFT you need to remember one big assumption of the DFT - The samples are part of periodic signal.
For example, assume your signal in on the grid vX = [-3:3]
.
Let's say it is the simplest symmetric function: vY = vX .^ 2
.
If you apply fft
on it the result won't be real.
Why is that?
Because the DFT
assumes the input is periodic.
Hence the input signal is something like [vY, vY, vY, ..., vY]
.
Moreover, for the DFT the indexing is [0, 1, ..., N - 1]
which in this case is [0:6]
. Now if we do periodic continuation, what will you get on the grid of [-7:6]
?
figure();
plot([-7:6], [vY, vY]);
It won't be a be symmetric around 0 (Of course look at [-6, 6]
).
Let's define vYY = vY(1:6)
.
If you apply fft(vYY)
the result is pure real.
Why is that?
Because for the DFT it sits on the grid [0:5]
.
If you plot a periodic continuation of it:
figure();
plot([-6:5], [vYY, vYY]);
Look on [-5, 5]
, now it is symmetric.
Hence its DFT is pure real.
MATLAB Code
% The Grid
vX = [-3:3];
vY = vX .^ 2; %<! Even Function on the Grid
figure();
plot(vX, vY);
title('Figure 001');
vYDft = fft(vY);
norm(imag(vYDft), 'inf')
norm(imag(fft(vY(1:6))), 'inf')
figure();
plot([-7:6], [vY, vY])
title('Figure 002');
figure();
plot([-6:5], [vY(1:6), vY(1:6)]);
title('Figure 003');
Output:
ans = 7.2678
ans = 0
Figure 001
Figure 002
Figure 003