我希望对函数“应力”进行傅里叶变换,从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是已经预定义的时间)?或者我必须对数据进行后期处理?你知道吗
谢谢你的帮助。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐