On 2/5/07, Warren Focke <focke@slac.stanford.edu> wrote:
On Mon, 5 Feb 2007, Timothy Hochberg wrote:
On 2/5/07, Hanno Klemm <klemm@phys.ethz.ch> wrote: [numpy.fft[
The packing of the result is "standard": If A = fft(a, n), then A[0]
contains the zero-frequency term, A[1:n/2+1] contains the positive-frequency terms, and A[n/2+1:] contains the negative-frequency terms, in order of decreasingly negative frequency. So for an
8-point
transform, the frequencies of the result are [ 0, 1, 2, 3, 4, -3, -2, -1].
[scipy.fft]
f = [0,1,...,n/2-1,-n/2,...,-1]/(d*n) if n is even
f = [0,1,...,(n-1)/2,-(n-1)/2,...,-1]/(d*n) if n is odd
So one claims, that the packing goes from [0,1,...,n/2,-n/2+1,..,-1] (fft) and the other one claims the frequencies go from [0,1,...,n/2-1,-n/2,...-1]
Is this inconsistent or am I missing something here?
Both, I think.
In the even case, the frequency at n/2 is shared by both the positive frequencies, so for that case things are consistent if not terribly clear. For the odd case, this is not true, and the scipy docs look correct in this case, while the numpy docs appear to assign an extra frequency to the positive branch. Of course that's not the one you were complaining about ;-).
Extra frequency where?
(numpy 1.0, debian sarge)
n=9 A=arange(n)
numpy docs:
A[1:n/2+1] array([1, 2, 3, 4]) A[n/2+1:] array([5, 6, 7, 8])
scipy docs:
(n-1)/2 4 -(n-1)/2 -4
Note that in the odd-n case, there is no Nyquist term. If F = fft(f), len(f) == 9 then F[-4] != F[4] (F[5] == F[-4] by periodicty in frequency)
Ooops, you're right I worked this through on paper and just blew it. I suppose I'd look less silly had I actually checked the results using the interpreter. -- //=][=\\ tim.hochberg@ieee.org