我同意@user28715 的回答。最好的方法是将过滤器应用于您的时间序列以获得校准的时间序列。
筛选
您没有指定您使用的是哪种语言,但在 Matlab 中我使用了 designfilt 函数。https://www.mathworks.com/help/signal/ref/designfilt.html
d = designfilt('arbmagfir',...);
a = 1;
b = d.Coefficients;
或者你可以使用
b = fircls(N,f,amp,up,lo);
我不知道如何在 Python 中做到这一点,但可能有一个等价物。
MATLAB
冲动反应
N 是时间序列的长度;M 是你的脉冲响应的长度;
M = 200;
p = zeros(M);
p(1) = 1;
h = filter(b,a,p);
但是我只展示了上面的语法来说明与下面的python方法等效。真的,你只会使用:
h = filter(d,p);
卷积方法
u = conv(x, h);
u = u(0:N);
傅里叶逆变换法
z = ifft(fft([x zeros(1,M-1)], nFFT) .* fft([h zeros(1,N-1), nFFT));
Python
冲动反应
p = np.zeros(200)
p[0] = 1
h = signal.lfilter(b, a, p)
卷积方法
u = signal.convolve(x, h)
u = u[0:N]
傅里叶逆变换法
z = ifft(fft(x, nFFT) * fft(h, nFFT))