移动平均滤波是一种简单有效的平滑信号的方法,它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种:简单移动平均(SMA)和指数加权移动平均(EWMA)。
简单移动平均滤波(SMA)的原理:
简单移动平均滤波通过计算一定窗口内数据点的平均值来平滑信号。窗口的大小决定了滤波器对信号的平滑程度,窗口越大,平滑效果越明显。对于第n个数据点(X_n),其简单移动平均值(SMA_n)可以计算为:
其中,K是窗口大小。
简单移动平均滤波的C代码示例:
以下是一个简单移动平均滤波的C代码示例,假设输入数据存储在数组中:
#include <stdio.h>
#define WINDOW_SIZE 5
// 函数原型
float simpleMovingAverage(float data[], int dataSize);
int main() {
// 输入数据
float inputData[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};
int dataSize = sizeof(inputData) / sizeof(inputData[0]);
// 计算简单移动平均
float result = simpleMovingAverage(inputData, dataSize);
// 打印结果
printf("Simple Moving Average: %f\n", result);
return 0;
}
// 计算简单移动平均
float simpleMovingAverage(float data[], int dataSize) {
float sum = 0.0;
// 计算窗口内数据的和
for (int i = 0; i < WINDOW_SIZE; ++i) {
sum += data[i];
}
// 计算移动平均值
float movingAverage = sum / WINDOW_SIZE;
// 返回结果
return movingAverage;
}
在这个示例中,WINDOW_SIZE 定义了移动平均的窗口大小,可以根据需要调整。simpleMovingAverage 函数用于计算输入数据的简单移动平均值。这只是一个基本的示例,实际应用中可能需要根据具体需求进行调整和优化。
==========
往期回顾:
Keil仿真调试STM32与LED
STM32的看门狗原理和示例代码
HAL库常用函数汇总【不间断更新】
【通知】蓝桥杯付费视频预售来袭~
==========