FIR 带通滤波器 C语言实现
时间: 2023-05-25 15:02:04 浏览: 369
A:
以下是FIR带通滤波器的C语言实现示例代码:
```c
#define M 101 // 滤波器的长度
float h[M]; // FIR滤波器的系数数组
void fir_bandpass_filter(float in[], float out[], int len, float fs, float f1, float f2)
{
int i, j;
float sum;
float omeg1 = 2 * M_PI * f1 / fs; // 左折点频率角
float omeg2 = 2 * M_PI * f2 / fs; // 右折点频率角
// 生成FIR滤波器的系数数组h[],滤波器类型为带通滤波器
for (i = 0; i < M; i++)
{
if ((i - (M - 1)/2) == 0) // 零点处的值
{
h[i] = (omeg2 - omeg1) / M_PI;
}
else // 非零点处的值
{
h[i]= (sin(omeg2 * (i - (M - 1)/2)) - sin(omeg1 * (i - (M - 1)/2))) / (M_PI * (i - (M - 1)/2));
}
}
// 对输入信号in[]进行滤波
for (i = 0; i < len; i++)
{
sum = 0;
for (j = 0; j < M; j++)
{
if (i - j >= 0) // 判断数组下标是否越界
{
sum += h[j] * in[i - j];
}
}
out[i] = sum;
}
}
```
其中,函数参数说明如下:
- `in[]`:输入的信号数组。
- `out[]`:输出滤波后的信号数组。
- `len`:输入信号数组的长度。
- `fs`:采样频率。
- `f1`:带通滤波器的左折点频率,单位为Hz。
- `f2`:带通滤波器的右折点频率,单位为Hz。
使用该函数时,需要定义好输入、输出信号数组,调用该函数即可对输入信号进行带通滤波处理。
阅读全文