用C语言写一段IIR滤波器代码
时间: 2024-01-27 20:04:37 浏览: 200
当然可以!下面是一个简单的IIR滤波器的C语言代码示例:
```c
#include <stdio.h>
#define ORDER 2
// IIR滤波器的系数
float b[ORDER+1] = {0.5, 0.3, 0.2};
float a[ORDER+1] = {1.0, -0.5, 0.3};
// IIR滤波器函数
float iirFilter(float x)
{
static float x_buf[ORDER+1] = {0.0}; // 输入信号缓冲区
static float y_buf[ORDER+1] = {0.0}; // 输出信号缓冲区
float y = 0.0;
// 更新输入信号缓冲区
for (int i = ORDER; i > 0; i--)
{
x_buf[i] = x_buf[i-1];
}
x_buf[0] = x;
// 计算输出信号
for (int i = 0; i <= ORDER; i++)
{
y += b[i] * x_buf[i];
}
for (int i = 1; i <= ORDER; i++)
{
y -= a[i] * y_buf[i];
}
// 更新输出信号缓冲区
for (int i = ORDER; i > 0; i--)
{
y_buf[i] = y_buf[i-1];
}
y_buf[0] = y;
return y;
}
int main()
{
float input[] = {1.0, 2.0, 3.0, 4.0, 5.0};
int input_length = sizeof(input) / sizeof(float);
for (int i = 0; i < input_length; i++)
{
float output = iirFilter(input[i]);
printf("Input: %.1f, Output: %.3f\n", input[i], output);
}
return 0;
}
```
这段代码实现了一个二阶IIR滤波器。你可以根据需要修改滤波器的阶数和系数。在`main`函数中,我们将一些输入信号输入滤波器,并打印出滤波器的输出结果。
希望这段代码对你有所帮助!如果有任何问题,请随时提问。
阅读全文