低通滤波器,用C语言写
时间: 2023-12-29 19:15:04 浏览: 149
#include <stdio.h>
#include <stdlib.h>
#define N 100 // 定义数组大小
int main()
{
int i, j, k;
double x[N], y[N], a[N], b[N], c[N], d[N];
double fs = 1000; // 采样频率
double fc = 50; // 截止频率
// 生成测试数据
for (i = 0; i < N; i++) {
x[i] = sin(2 * M_PI * i * 10 / fs) + sin(2 * M_PI * i * 100 / fs) + sin(2 * M_PI * i * 200 / fs);
}
// 计算滤波器系数
double alpha = 2 * M_PI * fc / fs;
double beta = 1 - cos(alpha);
for (i = 0; i < N; i++) {
a[i] = beta / 2;
b[i] = 1 - cos(alpha);
c[i] = -1 * cos(alpha);
d[i] = 0;
}
// 滤波器计算
for (i = 0; i < N; i++) {
y[i] = 0;
for (j = 0; j <= i; j++) {
k = i - j;
if (k >= 0) {
y[i] += a[j] * x[k] + b[j] * y[k] + c[j] * d[k];
d[i] = x[i] - a[j] * y[i] - b[j] * y[k] - c[j] * d[k];
}
}
}
// 输出结果
for (i = 0; i < N; i++) {
printf("%lf\n", y[i]);
}
return 0;
}
阅读全文