C# MathNet.Filter不过滤数据
我使用Math.Net.Numerics首先用正弦波填充数组,然后使用Math.Net.Filtering创建带通以过滤数据,如下所示:C# MathNet.Filter不过滤数据,c#,.net,signal-processing,mathnet-numerics,C#,.net,Signal Processing,Mathnet Numerics,我使用Math.Net.Numerics首先用正弦波填充数组,然后使用Math.Net.Filtering创建带通以过滤数据,如下所示: void Main() { double[] preProcessedData = new double[128]; double[] postProcessedData = new double[128]; //Generate sinewave (350Hz, 250 samples) preProcessedData
void Main()
{
double[] preProcessedData = new double[128];
double[] postProcessedData = new double[128];
//Generate sinewave (350Hz, 250 samples)
preProcessedData = MathNet.Numerics.Generate.Sinusoidal(250, 44100, 350, 20);
postProcessedData = preProcessedData;
MathNet.Filtering.OnlineFilter bandPass = MathNet.Filtering.OnlineFilter.CreateBandpass(MathNet.Filtering.ImpulseResponse.Finite, 44100, 390, 410);
bandPass.ProcessSamples(postProcessedData);
//LINQPad extensions
preProcessedData.Dump();
postProcessedData.Dump();
}
但是,这似乎根本不是在过滤样本,如图所示(相同):
我做错了什么?该库的可用文档似乎还不太完整,因此我从中没有学到太多。ProcessSamples方法似乎没有修改输入数组,而是返回一个新的过滤数组。你需要:
postProcessedData = bandPass.ProcessSamples(preProcessedData);
(这是答案。)
顺便说一下,代码中的这一行:
postProcessedData = preProcessedData;
可能不会像你想的那样。它不会复制数据;它只是将后处理数据
指向预处理数据
指向的同一数组。因此,如果ProcessSamples
确实修改了输入数组,preProcessedData
和postproceseddata
在处理后将是相等的
postProcessedData = preProcessedData;