2
$\begingroup$

In this section from Wikipedia about IDFT, three methods are given for expressing the Inverse Discrete Fourier Transform in terms of the direct transform.

Being curious, I implemented the three methods in Octave:

% define TD signal N = 1024; n = [1:N]-1; f = [4 8]; x0 = sin(2*pi*n'*f/N); x0 = sum(x0');  % calculate FD spectrum y0 = fft(x0);  % trick #1 y1 = fliplr(y0); x1 = fft(y1) / N;  % trick #2 y2 = conj(y0); x2 = conj(fft(y2)) / N;  % trick #3 y3 = imag(y0) + i*real(y0); x3 = fft(y3) / N; x3 = imag(x3) + i*real(x3);  % plot results plot(n,x0,'m-o', n,x1,'r-*', n,x2,'g-^', n,x3,'bxo'); axis tight 

If happens that tricks #2 and #3 work well, while trick #1 fails to generate the correct result.

Am I missing something in the explanation, or is there an error in Wikipedia?

UPDATE: It seems like the magnitude of the y1 result is actually OK, it is just that the angle is doing funny things. Replacing the plot line with:

plot(n,abs(x0),'m-o', n,abs(x1),'r-*', n,abs(x2),'g-^', n,abs(x3),'bxo'); 

shows the overlap.

  • 0
    @EdGorcenski - I just posted an update to the question.2012-09-06

1 Answers 1

3

I found my mistake. According to Wikipedia, using the 1st method, the indices of the reversed series are modulo N. So the correct code is:

% trick #1 y1 = [y0(1) fliplr(y0(2:N))]; x1 = fft(y1) / N; 

and not as posted in the question.