FFT gives different answers according to what axis its applied to
4 views (last 30 days)
I am seeing some behaviour with fft which I did not expect. It appears the output of the FFT depends on the axis to which it is applied.
In the following example - doing the FFT of the same data vector differs depending on whether you do fft, axis 1, data (100,1) compared to doing fft on axis 2 with the data shaped (1,100). I would expect these to be the same?
r = randn(100,1);
rf = fft(r);
rf1 = fft(r,,1);
rt = r';
rtf = fft(rt,,2);
Even more worrying - ifft behaves the same way, so when reconstructing the original random array:
irf = ifft(rf);
irtf = ifft(rtf'); % this doesn't match irf
irtf2 = ifft(rtf,,2); % this does match irf
Shouldn't irtf and irtf2 be the same? This seems quite dangerous to me - I thought it is standard to transpose data as required in Matlab and I would not expect to see differences in the output here.
Guillaume on 20 Feb 2015
Edited: Guillaume on 20 Feb 2015
The results are the same. Your problem is with the usage of ' aka ctranspose which computes the conjugate transpose of the input, i.e. not only transpose the vector but returns the conjugate of complex values.
To just do a plain transpose use the dotted version .' aka transpose:
r = randn(100, 1);
isequal(fft(r), fft(r, , 1)) %return true
isequal(fft(r), fft(r.', , 2).') %return true
edit: d'oh. Got my demo wrong!