谁能告诉我如何使用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,但我不确定它的质量如何。我有Rorabaugh和Orfandis,它们都在90年代中期出版,但是这些东西并没有真正过时。
关于c - C编程中的FIR滤波器实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14997850/