【问题标题】:How to apply a Zero-Phase filter using MathDotNet library?如何使用 MathDotNet 库应用零相位滤波器?
【发布时间】:2023-03-23 22:15:02
【问题描述】:

Math.NET 库中是否有特定的函数或类来获取零相位(非因果)IIR 滤波器?

如果没有,如何使用当前函数来实现?我相信这可以通过对信号进行滤波然后反向滤波得到,但我不确定结果是否正确。

【问题讨论】:

    标签: c# math.net mathnet-filtering


    【解决方案1】:

    以下示例显示了如何使用反向滤波技术获得零相位滤波器,并将结果与​​传统低通滤波器的结果进行比较。被过滤的信号是 5Hz 正弦波 + 白高斯噪声。

    //signal + noise
    double fs = 1000; //sampling rate
    double fw = 5; //signal frequency
    double n = 5; //number of periods to show
    double A = 10; //signal amplitude
    double N = 2; //noise amplitude
    int size = (int)(n * fs / fw); //sample size
    
    var t = Enumerable.Range(1, size).Select(p => p * 1 / fs).ToArray();
    var noise = new WhiteGaussianNoiseSource();
    var y = t.Select(p => (A * Math.Sin(2 * pi * fw * p)) + (N * noise.ReadNextSample())).ToArray();
    
    //filter
    double fc = 10; //cutoff frequency
    var filter = OnlineFirFilter.CreateLowpass(ImpulseResponse.Finite, fs, fc);
    
    double[] yf1 = filter.ProcessSamples(y); //Lowpass
    double[] yf2 = filter.ProcessSamples(yf1.Reverse().ToArray()); //Lowpass reversed
    double[] yf2r = yf2.Reverse().ToArray(); //Zero-Phase
    

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2014-04-26
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2018-10-30
      相关资源
      最近更新 更多