自定义np.fft.fft算法python中的函数

2024-04-20 13:15:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望对函数“应力”进行傅里叶变换,从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=求和(A_m*exp(-2*piimk/n)),其中求和是从m=0到m=n-1(http://docs.scipy.org/doc/numpy-1.10.1/reference/routines.fft.html)。如何将其更改为我在第一个代码中提到的形式,即exp(-1jfreq*t)(freq是频率,t是已经预定义的时间)?或者我必须对数据进行后期处理?你知道吗

谢谢你的帮助。你知道吗


Tags: 函数代码inimportfftnumpyforoutput