2

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.

ysap
  • 173
  • In your definition of $n$, you create a row vector. x0 would then be a row vector, except that you take the sin of n': n-transposed. So x0 would, I believe, be a column vector. Which means that y0 would be a column vector, and so fliplr would be operating on a column vector and hence do nothing (at least, this would be the case if Octave works as MATLAB does). Did you check that y0 is a row vector, as expected? – Emily Sep 06 '12 at 21:12
  • @EdGorcenski - x0 is being transposed in the sum() as well, so I end up with a row vector. Typing whos shows all vectors have a 1 in their 1st dimension. – ysap Sep 06 '12 at 21:33
  • Ah, so it is; I missed that! – Emily Sep 06 '12 at 21:49
  • @EdGorcenski - I just posted an update to the question. – ysap Sep 06 '12 at 21:49

1 Answers1

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.

ysap
  • 173