2015-05-18 4 views
1

Я использую Math.Net.Numerics, чтобы сначала заполнить массив синусоидальной волной, а затем использовать Math.Net.Filtering для создания полосы пропускания для фильтрации данных, например:MathNet.Filter не фильтрует данные

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(); 
} 

Однако, это не кажется, не фильтруя образцов вообще, как можно увидеть здесь (одинаковые):

Unfiltered Filtered 
1.139189962 1.139189962 
2.274680952 2.274680952 
3.402786006 3.402786006 
4.519842146 4.519842146 
5.622222267 5.622222267 
6.706346918 6.706346918 
7.768695925 7.768695925 
8.80581982 8.80581982 
9.81435104 9.81435104 
10.79101486 10.79101486 
11.73264004 11.73264004 
12.6361691 12.6361691 
13.49866827 13.49866827 
14.31733699 14.31733699 
15.08951702 15.08951702 
15.81270108 15.81270108 
16.48454099 16.48454099 
17.10285526 17.10285526 

Что я делаю неправильно? Документация, доступная для библиотеки, пока не кажется полной, поэтому я многому не научился.

ответ

1

Метод ProcessSamples не изменяет входной массив, вместо этого возвращает новый, отфильтрованный массив. Вам нужно:

postProcessedData = bandPass.ProcessSamples(preProcessedData); 

(Вот documentation.)

Кстати, эта строка из кода:

postProcessedData = preProcessedData; 

, вероятно, не делать то, что вы думаете. Он не делает копию данных; он просто указывает postProcessedData тому же массиву, на который указывает preProcessedData. Так что если ProcessSamplesсделал, измените входной массив, preProcessedData и postProcessedData будет равен после обработки.

Смежные вопросы