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

标签 python matrix scipy filtering signal-processing

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

该代码接收 EEG 信号(在下面的代码中,我刚刚将其替换为 int 数组以进行测试)并过滤掉频率 < 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)

最佳答案

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]

关于python带通滤波器-奇异矩阵误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736839/

相关文章:

python - 如何使用 SciPy/Numpy 过滤/平滑?

python - 尝试在子进程中调用 bash 脚本时,我被拒绝了权限

java - AES Java 到 Python

r - 如何在 R 中使用 meshgrid 函数创建两个矩阵?

python - 如何在 Scipy 线性规划(非负最小二乘法)中添加正则化

python-2.7 - 我无法使用 python 安装 numpy 和 scipy

python - Pandas:添加参数以应用多个输入

python - 增加单个 socket.send() 调用中发送的数据量

c - DGEMM 之后最后一行中的零值

math - 矩阵函数——如何添加 "up"向量?