python带通滤波器 - 奇异矩阵误差

时间:2015-07-31 01:44:14

标签: python matrix scipy filtering signal-processing

我一直在尝试使用scipy设计一个带通滤波器,但我不断收到LinAlg奇异矩阵错误。我读到一个奇异矩阵是一个不可逆的矩阵,但我不确定这个错误是如何出现的,以及我可以做些什么来解决它

代码接收EEG信号(在下面的代码中,我刚刚用int数组替换以进行测试)并滤除频率< 8Hz和> 8Hz 12Hz(alpha波段)

任何人都可以了解奇异矩阵错误的来源吗?或者,如果您知道更好的方法来过滤这样的信号,我也很乐意测试其他选项

from scipy import signal
from scipy.signal import filter_design as fd
import matplotlib.pylab as plt

#bandpass
Wp = [8, 12]   # Cutoff frequency
Ws = [7.5, 12.5]   # Stop frequency
Rp = 1             # passband maximum loss (gpass)
As = 100              # stoppand min attenuation (gstop)

b,a = fd.iirdesign(Wp,Ws,Rp,As,ftype='butter')
w,H = signal.freqz(b,a)  # filter response
plt.plot(w,H)

t = np.linspace(1,256,256)
x = np.arange(256)
plt.plot(t,x)

y = signal.filtfilt(b,a,x)
plt.plot(t,y)

1 个答案:

答案 0 :(得分:2)

iirdesign documentation所示,WpWs"从0到1归一化,其中1是奈奎斯特频率"。

如果您的采样率为Fs(例如100Hz),您可以使用以下方法标准化截止频率和停止频率:

Wp = [x / (Fs/2.0) for x in Wp]
Ws = [x / (Fs/2.0) for x in Ws]