用C语言写一个平均滤波算法
时间: 2023-12-29 16:55:52 浏览: 79
C语言写的简单均值滤波算法
5星 · 资源好评率100%
平均滤波算法是一种常用的数字信号处理方法,它可以用来平滑信号,消除噪声。下面是一个用C语言实现的平均滤波算法:
```
#include <stdio.h>
#define N 10 // 滤波器长度
// 平均滤波器函数
float avg_filter(float x)
{
static float buf[N] = {0}; // 静态变量,用于存储历史数据
static int idx = 0; // 静态变量,用于记录最新数据的位置
float sum = 0;
buf[idx++] = x; // 将最新数据存入历史数据缓存中
if (idx == N) idx = 0; // 如果历史数据缓存已满,则重新开始存储
for (int i = 0; i < N; i++)
{
sum += buf[i]; // 将历史数据相加
}
return sum / N; // 返回平均值
}
int main()
{
float x = 0;
for (int i = 0; i < 50; i++)
{
x = (float)rand() / RAND_MAX; // 生成随机数作为输入信号
printf("x = %f, y = %f\n", x, avg_filter(x)); // 输出输入信号和滤波后的信号
}
return 0;
}
```
在上面的代码中,我们定义了一个长度为10的数组`buf`,用于存储历史数据;定义了一个静态变量`idx`,用于记录最新数据的位置;定义了一个函数`avg_filter`,用于实现平均滤波器的计算;在主函数中,我们生成了50个随机数作为输入信号,并输出了输入信号和滤波后的信号。
在`avg_filter`函数中,我们将最新数据存入历史数据缓存中,并通过一个循环将历史数据相加,最后返回平均值。当历史数据缓存已满时,我们重新开始存储,保证了历史数据的长度始终为N。
这样,我们就完成了一个简单的平均滤波算法的实现。
阅读全文