C语言二阶积分滤波程序
时间: 2023-08-29 09:08:31 浏览: 70
以下是一个简单的C语言二阶积分滤波程序的示例代码:
```c
#define PI 3.1415926
// 定义采样频率和截止频率
double fs = 1000; // 采样频率
double fc = 50; // 截止频率
// 定义二阶积分滤波器的系数
double a1 = -1.8999;
double a2 = 0.9048;
double b0 = 0.0004;
double b1 = 0.0009;
double b2 = 0.0004;
// 定义滤波器的状态变量
double x1 = 0;
double x2 = 0;
double y1 = 0;
double y2 = 0;
// 二阶积分滤波函数
double IIR_filter(double x)
{
double y = b0 * x + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
return y;
}
int main()
{
// 生成测试信号,10000个采样点
double signal[10000];
for (int i = 0; i < 10000; i++) {
signal[i] = sin(2 * PI * i * fc / fs);
}
// 对测试信号进行滤波
double filtered_signal[10000];
for (int i = 0; i < 10000; i++) {
filtered_signal[i] = IIR_filter(signal[i]);
}
return 0;
}
```
这个程序实现了一个二阶积分滤波器,使用了差分方程的形式,将滤波器的系数和状态变量都定义为全局变量。在主函数中,首先生成了一个测试信号,然后对测试信号进行滤波,得到了滤波后的信号。