【发布时间】:2011-04-16 02:39:19
【问题描述】:
我有一个长度为 T 的实向量时间序列 x 和一个长度为 t
我想用 h 过滤 x 得到 y。
假设 t == T 和长度为 T 的 FFT 可以放入内存(两者都不成立)。为了在 python 中获得我过滤后的 x,我会这样做:
import numpy as np
from scipy.signal import fft, ifft
y = np.real( np.ifft( np.fft(x) * h ) ) )
由于条件不成立,我尝试了以下 hack:
- 选择一个填充大小 P
- 通过样条插值将 h 缩放为大小 B + 2P > t (h_scaled)
- y = [];环形:
- 从 x 获取长度为 B + 2P 的块(称为 x_b)
- 执行 y_b = ifft(fft( x_b ) * h_scaled)
- 从 y_b 的任一侧删除填充 P 并与 y 连接
- 选择下一个 x_b 与最后一个重叠的 P
这是一个好的策略吗?如何以一种好的方式选择填充 P?这样做的正确方法是什么?我不太了解信号处理。这是一个学习的好机会。
我正在使用 cuFFT 来加快速度,所以如果大部分操作都是 FFT,那就太好了。实际问题是3D。另外,我不担心来自非因果过滤器的伪影。
谢谢, 保罗。
【问题讨论】:
标签: python numpy scipy signal-processing fft