#直接上代码
#include <stdio.h>
#include <malloc.h>
typedef unsigned int uint32_t;
uint32_t SlidingFilter (uint32_t num,uint32_t data){
static uint32_t num_record=0;
static uint32_t* filterArr;
float result=0;
uint32_t zeroNum=0;
if(num==0) return data;
if(num_record==0)
{
filterArr = (uint32_t*)calloc(num , sizeof(uint32_t));
num_record=num;
}
if(num_record!=num)
{
filterArr = (uint32_t*)realloc(filterArr , num*sizeof(uint32_t));
if (num>num_record){
for (uint32_t i=num_record;i<num;i++)
{
*(filterArr+i)=0;
}
}
num_record=num;
}
for (int i=num-1;i>0;i--)
{
*(filterArr+i)=*(filterArr+i-1);
}
*filterArr=data;
for (int i=0;i<num;i++)
{
printf("filterArr[%d] = %d \n",i, *(filterArr+i));
}
for (int i=0;i<num;i++)
{
result += *(filterArr+i);
if(*(filterArr+i)==0)
{
zeroNum++;
}
}
result/=(num-zeroNum);
return result;
}
int main(void) {
int arr[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
uint32_t Numb=5;
for(int i=0;i<15;i++){
printf("result = %d \n", SlidingFilter(Numb,*(arr+i)));
}
Numb=8;
for(int i=0;i<15;i++){
printf("result = %d \n", SlidingFilter(Numb,*(arr+i)));
}
return 0;
}
输入:参与滑动平均滤波的元素个数,最新的一个需要参与滑动平均滤波的数据 输出:最新计算出的滑动滤波值
利用分配堆内存空间的办法存储历史数据,再利用历史数据求最新的滑动滤波值。 在更改 参与滑动平均滤波的元素个数 时候利用动态内存分配的办法。
平均值直接地板除了没四舍五入。
|