python - 以不同的分辨率获取输出 ifft

标签 python scipy fft fftpack

我正在尝试使用 scipy.fftp 在 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 值数组的分辨率时,它也没有给我正确的答案。

提前致谢

尼尔

最佳答案

np.fft.fft 返回的内容是位置 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

关于python - 以不同的分辨率获取输出 ifft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988222/

相关文章:

python - Numpy 减法函数的数学符号

python - 如何根据其他两个系列及其索引创建 Pandas 系列?

python - 在 Pyramid 中导入它们时如何缩短路径?

matlab - 通过 FFT 执行 2D 卷积时的奇怪行为

python - 将图像转换为 Python 中的二维坐标数组以实现两点相关

python - Python 究竟是如何检查列表的?

python - 关于使用 skimage 读取 tiff 文件

python - 使用 spines 在 matplotlib 中仅自定义刻度线的一侧

python - 如何根据数组中的特征的大小来标记特征?

c - 从 C 中的 FFT 阵列中删除 1000Hz 音调