用c语言设计一个滑动平均滤波器
时间: 2023-11-19 14:06:44 浏览: 173
基于C与arduino的递推平均滤波法(滑动平均滤波法)设计与实现
下面是用 C 语言实现滑动平均滤波器的示例代码:
```c
#include <stdio.h>
#define FILTER_SIZE 5 // 滤波器大小
float filter[FILTER_SIZE]; // 滤波器数组
int filter_index = 0; // 滤波器当前下标
float sum = 0; // 滤波器当前和
// 滑动平均滤波函数
float moving_average(float input)
{
sum -= filter[filter_index]; // 减去最早的数据
filter[filter_index] = input; // 加入最新的数据
sum += input; // 计算新的和
filter_index++; // 下标加 1
if(filter_index >= FILTER_SIZE) // 下标超过滤波器大小时,重置
{
filter_index = 0;
}
return sum / FILTER_SIZE; // 返回平均值
}
int main()
{
float input[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}; // 输入数据
int input_size = sizeof(input) / sizeof(float); // 输入数据大小
for(int i = 0; i < input_size; i++)
{
printf("Input: %f\tOutput: %f\n", input[i], moving_average(input[i])); // 输出每次滤波的结果
}
return 0;
}
```
该代码中,首先定义了一个常量 `FILTER_SIZE` 表示滤波器的大小,又定义了一个长度为 `FILTER_SIZE` 的数组 `filter` 来存储滤波器的数据,定义了一个变量 `filter_index` 表示当前滤波器的下标,定义了一个变量 `sum` 表示当前滤波器的和。
在 `moving_average` 函数中,每次输入一个数据 `input`,先将最早的数据从和中减去,再将最新的数据加入和中,计算得到新的平均值,并将最新的数据存入滤波器数组中。如果当前下标超过了滤波器大小,就将下标重置为 0。
在 `main` 函数中,输入一组数据并进行滤波,输出每次滤波的结果。
阅读全文