c语言编写一个低通滤波
时间: 2024-05-09 08:15:22 浏览: 16
以下是一个简单的 C 语言程序,用于实现一个简单的低通滤波器。该程序使用了一个 IIR 滤波器,其传递函数为:
H(z) = b0 / (1 - a1 * z^-1 - a2 * z^-2)
其中 b0、a1 和 a2 是由滤波器的截止频率和采样周期计算得出的系数。
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846
/* 定义滤波器系数 */
double b0 = 0.0, a1 = 0.0, a2 = 0.0;
/* 定义滤波器状态变量 */
double x1 = 0.0, x2 = 0.0, y1 = 0.0, y2 = 0.0;
/* 定义滤波器截止频率和采样频率 */
double fc = 1000.0, fs = 44100.0;
/* 计算滤波器系数 */
void calc_filter_coeffs()
{
double omega = 2.0 * PI * fc / fs;
double alpha = sin(omega) / (2.0 * cos(omega) + sin(omega));
b0 = alpha * alpha;
a1 = 2.0 * alpha * cos(omega);
a2 = -(alpha * alpha);
}
/* 应用滤波器 */
double filter(double x)
{
double y = b0 * x + a1 * x1 + a2 * x2 - a1 * y1 - a2 * y2;
x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
return y;
}
int main()
{
/* 计算滤波器系数 */
calc_filter_coeffs();
/* 从标准输入读取输入信号,将处理后的信号输出到标准输出 */
double x;
while (scanf("%lf", &x) == 1) {
double y = filter(x);
printf("%f\n", y);
}
return 0;
}
```
该程序从标准输入读取输入信号,并将处理后的信号输出到标准输出。您可以使用以下命令将其编译并运行:
```
gcc -o lowpassfilter lowpassfilter.c -lm
./lowpassfilter < input.txt > output.txt
```
其中,input.txt 是包含输入信号的文件,output.txt 是包含处理后信号的文件。您需要将 fc 和 fs 的值更改为您所需的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)