我尝试使用 Scipy 设计一个低通滤波器(切割 40Hz 左右),它似乎适用于以下代码:
fs = 100000 # Sampling frequency = 100kHz
N, Wn = signal.buttord(40/(fs/2), 50/(fs/2), 0.1, 5)
sos = signal.butter(N, Wn, 'low', output='sos')
这个过滤器最终必须嵌入没有 FPU 的板上,所以我必须将 SOS 转换为整数数组。
但问题是:SOS 矩阵第一行的某些系数太低,无法转换为 32 位整数:
[ 8.00108536e-32 1.60021707e-31 8.00108536e-32 1.00000000e+00
-9.97022785e-01 0.00000000e+00]
用 0 或 1 替换几乎为空的值(一旦所有其他系数按比例放大)不起作用。
你知道一个 scipy 实用程序,它强制过滤器的设计与转换为整数兼容吗?
如果没有,您知道如何更改buttord
或butter
args 以增加第一行的系数吗?(不能改变采样频率和截止频率)。
提前致谢