C语言实现无极巴特沃斯滤波器
时间: 2024-04-14 13:06:58 浏览: 118
Butterworth_butterworthC语言_butterworth_Butter滤波器C语言
4星 · 用户满意度95%
无极巴特沃斯滤波器是数字信号处理中常用的一种滤波器,可以实现对信号的特定频率范围内的滤波。以下是C语言实现无极巴特沃斯滤波器的代码:
```c
#define PI 3.14159265358979323846
void butterworth(double *input, double *output, int length, double sampleRate, double cutoffFreq, int filterOrder, int filterType) {
double wc = 2.0 * PI * cutoffFreq / sampleRate;
double a[filterOrder + 1], b[filterOrder + 1];
double q, alpha, beta, gamma, theta;
int i, j;
if (filterType == 0) { // low-pass filter
q = 1.0 / tan(wc / 2.0);
alpha = 1.0 + sqrt(2.0) * q + q * q;
b[0] = q * q / alpha;
b[1] = 2.0 * b[0];
b[2] = b[0];
a[0] = 1.0;
a[1] = 2.0 * (q * q - 1.0) / alpha;
a[2] = (1.0 - sqrt(2.0) * q + q * q) / alpha;
} else { // high-pass filter
q = tan(wc / 2.0);
alpha = 1.0 + sqrt(2.0) * q + q * q;
b[0] = 1.0 / alpha;
b[1] = -2.0 * b[0];
b[2] = b[0];
a[0] = 1.0;
a[1] = 2.0 * (q * q - 1.0) / alpha;
a[2] = (1.0 - sqrt(2.0) * q + q * q) / alpha;
}
for (i = 0; i < length; i++) {
output[i] = 0.0;
for (j = 0; j <= filterOrder; j++) {
if (i - j >= 0) {
output[i] += b[j] * input[i - j];
}
}
for (j = 1; j <= filterOrder; j++) {
if (i - j >= 0) {
output[i] -= a[j] * output[i - j];
}
}
}
}
```
其中,`input`为输入信号,`output`为输出信号,`length`为信号长度,`sampleRate`为采样率,`cutoffFreq`为截止频率,`filterOrder`为滤波器阶数,`filterType`为滤波器类型(0为低通滤波器,1为高通滤波器)。在函数中,通过计算滤波器的系数,利用差分方程对输入信号进行滤波,得到输出信号。
阅读全文