您现在的位置是:首页 >其他 >用C语言实现一个FIR低通滤波器算法网站首页其他
用C语言实现一个FIR低通滤波器算法
+v hezkz17进数字音频系统研究开发交流答疑
以下是一个基于C语言的FIR低通滤波器算法的实现:
#include <stdio.h>
#include <stdlib.h>
#define N 5 // 滤波器长度
#define M 100 // 输入数据长度
double h[N] = {0.2, 0.3, 0.4, 0.1, 0.0}; // 滤波器系数
int main()
{
double x[M], y[M];
// 生成输入信号
for (int n = 0; n < M; n++)
{
x[n] = sin(2 * 3.1415926 * n / 20); // 正弦波信号
}
// FIR滤波器处理过程
for (int n = 0; n < M; n++)
{
y[n] = 0;
for (int k = 0; k < N; k++)
{
if (n - k >= 0)
y[n] += h[k] * x[n - k];
}
}
// 输出滤波结果
for (int n = 0; n < M; n++)
{
printf("%lf
", y[n]);
}
return 0;
}
在上述代码中,我们首先定义了一个长度为N的滤波器系数数组h[],并且生成了一个长度为M的正弦波输入信号数组x[]。然后,我们进行FIR滤波器处理过程,即对每个时刻n,将输入信号在时域上和滤波器系数进行卷积操作得到输出信号y[n]。最后,我们输出滤波结果。
需要注意的是,在实际应用中,通常需要对输入信号进行归一化处理,以使得滤波结果在一定范围内。此外,还可以根据需要对滤波器系数进行设计,以达到不同的滤波效果。