c语言对信号发生器输入信号实现fir滤波
时间: 2024-03-17 08:42:19 浏览: 62
数字信号处理C语言各种算法实现
5星 · 资源好评率100%
在C语言中实现FIR滤波的一般步骤如下:
1. 定义FIR滤波器的系数数组。这些系数通常在离线计算中得出,并且在程序中预先加载。
2. 定义输入信号数组和输出信号数组。
3. 对于每个输入信号样本,计算输出信号样本。具体计算方法是:将当前输入信号样本和一段固定长度的历史输入信号样本乘以对应的系数,将这些乘积相加得到输出信号样本。
4. 将输出信号样本存储到输出信号数组中。
下面是一个简单的C语言代码示例,演示如何实现FIR滤波器:
```c
#include <stdio.h>
#define N_COEFFS 5
const float coeffs[N_COEFFS] = {0.1, 0.2, 0.3, 0.2, 0.1};
float input_samples[] = {0.1, 0.3, 0.5, 0.7, 0.9};
float output_samples[5-N_COEFFS+1];
int main() {
int i, j;
for (i = N_COEFFS - 1; i < 5; i++) {
float output = 0;
for (j = 0; j < N_COEFFS; j++) {
output += input_samples[i - j] * coeffs[j];
}
output_samples[i - N_COEFFS + 1] = output;
}
for (i = 0; i < 5-N_COEFFS+1; i++) {
printf("%f ", output_samples[i]);
}
return 0;
}
```
在这个示例中,我们定义了一个长度为5的FIR滤波器,系数为{0.1, 0.2, 0.3, 0.2, 0.1}。我们还定义了一个长度为5的输入信号数组input_samples和一个长度为1的输出信号数组output_samples。
在主函数中,我们通过两个嵌套的循环来计算每个输出信号样本。外层循环从第N_COEFFS个输入信号样本开始,内层循环计算该输入信号样本和它之前的N_COEFFS-1个输入信号样本与系数的乘积之和,得到输出信号样本。然后将输出信号样本存储到输出信号数组中。最后,我们打印输出信号数组中的所有元素。
阅读全文