我正在学习信号处理,试图用python模拟一个一阶低通滤波器,如下差分方程:(1+ω)y[n]=x[n]+ωy[n-1] 其中 y [n] 表示输出,x [n] 表示输入。所以我尝试把这个滤波器与 Scipy.filtfilt 一起使用来处理数据,ω 为 5:
import scipy.signal as signal
import matplotlib.pyplot as plt
b = [1]
a = [6, -5]
#loading origin-CH1 0.txt
x = []
with open("origin'-CH1 20.txt", 'r') as f:
for line in f:
x.append(float(line))
y = signal.filtfilt(b=b, a=a, x=x,method='gust')
#writing output to origin-CH1 0.txt
with open("origin'--CH1 0.txt", 'w') as f:
for i in y:
f.write(str(i) + '\n')
#plot
plt.plot(y, label="After Filter", color='red')
plt.plot(x, label="Before Filter", color='blue',alpha=0.5)
plt.show()
但是非常奇怪的是在滤波后数据的起始/结尾段有一段明显的拉高/降低,如下图所示
这很奇怪。
原始数据:origin'-CH1 20.txt
试过减小 ω 的值,但似乎不太有用,并且滤波效果也会变差。