【问题标题】:Anyone having an idea how to implement a polyphase filter using c programming任何知道如何使用 c 编程实现多相滤波器的人
【发布时间】:2013-02-22 14:40:08
【问题描述】:

有谁知道如何使用 C 编程实现多相滤波器。多相滤波器是滤波加下采样的组合。它使用 Fir 滤波器进行过滤,然后使用给定的抽取因子对其进行下采样。

我理解过滤是输入信号与脉冲响应的卷积,所以你只需要调用卷积函数。

简单来说,代码应该是这样的。

for ( i = 0; i < sampleCount; i++ ) 
{ 
    y[i] = 0; // set to zero before sum 
    for ( j = 0; j < kernelCount; j++ ) 
    { 
        y[i] += x[i - j] * h[j]; // convolve: multiply and accumulate 
    } 
}

我的问题是我应该如何将这个基本算法转换为多相滤波器,因为它还有一个向下采样的步骤。我不明白我应该首先做什么,过滤然后下采样?还是有办法将两者结合起来做?

【问题讨论】:

  • while (&lt;data_available&gt;) output = downsample(fir(input), decimation_factor);
  • 我不认为这是一个不好的问题,但是 FAQ 缺少它并且需要一些工作。你知道如何创建一个普通的过滤器吗?以及如何进行下采样?您是否尝试过创建多相滤波器但没有成功,或者您是否坚持提出算法?您现在具体陷入了什么困境,您的努力和研究将您带到了哪里?
  • 是的,我知道如何进行过滤。它是输入信号与脉冲响应的卷积,所以你只需要调用卷积函数。我的意思是卷积的基本思想。简单来说,代码是这样的。for ( i = 0; i
  • 真正的问题是如何实现一个多相滤波器,因为它多一步作为下采样。我不明白我应该做什么第一次我做过滤然后下采样?或者有没有办法将两者结合起来?

标签: c signal-processing


【解决方案1】:

您有代码来计算每个点。对于任何点i,该代码使用x[i-j]h[j] 中的数据(循环j 的值),并将结果写入y[i]

对于下采样,你不想要所有的点y[i];你只想要其中的一些。所以编写代码,给定i,使用相同x[i-j]h[j] 中的数据来计算输出值。但是,不要对i 的每个值都这样做,而是只对抽取因子的倍数进行处理(比如命名为d),并将结果写入y[i/d] 而不是y[i]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多