购物网站起名,东莞市建设公共交易中心网站首页,在重庆找做网站的技术人员,高端大气的医院网站目录源码Filter.cFilter.h使用效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器#xff1a;Vofa 1.3.10 网上查到的滑动平均值滤波器在计算平均值的时候还要再for累加一遍#xff0c;这太浪费时间了#xff0c…
目录源码Filter.cFilter.h使用效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器Vofa 1.3.10 网上查到的滑动平均值滤波器在计算平均值的时候还要再for累加一遍这太浪费时间了在一些性能较拉跨的单片机上是难以接受的。我进行了如下改进
源码
Filter.c
#include stdint.h
#include Filter.hSliding_Mean_Filter Example_Filter {{0}, 0, 0, 0};void Sliding_Mean_Filter_Calc(Sliding_Mean_Filter *filter, double Data)
{filter-sum - filter-Filter_Buffer[filter-id]; //减去最旧的数filter-sum Data; //加进最新的数filter-Filter_Buffer[filter-id] Data; //将最新的数覆盖最旧的数filter-average filter-sum / Sliding_Mean_Filter_Buffer_Size; //求均值if(filter-id Sliding_Mean_Filter_Buffer_Size)filter-id 0;
}Filter.h
#ifndef Filter_H_
#define Filter_H_ #define Sliding_Mean_Filter_Buffer_Size 50typedef struct
{double Filter_Buffer[Sliding_Mean_Filter_Buffer_Size];uint16_t id;double sum;double average;
}Sliding_Mean_Filter;void Sliding_Mean_Filter_Calc(Sliding_Mean_Filter *filter, double Data);extern Sliding_Mean_Filter Example_Filter;#endif使用
Data为喂入的数据结果在Example_Filter.average里
Sliding_Mean_Filter_Calc(Example_Filter, Data);效果
用51单片机测试晶振频率为11.0592MHz6T模式对随机数进行滤波 滤波器的数组大小为50 可以看到随机数的均值为0.5合理 滤波器的数组大小为10 滤波器的数组大小为25