巴赫滤波器(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函数中,我们输入了一组信号,然后分别应用滤波器,并输出结果。你可以根据需要修改滤波器的参数和输入信号,以适应你的应用场景。

C语言实现巴赫滤波器:音频处理和信号处理的利器

原文地址: https://www.cveoy.top/t/topic/qxhz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录