C语言实现巴赫滤波器:音频处理和信号处理的利器
巴赫滤波器(Biquad Filter)是一种数字滤波器,常用于音频处理和信号处理中。以下是一个简单的C语言实现:
#include <stdio.h>
// 定义巴赫滤波器结构体
typedef struct {
double b0, b1, b2; // 前馈系数
double a0, a1, a2; // 反馈系数
double x1, x2; // 输入历史值
double y1, y2; // 输出历史值
} BiquadFilter;
// 初始化巴赫滤波器
void initBiquadFilter(BiquadFilter* filter, double b0, double b1, double b2, double a0, double a1, double a2) {
filter->b0 = b0;
filter->b1 = b1;
filter->b2 = b2;
filter->a0 = a0;
filter->a1 = a1;
filter->a2 = a2;
filter->x1 = 0.0;
filter->x2 = 0.0;
filter->y1 = 0.0;
filter->y2 = 0.0;
}
// 应用巴赫滤波器
double applyBiquadFilter(BiquadFilter* filter, double input) {
double output = filter->b0 * input + filter->b1 * filter->x1 + filter->b2 * filter->x2
- filter->a1 * filter->y1 - filter->a2 * filter->y2;
filter->x2 = filter->x1;
filter->x1 = input;
filter->y2 = filter->y1;
filter->y1 = output;
return output;
}
int main() {
BiquadFilter filter;
initBiquadFilter(&filter, 1.0, 0.0, 0.0, 1.0, -1.5, 0.7); // 示例参数
// 输入信号
double input[] = {1.0, 2.0, 3.0, 4.0, 5.0};
int size = sizeof(input) / sizeof(input[0]);
// 应用滤波器并输出结果
for (int i = 0; i < size; i++) {
double output = applyBiquadFilter(&filter, input[i]);
printf('Input: %.2f, Output: %.2f
', input[i], output);
}
return 0;
}
在上面的示例代码中,我们定义了一个BiquadFilter结构体,使用initBiquadFilter函数初始化滤波器参数。然后,我们可以使用applyBiquadFilter函数来应用滤波器,计算输出结果。在main函数中,我们输入了一组信号,然后分别应用滤波器,并输出结果。你可以根据需要修改滤波器的参数和输入信号,以适应你的应用场景。
原文地址: https://www.cveoy.top/t/topic/qxhz 著作权归作者所有。请勿转载和采集!