0

对于波动的时间序列,我使用低通巴特沃斯滤波器在我的分析中排除高频噪声。它是使用 scipy.signal butter 和 filtfilt 函数实现的。

def butter_lp(data, N, cutoff, df):
    b, a = butter(N, cutoff/(df*len(data)), btype='lowpass', output='ba')
    y = filtfilt(b, a, data)

    return y

def plot_response(N, cutoff, data, df):
    b, a = butter(N, cutoff/(df*len(data)), btype='lowpass', output='ba')
    w, h = freqz(b, a)
    plt.plot(w * (1/(2*dt)), 20 * log10(abs(h)), label='{0}, {1}'.format(forder,cutoff))
    plt.xscale('log')
    plt.xlabel('Frequency [radians / second]')
    plt.ylabel('Amplitude [dB]')
    plt.legend(loc='best')
    plt.margins(0, 0.1)
    plt.grid(which='both', axis='both')
    plt.axvline(100, color='green')  # cutoff frequency
    #plt.show()

为了完整起见,输入“数据”代码看起来像

filtered["channel{0:02d}".format(ch)] = butter_lp(noiseelim(transpose(xbt[0][6])[ch-1][opint:clint]), forder, lpfreq, df)

以 5 阶(记住它应用了两次)和 200kHz 的截止频率,我看到信号在此截止频率以上的预期衰减,但信号的波动(现在在频谱的本底噪声区域)被平滑。为什么?我可以/我应该避免吗?

共享 y 图在左侧显示包括本底噪声的原始频谱和相邻(右侧)显示平滑衰减尾部代替本底噪声的滤波频谱

4

0 回答 0