谁能告诉我如何使用c编程语言实现FIR滤波器。

最佳答案

设计FIR滤波器不是一个简单的话题,但是实现一个已经设计好的滤波器(假设您已经具有FIR系数)也不错。该算法称为convolution。这是一个幼稚的实现...

void convolve (double *p_coeffs, int p_coeffs_n,
               double *p_in, double *p_out, int n)
{
  int i, j, k;
  double tmp;

  for (k = 0; k < n; k++)  //  position in output
  {
    tmp = 0;

    for (i = 0; i < p_coeffs_n; i++)  //  position in coefficients array
    {
      j = k - i;  //  position in input

      if (j >= 0)  //  bounds check for input buffer
      {
        tmp += p_coeffs [k] * p_in [j];
      }
    }

    p_out [i] = tmp;
  }
}

基本上,卷积对输入信号进行移动加权平均。权重是滤波器系数,假设它们的总和为1.0。如果权重的总和不是1.0,则将得到一些放大/衰减以及滤波。

顺便说一句-这个函数可能具有向后的系数数组-我还没有仔细检查过,距离我考虑这些事情已有一段时间了。

对于如何计算特定滤波器的FIR系数,背后有很多数学运算-您确实需要一本关于数字信号处理的好书。 This one可免费用于PDF,但我不确定它的质量如何。我有RorabaughOrfandis,它们都在90年代中期出版,但是这些东西并没有真正过时。

关于c - C编程中的FIR滤波器实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14997850/

10-12 15:54