用C写一个滑动平均低通滤波函数
时间: 2024-05-08 08:15:03 浏览: 8
以下是一个简单的滑动平均低通滤波函数的C实现:
```c
#define FILTER_SIZE 5 // 滤波器大小
float lowPassFilter(float input, float previousOutput)
{
static float buffer[FILTER_SIZE] = {0}; // 静态数组,用于存储过去的输入数据
static int index = 0; // 当前输入数据在buffer中的索引
float sum = 0;
// 将输入数据添加到buffer中
buffer[index++] = input;
// 如果buffer已满,则将索引重置为0
if (index >= FILTER_SIZE) {
index = 0;
}
// 计算buffer中所有数据的平均值
for (int i = 0; i < FILTER_SIZE; i++) {
sum += buffer[i];
}
float average = sum / FILTER_SIZE;
// 计算输出值
float output = (previousOutput + average) / 2;
return output;
}
```
该函数的输入参数为当前输入数据和上一次输出数据,输出为本次计算的输出数据。函数使用一个静态数组来存储过去的输入数据,并使用一个索引来记录当前输入数据在数组中的位置。每次函数调用时,将新的输入数据添加到数组中,并计算数组中所有数据的平均值。最终,函数返回上一次输出数据和本次计算输出值的平均值作为本次的输出数据。由于每次计算都使用了过去的输入数据,因此该函数实现了滑动平均滤波的效果。