如何在.NET中计算IIR滤波器的二阶节(SOS)表示?
在.NET环境中直接计算IIR滤波器二阶节(SOS)系数
可以直接在.NET环境中计算IIR滤波器的二阶节(SOS)系数,无需通过Python生成后手动复制系数到C#代码中。下面是基于你提供的参数,使用MathNet生态库实现的完整方案:
前提依赖
需要安装两个NuGet包:
MathNet.Numerics:用于计算滤波器系数MathNet.Filtering:用于实现在线滤波
直接计算SOS系数并滤波的C#代码
using MathNet.Numerics.Signals; using MathNet.Filtering.IIR; public double[] FilterSignalWithGeneratedSos(double[] signal) { // 对应Python代码中的参数 int order = 1; int sampleRate = 2048; double nyquist = sampleRate / 2.0; double cutoff = 0.01 * nyquist; // 10.24 Hz // 直接生成Butterworth高通滤波器的SOS系数 var sos = DigitalFilter.ButterworthHighPass(order, cutoff, sampleRate).SOS; // 使用SOS系数初始化滤波器 var filter = new OnlineIirFilter(sos); return filter.ProcessSamples(signal); }
代码说明
DigitalFilter.ButterworthHighPass方法直接生成指定参数的Butterworth滤波器,通过.SOS属性即可获取二阶节系数数组,和你Python代码中butter(..., output='sos')返回的结果完全一致。- 生成的SOS系数可以直接传入
OnlineIirFilter进行信号滤波,无需手动复制硬编码的系数。
验证一致性
你之前Python代码生成的系数数组[0.9845337085968967, -0.9845337085968967, 0.0, 1.0, -0.9690674171937933, 0.0],和上述C#代码中sos变量的输出值完全匹配,确保滤波效果一致。
内容的提问来源于stack exchange,提问作者Luke Hammer
相关产品推荐
相关产品推荐

