【发布时间】:2025-12-06 06:10:01
【问题描述】:
所以我一直在尝试使用 Mathnet 过滤库在 C# 中实现低通滤波器。我有一个问题,因为我不知道如何使用该方法为滤波器创建系数。有人能告诉我如何指定截止频率(它必须以每单位的样本为单位)吗? 例如,如果我希望截止频率为 400Hz,那么每单位的样本数是多少? 谢谢。
public Filter(ISampleProvider _source, long Length, int _cutoff)
{
source = _source;
cutoffFrequency = _cutoff;
float[] s = new float[Length];
_source.Read(s, 0, (int)Length);
Normalize(s);
var coefficients = MathNet.Filtering.FIR.FirCoefficients.LowPass(_source.WaveFormat.SampleRate, (double)400/ ((double)source.WaveFormat.SampleRate/(double)Length), 2);
MathNet.Filtering.FIR.OnlineFirFilter filter = new MathNet.Filtering.FIR.OnlineFirFilter(coefficients);
double[] output = Array.ConvertAll(s, x => (double)x);
double[] output2 = filter.ProcessSamples(output);
output1 = new float[output2.Length];
for (int i = 0; i < output2.Length; i++)
{
output1[i] = Convert.ToSingle(output2[i]);
}
}
我试图将我想要的频率除以信号的频率分辨率,但这样信号似乎根本没有改变。
【问题讨论】:
标签: c# filter signal-processing mathnet-numerics