巴特沃斯滤波器c语言代码
时间: 2023-09-24 09:05:52 浏览: 107
巴特沃斯滤波器是一种常见的滤波器类型,可以用于信号处理和电子工程中。下面是一个简单的C语言实现:
```
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
// 巴特沃斯滤波器
void butterworth_filter(double *x, int N, double fc, int order)
{
double w0 = 2 * PI * fc;
double T = 1.0 / w0;
double alpha = sin(w0 * T) / (2 * pow(cos(w0 * T), order));
double b[order+1], a[order+1];
double y[N];
// 计算滤波器系数
for (int i = 0; i <= order; i++) {
double theta = PI / 2 + (2 * i + order - 1) * PI / (2 * order);
b[i] = alpha * (sin(theta) + cos(theta));
a[i] = 0;
}
a[0] = pow(cos(w0 * T), order);
// 滤波
for (int n = 0; n < N; n++) {
y[n] = b[0] * x[n];
for (int i = 1; i <= order; i++) {
y[n] += b[i] * x[n-i] - a[i] * y[n-i];
}
}
// 将滤波结果复制回x数组
for (int n = 0; n < N; n++) {
x[n] = y[n];
}
}
int main()
{
double x[] = {1.0, 2.0, 3.0, 4.0, 5.0};
int N = sizeof(x) / sizeof(double);
double fc = 0.1; // 我们假设cutoff frequency为0.1Hz
int order = 4; // 我们假设滤波器阶数为4
butterworth_filter(x, N, fc, order);
// 输出滤波结果
for (int n = 0; n < N; n++) {
printf("%.3f ", x[n]);
}
printf("\n");
return 0;
}
```
这个例子中,我们用一个长度为5的数组 `x` 来演示如何对信号进行巴特沃斯滤波。我们假设cutoff frequency为0.1Hz,滤波器阶数为4。在 `butterworth_filter` 函数中,我们先计算出滤波器的系数,然后对信号进行滤波。最后,我们将滤波结果复制回 `x` 数组,并输出滤波结果。
阅读全文