一阶低通滤波器C语言实现
时间: 2024-08-13 14:08:13 浏览: 49
巴特沃斯低通滤波器设计(c语言)
4星 · 用户满意度95%
一阶低通滤波器在C语言中通常使用数字信号处理(DSP)库来实现,例如利用递归或IIR(无限 impulse response)算法。这里是一个简单的IIR低通滤波器的实现示例,使用了Butterworth滤波器结构:
```c
#include <math.h>
#include <stdio.h>
// 滤波器参数(这里假设是44100Hz采样率,3db截止频率为1kHz)
#define FS 44100
#define F_CUT 1000
#define ORDER 1
// Butterworth滤波器系数计算
float b[ORDER + 1], a[ORDER + 1];
void butterworth(float fs, float fc, int order) {
double w_c = 2 * M_PI * fc / fs;
for (int i = 0; i <= order; i++) {
double tmp = cos(w_c);
b[i] = sin(w_c) * pow(2, (order - i)) / (M_PI * fc);
a[i] = tmp * pow(2, (order - i)) / (M_PI * fc);
}
}
// 滤波器函数
void filter(float *input, float *output, int length, float *b, float *a) {
for (int i = 0; i < length; i++) {
output[i] = input[i] * a;
for (int j = 1; j < ORDER + 1; j++) {
output[i] += input[i - j] * b[j];
}
}
}
int main() {
float input_data[] = ...; // 输入数据数组
float output_data[length]; // 输出数据数组
float fs = FS;
float f_cut = F_CUT;
int order = ORDER;
butterworth(fs, f_cut, order);
filter(input_data, output_data, length, b, a);
// 输出或进一步处理过滤后的数据
for (int i = 0; i < length; i++) {
printf("Filtered value: %f\n", output_data[i]);
}
return 0;
}
```
阅读全文