我有一个长度为T的实向量时间序列x和一个长度为t << T的滤波器h。h是傅里叶空间中的滤波器,是实数且对称。它近似于1/f。
我想用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连接
- 选择下一个重叠上一个P的x_b
我使用cuFFT加速,因此如果大部分操作都是FFT,则非常好。实际问题是3D的。此外,我不关心来自非因果滤波器的伪影。
谢谢, 保罗。