【问题标题】:Low pass filter generalization in c#c#中的低通滤波器泛化
【发布时间】:2013-09-20 06:16:34
【问题描述】:

假设我有一个 c# 列表,其中包含三个 随机数 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; 还是要做什么?

我正在阅读低通和高通滤波器“取消”或将高于/低于阈值的频率归零,但在这种情况下,获得阈值的最佳方法是什么,我不明白......

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

【问题讨论】:

    标签: c# algorithm signal-processing


    【解决方案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];
    }
    

    【讨论】:

    • 拿高通滤波器可以用什么?
    • 一个问题是,我需要将这个公式应用于每个向量,对吗? ,比如先应用于 x,然后是 y,最后是 z 列是否正确?
    • 是的,如果您有 3 个独立的数据系列(例如 x、y、z 加速度计数据),那么您将分别过滤每个系列。
    • 虽然这些过滤器确实是“粗制滥造的”,但这绝不意味着它们没有用。例如。美国 4 周移动平均失业率数据是最受关注的经济指标之一。
    • 是的,它们肯定很有用,尤其是对于像经济学家这样没有大量数学/信号处理专业知识的人。
    【解决方案2】:

    在我看来,外行的答案是由电路的 RC 或 RCL 时间常数设置的压摆率的简单问题。 R 和 C 是反应性的意味着结果将根据频率而变化。在由发生频率(采样率)设定的任何时间段内。只看没有 L 的 RC 更简单。但基本上不允许电压在时间上比 RC 时间常数所允许的变化更快,RC 时间常数是与时间或频率有关的超越函数。导致 SLEW 速率受限的自然力量似乎从来都不是此类讨论的主题。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2012-04-08
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多