谁能告诉我如何使用 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 [i] * p_in [j];
}
}
p_out [k] = tmp;
}
}
基本上,卷积对输入信号进行移动加权平均。权重是滤波器系数,假定总和为 1.0。如果权重之和不是 1.0,您会得到一些放大/衰减以及过滤。
顺便说一句 - 这个函数的系数数组可能是倒过来的 - 我没有仔细检查过,我已经有一段时间没有考虑这些事情了。
关于如何计算特定滤波器的 FIR 系数,背后有相当多的数学知识——您确实需要一本关于数字信号处理的好书。 This one可以免费获得 PDF,但我不确定它有多好。我有 Rorabaugh和 Orfandis ,都发表于九十年代中期,但这些东西并没有真正过时。
关于c - FIR滤波器在C编程中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14997850/