C语言实现1hz截止频率的低通滤波器
时间: 2023-09-20 21:11:55 浏览: 93
要实现1Hz截止频率的低通滤波器,可以使用巴特沃斯滤波器设计方法。以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793
// 巴特沃斯滤波器参数
const int N = 2; // 二阶滤波器
const double fc = 1.0; // 截止频率为1Hz
// 二阶低通滤波器的系数
const double b[3] = {0.2929, 0.5858, 0.2929};
const double a[3] = {1.0000, -0.1716, 0.2929};
// 初始化滤波器状态
double x[3] = {0}; // 输入缓存
double y[3] = {0}; // 输出缓存
// 低通滤波函数
double filter(double input)
{
// 更新输入缓存
x[0] = input;
// 计算输出
double output = b[0] * x[0] + b[1] * x[1] + b[2] * x[2]
- a[1] * y[1] - a[2] * y[2];
// 更新状态缓存
x[2] = x[1];
x[1] = x[0];
y[2] = y[1];
y[1] = output;
return output;
}
int main()
{
// 生成输入信号,频率为0.5Hz
const int fs = 100;
const double T = 1.0 / fs;
const double f = 0.5;
double t = 0;
double input = 0;
for (int i = 0; i < 1000; i++) {
input = sin(2 * PI * f * t);
t += T;
// 输出滤波结果
printf("%lf, %lf\n", t, filter(input));
}
return 0;
}
```
这个程序实现了一个二阶巴特沃斯滤波器,截止频率为1Hz。输入信号为正弦波,频率为0.5Hz,采样频率为100Hz。程序输出输入信号和滤波后的输出信号。
请注意,这个程序只是一个简单的实现,实际应用中需要考虑更多的问题,比如滤波器的稳定性、滤波器的阶数、截止频率的选择等等。
阅读全文