获得不同分辨率的输出ifft

2024-09-29 19:28:42 发布

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

我尝试在python中使用上海保税港区. 我已经设法对数据进行fft,去除wn以上的高阶频率(通过执行myfft[wn:-wn]=0),然后用ifft(myfft)重建数据的“平滑”版本。由ifft创建的数组具有与原始数据相同的点数。如何使用fft创建一个包含更多点的数组。在

x = [i*2*np.pi/360 for i in range(0,360,30)]
data = np.sin(x)
#get fft
myfft = fftp.fft(data)
#kill feqs above wn
myfft[wn:-wn] = 0
#make new series
newdata = fftp.ifft(myfft)

我还可以手动重新创建与这里演示的分辨率相同的系列 Recreating time series data using FFT results without using ifft

但当我试图提高x值数组的分辨率时,它也没有给出正确的答案。在

提前谢谢

尼尔


Tags: 数据fftdatanp分辨率数组seriesusing
1条回答
网友
1楼 · 发布于 2024-09-29 19:28:42

np.fft.fft返回的结果是直流分量在0位,然后是所有的正频率,然后是奈奎斯特频率(仅当元素数量为偶数时),然后是反向的负频率。为了增加分辨率,你可以在奈奎斯特频率的两边加上0:

import numpy as np
import matplotlib.pyplot as plt

y = np.sin(np.linspace(0, 2*np.pi, 32, endpoint=False))

f = np.fft.fft(y)
n = len(f)
f_ = np.concatenate((f[0:(n+1)//2],
                     np.zeros(n//2),
                     [] if n%2 != 0 else f[(n+1)//2:(n+3)//2],
                     np.zeros(n//2),
                     f[(n+3)//2:]))
y_ = np.fft.ifft(f_)
plt.plot(y, 'ro')
plt.plot(y_, 'bo')
plt.show()

enter image description here

相关问题 更多 >

    热门问题