基于C语言的FIR的滤波器
时间: 2023-06-27 10:08:05 浏览: 371
FIR(Finite Impulse Response)滤波器是一种数字滤波器,其输出仅依赖于最近N个输入样本的线性组合。在C语言中实现FIR滤波器需要进行以下步骤:
1. 定义滤波器系数:定义一个数组,存储FIR滤波器的系数,系数的数量为N+1,其中N为滤波器的阶数。
2. 定义输入和输出缓冲区:定义两个数组,分别用于存储输入和输出数据。
3. 实现FIR滤波器算法:按照FIR滤波器的算法,对输入数据进行处理,得到输出数据。具体实现可以使用for循环遍历输入数据和滤波器系数,计算输出数据的值。
下面是一个简单的基于C语言实现FIR滤波器的代码示例:
```c
#include <stdio.h>
// 定义滤波器系数
#define N 3
double h[N+1] = {0.2, 0.3, 0.4, 0.1};
// 定义输入和输出缓冲区
double x[N+1] = {0};
double y[N+1] = {0};
// 实现FIR滤波器算法
double fir(double input)
{
double output = 0;
// 将输入数据存入输入缓冲区
for (int i = N; i > 0; i--)
{
x[i] = x[i-1];
}
x[0] = input;
// 计算输出数据
for (int i = 0; i <= N; i++)
{
output += h[i] * x[i];
}
// 将输出数据存入输出缓冲区
for (int i = N; i > 0; i--)
{
y[i] = y[i-1];
}
y[0] = output;
return output;
}
int main()
{
// 输入数据
double input[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(input) / sizeof(double);
// 对输入数据进行滤波
for (int i = 0; i < len; i++)
{
double output = fir(input[i]);
printf("input: %lf, output: %lf\n", input[i], output);
}
return 0;
}
```
在这个示例中,我们定义了一个FIR滤波器,阶数为3,系数为{0.2, 0.3, 0.4, 0.1}。然后定义了输入和输出缓冲区,用于存储输入和输出数据。在`fir()`函数中,我们按照FIR滤波器的算法,对输入数据进行处理,得到输出数据。最后在`main()`函数中,我们输入了一些测试数据,并使用`fir()`函数对其进行滤波。
阅读全文