c#中的低通滤波器泛化

时间:2013-09-20 06:16:34

标签: c# algorithm signal-processing

假设我的ac#list包含三个随机数 x ->200...300y->100...150z->100..300作为rows=200 and cols=3等条目的元素

x   y   z 
210 106 220
200 120 134
220 150 230
280 120 136
204 110 270
260 120 184
209 110 209
210 110 134
...

我读到的是低通滤波器只是平滑结果以消除高频。最简单的低通滤波器是一个盒式滤波器,它通过将n个样本平均在一起来完成。对于平均2个样本,这很简单:

sample[n] (sample[n] + sample[n + 1]) / 2;

那么,我如何将低通滤波器应用于这些数据呢?

我是否需要对矩阵上的每个单元格应用sample[n] (sample[n] + sample[n + 1]) / 2;或做什么?

我正在读低通和高通滤波器'取消'或者将频率置于高于/低于阈值的范围内,但在这种情况下获得阈值的最佳方法是什么,我不明白......

您能解释一下如何将低通滤波器应用于数据集吗?

2 个答案:

答案 0 :(得分:1)

M个数据点的moving average是简单但相当粗略的低通滤波器,平滑数据。对于每个输出数据点,您可以获取N个输入点的平均值,例如:对于N = 3:

for (i = 1; i < N - 1; ++i)
{
    output[i] = (input[i - 1] + input[i] + input[i + 1]) / 3;
}

当你增加M时,你会得到更多的平滑(因为你的平均点数更多) - 另一种看待这种情况的方法是删除数据的更多高频成分(通常是噪音)。

请注意,这种移动平均滤波器的频率响应相当差 - 它可以找到一些相当简单的任务,例如从时间序列数据中过滤噪声,例如股票价格,但对于要求更高的应用,我们通常使用更复杂的过滤器设计。

high pass filter是低通滤波器的补充,因为它滤除了低频分量。这包括“稳态”(0 Hz)分量,因此通常输出将代表输入中的短期变化。

非常粗糙的高通滤波器:

for (i = 1; i < N ; ++i)
{
    output[i] = input[i] - input[i - 1];
}

答案 1 :(得分:1)

在我看来,外行人的答案很简单,就是由电路的RC或RCL时间常数设定的转换速率。 R和C是反应性意味着结果将根据频率而变化。在由出现频率(采样率)设定的任何时间段。仅查看没有L的RC更简单。但基本上不允许电压在时间上比RC时间常数所允许的更快地改变,RC时间常数是与时间或频率相关的超越函数。引起限制SLEW率的自然力量似乎永远不会成为此类讨论的主题。