FIR 窗函数设计代码
时间: 2024-03-02 12:06:26 浏览: 60
FIR滤波器的设计中,窗函数是一种常用的方法。下面是一个简单的C语言代码示例,演示如何使用窗函数设计FIR滤波器:
```c
#include <stdio.h>
#include <math.h>
#define N_TAPS 51
#define FREQ_CUTOFF 1000
#define SAMPLING_RATE 8000
float coeffs[N_TAPS];
float window_hamming(int n, int N) {
return 0.54 - 0.46 * cos(2 * M_PI * n / (N - 1));
}
int main() {
int i, j;
for (i = 0; i < N_TAPS; i++) {
float sinc = (i - (N_TAPS - 1) / 2.0) * sin(2 * M_PI * FREQ_CUTOFF / SAMPLING_RATE * (i - (N_TAPS - 1) / 2.0));
if (i == (N_TAPS - 1) / 2.0) {
coeffs[i] = 2 * M_PI * FREQ_CUTOFF / SAMPLING_RATE;
} else {
coeffs[i] = sinc / (i - (N_TAPS - 1) / 2.0) * window_hamming(i, N_TAPS);
}
}
for (i = 0; i < N_TAPS; i++) {
printf("%f ", coeffs[i]);
}
return 0;
}
```
在这个示例中,我们使用汉明窗函数设计了一个长度为51的FIR滤波器,采样率为8000Hz,截止频率为1000Hz。我们定义了一个window_hamming函数来计算汉明窗函数的值。在主函数中,我们使用两个嵌套的循环来计算每个系数。外层循环遍历所有系数,内层循环计算每个系数的sinc函数值和窗函数值。最后,我们打印所有系数。
需要注意的是,在实际应用中,我们需要根据需要调整窗函数的类型和参数,以及FIR滤波器的长度和截止频率。
阅读全文