c# - MathNet.Filter 不过滤数据

标签 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 = 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

我做错了什么?该库的可用文档似乎还不是很完整,因此我还没有从中学到很多东西。

最佳答案

ProcessSamples 方法似乎不会修改输入数组,而是返回一个新的过滤数组。您需要:

postProcessedData = bandPass.ProcessSamples(preProcessedData);

(这是 documentation 。)

顺便说一下,您的代码中的这一行:

postProcessedData = preProcessedData;

可能不会按照你的想法做。它不会复制数据;而是复制数据。它只是将 postProcessedData 指向 preProcessedData 所指向的同一个数组。因此,如果 ProcessSamples 确实修改了输入数组,则处理后 preProcessedData 和 postProcessedData 将相等。

关于c# - MathNet.Filter 不过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30311521/

相关文章:

c# - "The operation is not valid for the state of the transaction"错误和交易范围

c# - 使用 WCF 的原始 MQ 消息

algorithm - 离散余弦变换公式差异

c# - 为什么 List<T>.Enumerator 比我的实现更快?

c# - Windows Azure 服务总线队列 - MessageSender 还是 QueueClient?

python - 如何使用python获取声音包络

matlab - 为什么傅立叶域中的零填充会导致复杂的逆变换?

c# - 如何仅对某些属性应用缩进序列化?

c# - ProtoBuf - 迁移到新版本

.net - 在 Saber 网络服务中出现错误 FRMT.NOT ENT BGNG