# defineSAMPLE_SIZE 256
# definePI 3.415926f
intmain
{
E_SAMPLE rawSin[SAMPLE_SIZE];
E_SAMPLE outSin[SAMPLE_SIZE];
E_SAMPLE rawSquare[SAMPLE_SIZE];
E_SAMPLE outSquare[SAMPLE_SIZE];
t_MAF mvf;
FILE *pFile=fopen( “。/simulationSin.csv”, “wt+”);
/*方波测试*/
if(pFile== NULL)
{
printf( “simulationSin.csv opened failed”);
return-1;
}
for( inti= 0;i《SAMPLE_SIZE;i++)
{
rawSin = 100* sin( 2*PI* 20*i/SAMPLE_RATE)+rand% 30;
}
/*正弦信号测试*/
for( inti= 0;i《SAMPLE_SIZE/ 4;i++)
{
rawSquare = 5+rand% 10;
}
for( inti=SAMPLE_SIZE/ 4;i《 3*SAMPLE_SIZE/ 4;i++)
{
rawSquare = 100+rand% 10;
}
for( inti= 3*SAMPLE_SIZE/ 4;i《SAMPLE_SIZE;i++)
{
rawSquare = 5+rand% 10;
}
/*初始化*/
moving_average_filter_init(&mvf);
/*滤波*/
for( inti= 0;i《SAMPLE_SIZE;i++)
{
outSin=moving_average_filter(&mvf,rawSin);
}
for( inti= 0;i《SAMPLE_SIZE;i++)
{
fprintf(pFile, “%f,”,rawSin);
}
fprintf(pFile, “n”);
for( inti= 0;i《SAMPLE_SIZE;i++)
{
fprintf(pFile, “%f,”,outSin);
}
fclose(pFile);
pFile=fopen( “。/simulationSquare.csv”, “wt+”);
if(pFile== NULL)
{
printf( “simulationSquare.csv opened failed”);
return-1;
}
/*初始化*/
moving_average_filter_init(&mvf);
/*滤波*/
for( inti= 0;i《SAMPLE_SIZE;i++)
{
outSquare=moving_average_filter(&mvf,rawSquare);
}
for( inti= 0;i《SAMPLE_SIZE;i++)
{
fprintf(pFile, “%f,”,rawSquare);
}
fprintf(pFile, “n”);
for( inti= 0;i《SAMPLE_SIZE;i++)
{
fprintf(pFile, “%f,”,outSquare);
}
fclose(pFile);
return0;
}
对于方波测试,利用excel生成波形,可得如下的波形。从波形明显可见,长度为7的移动平均滤波器对于随机噪声的滤波效果比较满意。从图中还可以看出,移动平均滤波器在信号链中会引入一定的延时,在应用时需要考虑。对于一般的传感测量如果没有明确的要求,常常可以忽略。
对于正弦信号而言,移动平均滤波器也有比较明显的效果,只是其通带比较窄,如果有用信号频率比较高,则移动平均滤波器将不适合。