8阶巴特沃斯带通滤波器C语言代码
时间: 2023-09-20 20:12:09 浏览: 213
以下是一个8阶巴特沃斯带通滤波器的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535897932384626433832795
double b[9] = {0.00011839, 0, -0.00047355, 0, 0.00071033, 0, -0.00047355, 0, 0.00011839}; // 巴特沃斯滤波器的b系数
double a[9] = {1, -6.3702887, 18.903152, -32.186269, 36.613215, -27.945822, 14.659106, -4.9752426, 0.83515094}; // 巴特沃斯滤波器的a系数
double filter(double *x, double *y, int n)
{
double output;
output = b[0]*x[n] + b[1]*x[n-1] + b[2]*x[n-2] + b[3]*x[n-3] + b[4]*x[n-4] + b[5]*x[n-5] + b[6]*x[n-6] + b[7]*x[n-7] + b[8]*x[n-8] - a[1]*y[n-1] - a[2]*y[n-2] - a[3]*y[n-3] - a[4]*y[n-4] - a[5]*y[n-5] - a[6]*y[n-6] - a[7]*y[n-7] - a[8]*y[n-8];
y[n] = output;
return output;
}
int main()
{
double x[1000], y[1000], f1, f2, fs, fn, t;
int i, n;
// 输入参数
printf("Enter the sampling frequency (in Hz): ");
scanf("%lf", &fs);
printf("\nEnter the low cutoff frequency (in Hz): ");
scanf("%lf", &f1);
printf("\nEnter the high cutoff frequency (in Hz): ");
scanf("%lf", &f2);
fn = fs / 2; // 计算Nyquist频率
// 计算归一化频率
f1 = f1 / fn;
f2 = f2 / fn;
// 计算巴特沃斯滤波器的b系数
for (i = 0; i < 9; i++) {
t = (double)(2*i - 8);
b[i] = (sin(PI*f2*t) - sin(PI*f1*t)) / (PI*t);
}
// 初始化输入和输出缓冲区
for (i = 0; i < 9; i++) {
x[i] = 0;
y[i] = 0;
}
// 读入输入信号,进行滤波
for (n = 9; n < 1000; n++) {
scanf("%lf", &x[n]);
filter(x, y, n);
printf("%lf\n", y[n]);
}
return 0;
}
```
其中,`b`和`a`分别是巴特沃斯滤波器的b系数和a系数,`filter()`函数是巴特沃斯滤波器的实现函数,`main()`函数中包含了输入参数、计算b系数、初始化缓冲区和进行滤波的过程。请注意,这段代码只是一个示例,实际应用中需要根据具体要求进行修改。
阅读全文