基于c语言的FIR滤波器实例
时间: 2023-07-13 12:04:27 浏览: 46
以下是一个基于C语言的FIR滤波器实例:
```c
#include <stdio.h>
#define N 10 /* 系数个数 */
#define M 100 /* 数据个数 */
float h[N] = {0.0792, 0.0657, 0.0243, -0.0055, -0.0075, -0.0055, 0.0243, 0.0657, 0.0792}; /* FIR滤波器系数 */
float x[M] = {0.5, 1.2, 0.8, -0.3, -1.1, -0.7, 0.4, 1.3, 1.0, -0.2, -0.6, -0.8, -0.3, 0.9, 1.2, 0.3, -0.7, -0.9, -0.1, 0.7, 0.8, 0.0, -0.9, -0.5, 0.5, 0.9, 0.4, -0.4, -0.7, -0.1, 0.7, 0.7, -0.1, -0.7, -0.4, 0.4, 0.7, 0.1, -0.6, -0.5, 0.2, 0.7, 0.4, -0.4, -0.6, -0.1, 0.5, 0.5, -0.1, -0.5, -0.2, 0.3, 0.5, 0.0, -0.4, -0.3, 0.1, 0.4, 0.2, -0.2, -0.3, -0.1, 0.2, 0.2, -0.1, -0.2, -0.1, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1, 0.0, -0.1, -0.1, 0.0, 0.1, 0.1}; /* 输入数据 */
int main()
{
int i, j;
float y[M] = {0}; /* 输出数据 */
/* FIR滤波器计算 */
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
if (i >= j) {
y[i] += h[j] * x[i - j];
}
}
}
/* 输出结果 */
printf("输入数据:\n");
for (i = 0; i < M; i++) {
printf("%f ", x[i]);
}
printf("\n");
printf("输出数据:\n");
for (i = 0; i < M; i++) {
printf("%f ", y[i]);
}
printf("\n");
return 0;
}
```
在上面的代码中,我们定义了一个长度为10的FIR滤波器系数数组`h`和一个长度为100的输入数据数组`x`。我们通过一个双重循环计算输出数据数组`y`,最后将输入数据和输出数据都输出到控制台上。
这只是一个简单的例子,实际应用中可能需要对FIR滤波器进行优化和改进,以提高计算效率和滤波器的性能。