在python中自定义np.fft.fft函数

时间:2016-06-01 18:07:16

标签: python numpy integration fft

我希望对函数'stress'进行傅立叶变换,从0到无穷大,并提取实部和虚部。我有以下代码使用数字集成技术来完成它:

import numpy as np
from scipy.integrate import trapz
import fileinput
import sys,string 

window = 200000 # length of the array I wish to transform (number of data points)
time = np.linspace(1,window,window)
freq = np.logspace(-5,2,window)
output = [0]*len(freq)
for index,f in enumerate(freq):
    visco = trapz(stress*np.exp(-1j*f*t),t)
    soln = visco*(1j*f)
    output[index] = soln

print 'f storage loss'
for i in range(len(freq)):
    print freq[i],output[i].real,output[i].imag

这让我对输入数据进行了很好的转换。

现在我有一个大小为2x10 ^ 6的数组,并且使用上述技术是不可行的(计算时间尺度为O(N ^ 2)),所以我已经转向numpy中的内置fft函数。 没有太多的参数可以指定来更改此功能,因此我发现很难根据我的需要对其进行自定义。 到目前为止我已经

import numpy as np
import fileinput
import sys, string

np.set_printoptions(threshold='nan')

N = len(stress)
fvi = np.fft.fft(stress,n=N)
gprime = fvi.real
gdoubleprime = fvi.imag
for i in range(len(stress)):
    print gprime[i], gdoubleprime[i]

并没有给我准确的结果。

python中的DFT格式为A_k = summation(a_m * exp(-2 * pi i m k / n))其中求和从m = 0到m = n-1(http://docs.scipy.org/doc/numpy-1.10.1/reference/routines.fft.html)。如何将其更改为我在第一个代码中提到的格式,即exp(-1j freq * t)(freq是频率,t是已经预定义的时间)?或者我是否需要对数据进行后期处理?

提前感谢您的帮助。

0 个答案:

没有答案