将matlab线转换为scipy信号处理线

信息处理 过滤器 过滤器设计 频率 低通滤波器
2022-02-16 08:18:02

我正在将一些遗留的 matlab 代码转换为 Python,并且我正在努力从遗留代码中在 python 中找到正确的函数。matlab过滤器是

wheelFilt=designfilt('lowpassiir','FilterOrder',15,'PassbandFrequency',1000,'PassbandRipple',0.0001,'SampleRate',2000);
Filtered(:,q)=filtfilt(wheelFilt,TrainPassData(:,q));

TrainPassData 是一个 nxn 矩阵,是一个迭代变量。

使用 scipy,我很困惑哪个过滤器适合这个,因为黄油似乎没有输出相同的值。例如,我将原始数据作为 X 中的列表,我希望将过滤后的值保存在名为 Y 的列表中。感谢任何和所有帮助。

1个回答

Matlab 提出了一个 15 阶 Chebycheff 类型 1 过滤器,因此可能可以将相同的过滤器规格插入https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cheby1.html

如果滤波器规格从不改变,您只需硬连线系数。

据说这是非常有问题的代码,所以在盲目移植它之前,我建议认真看看它试图做什么以及为什么

  1. 频率的截止是奈奎斯特频率。所以这实际上没有过滤任何东西。
  2. 带通纹波目标非常激进,这使得滤波器阶数非常高(对于 IIR)
  3. 使用filtfilt()使得这也与严重的后振铃和预振铃无关(对于任何合理的截止频率)。
  4. Scipyfiltfilt()似乎只支持滤波器的传递函数表示(而不是极点和零点或二阶部分)。这可能导致高阶 IIR 出现严重的数值或稳定性问题

如所写,代码实际上并没有做任何事情,因此您可以将其替换为

Filtered(:,q)= TrainPassData(:,q);

跑步

impz(wheelFilt,50);

获得滤波器的脉冲响应会产生下图,这证实了滤波器什么都不做。

wheelFilt 的脉冲响应