C语言写一个巴特沃斯滤波器
时间: 2023-12-29 12:21:29 浏览: 87
巴特沃斯滤波的C语言实现
3星 · 编辑精心推荐
好的,以下是一个简单的C语言实现巴特沃斯滤波器的代码示例:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
void butterworth_filter(double *input, double *output, int n, int m, double fc, double fs)
{
double w0 = 2 * PI * fc / fs;
double wc = tan(w0 / 2);
double a = 1.0;
double b = sqrt(2) * wc;
double c = wc * wc;
double d = 2 * cos(w0) * wc;
double e = wc * wc;
double pre_gain = pow(wc, n) / (pow(wc, 2 * m) + b * pow(wc, 2 * m - 1) + c * pow(wc, 2 * m));
output[0] = pre_gain * input[0];
output[1] = pre_gain * (a * input[1] + d * input[0] - b * output[0]);
for (int i=2; i<n; i++)
{
output[i] = pre_gain * (a * input[i] + d * input[i-1] + e * input[i-2] - b * output[i-1] - c * output[i-2]);
}
}
int main()
{
double input[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double output[10];
int n = 10;
int m = 2;
double fc = 2;
double fs = 10;
butterworth_filter(input, output, n, m, fc, fs);
for (int i=0; i<n; i++)
{
printf("%f\n", output[i]);
}
return 0;
}
```
该代码使用巴特沃斯滤波器对输入信号进行滤波,输出滤波后的信号。其中,n表示输入信号的长度,m表示滤波器的阶数,fc表示截止频率,fs表示采样率。在代码中,使用了递推式计算滤波器的输出,并使用了预先计算的增益进行输出结果的缩放。
阅读全文