单片机fir数字滤波 c程序
时间: 2023-10-22 18:08:08 浏览: 101
下面是一个基于FIR数字滤波器的C程序示例,可以在单片机上实现数字滤波。
```
#define N 512 //滤波器长度
#define M 10 //采样点数
float h[N] = {0.0}; //滤波器系数
float x[M] = {0.0}; //输入信号
float y[M] = {0.0}; //输出信号
void fir_filter(float *h, int n, float *x, float *y, int m)
{
int i, j;
float sum = 0.0;
for (i = 0; i < m; i++) {
y[i] = 0.0;
for (j = 0; j < n; j++) {
if (i >= j) {
sum += h[j] * x[i-j];
}
}
y[i] = sum;
sum = 0.0; //每次处理完一个采样点要清零
}
}
int main()
{
int i;
//初始化滤波器系数
for(i = 0; i < N; i++){
h[i] = 1.0 / N; //简单起见,这里取平均数作为滤波器系数
}
//读入输入信号
for(i = 0; i < M; i++){
scanf("%f", &x[i]);
}
//进行滤波
fir_filter(h, N, x, y, M);
//输出滤波后的结果
for(i = 0; i < M; i++){
printf("%f ", y[i]);
}
return 0;
}
```
上述程序实现了一个简单的FIR数字滤波器,输入信号通过滤波器后输出滤波后的结果。具体实现中,滤波器系数简单起见取平均数,输入信号通过循环计算的方式进行滤波,最终输出滤波后的结果。在实际应用中,需要根据滤波需求设置合适的滤波器系数,并根据处理效率选择合适的滤波器实现方式。
阅读全文