我有一些数据,如下图所示,我有兴趣找到它的一些傅里叶级数系数。你知道吗
r = np.array([119.80601628, 119.84629291, 119.85290735, 119.45778804,
115.64497439, 105.58519852, 100.72765819, 100.04327702,
100.08590518, 100.35824977, 101.58424993, 105.47976376,
112.27556007, 117.07679226, 118.99998888, 119.60458086,
119.78624424, 119.83022022, 119.36116943, 115.72323767,
106.58946834, 101.19479124, 100.11537349, 100.13313755,
100.41846106, 101.42255377, 104.33650237, 109.73625492,
115.14763728, 118.24665037, 119.35359999, 119.68061835])
z = np.array([-411.42980545, -384.98596279, -358.13032372, -330.89578468,
-303.39129113, -275.76248957, -248.24478443, -221.07069838,
-194.33260984, -168.05271807, -142.19357982, -116.62090103,
-91.15354178, -65.56745626, -39.65284757, -13.29632162,
13.54374939, 40.84929432, 68.50496394, 96.33720787,
124.08525182, 151.36802193, 177.98791952, 204.0805317 ,
229.85399128, 255.44727674, 281.02166554, 306.75399703,
332.74638285, 359.05528646, 385.74336711, 412.8189858 ])
plt.plot(z, r, label='data')
plt.legend()
l = []
for i in range(32-1):
l.append(z[i]-z[i+1])
Ts = np.mean(l)
然后我计算fft: 从scipy.FFT包装导入fft
rf = scipy.fftpack.fft(r)
对于信号重建:
fs = 1/Ts
amp = np.abs(rf)/r.shape[0]
n = r.shape[0]
s = 0
for i in range(n//2):
phi = np.angle(rf[i], deg=False)
a = amp[i]
k = i*fs/n
s += a*np.cos(2*np.pi*k *(z) +phi)
plt.plot(z, s, label='fft result')
plt.plot(z, r, label='data')
plt.legend()
结果是奇怪的,但无论是在振幅和频率方面。你知道吗
复谱是一个范围为(-fMax/2,…,+fMax/2)的对称谱。 你只使用了光谱的右侧正片。这意味着,你重建的信号只包含一半的频谱频率。 因为光谱是对称的,所以你所要做的就是把计算出的绝对值加倍。然而,有一个重要的例外。直流值振幅[0]不得加倍。你知道吗
相关问题 更多 >
编程相关推荐