[Scipy-tickets] [SciPy] #1232: Support fft normalization once added to numpy
SciPy Trac
scipy-tickets@scipy....
Thu Jul 15 01:47:39 CDT 2010
#1232: Support fft normalization once added to numpy
-----------------------------------------------+----------------------------
Reporter: dgoldsmith | Owner: somebody
Type: enhancement | Status: new
Priority: normal | Milestone: 0.9.0
Component: Other | Version: 0.7.0
Keywords: fft normalization keyword unitary |
-----------------------------------------------+----------------------------
Comment(by cycomanic):
I think you misunderstood. If you do the FFT algorithm without
normalization:
fft(ifft(X))==len(X)*X
A lot of fft implementations therefore implicitly redefine ifft (numpy
does this, matlab as well):
def new_ifft(X):
return ifft(X)/len(X)
For unitary operation you need to redefine both ifft and fft
def new_ifft(X):
return ifft(X)/sqrt(len(X))
def new_fft(X):
return fft(X)/sqrt(len(X))
However because often if you use ffts/iffts you will do some calculation
later, so it's numerically a (little) more efficient to do the
normalization together with any other calculation you do. Therefore you
want both fft and ifft to have no normalization (fftw does it this way).
So in order for the new functions to not break existing behaviour they
should look like this:
def newfft(X, ... , norm=None):
F = fft(X)
if norm == 'n':
return F/len(X)
elif norm == 'unitary':
return F/sqrt(len(X))
else
return F
def newifft(X, ... , norm='n'):
I = ifft(X)
if norm == 'n':
return I/len(X)
elif norm == 'unitary':
return I/sqrt(len(X))
else:
return I
Hope that clears thinks up.
--
Ticket URL: <http://projects.scipy.org/scipy/ticket/1232#comment:8>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.
More information about the Scipy-tickets
mailing list