使用C语言生成hamming窗系数,实现Fir低通滤波
时间: 2023-07-11 13:08:00 浏览: 423
Hamming窗是一种常用的数字信号处理滤波器设计方法,可以用来设计FIR低通滤波器。下面是使用C语言生成Hamming窗系数的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793
void hamming(int n, double w[])
{
int i;
double alpha = 0.54;
double beta = 1 - alpha;
double N = n - 1;
for (i = 0; i < n; i++) {
w[i] = alpha - beta * cos(2 * PI * i / N);
}
}
int main()
{
int i, n = 31; // 滤波器阶数
double fc = 0.2; // 通带截止频率
double wc = 2 * PI * fc; // 通带截止角频率
double h[n]; // 系数数组
double w[n]; // 窗函数数组
double sum = 0; // 系数之和
hamming(n, w); // 生成Hamming窗系数
// 生成低通滤波器系数
for (i = 0; i < n; i++) {
if (i == (n-1)/2) {
h[i] = wc / PI;
} else {
h[i] = sin(wc * (i - (n-1)/2)) / (PI * (i - (n-1)/2));
}
h[i] = h[i] * w[i]; // 加窗
sum += h[i]; // 系数之和
}
// 归一化
for (i = 0; i < n; i++) {
h[i] = h[i] / sum;
}
// 输出系数
printf("FIR低通滤波器系数:\n");
for (i = 0; i < n; i++) {
printf("h[%d] = %lf\n", i, h[i]);
}
return 0;
}
```
以上代码实现了一个31阶的FIR低通滤波器,通带截止频率为0.2,使用Hamming窗加窗。程序输出了系数数组h[],可将其用于实际的信号处理中。
阅读全文