已知测量的是10HZ的信号,且噪声很大,但是这个程序测量的很准,不知道是什么滤波算法,请大家看看是怎么滤波的,数组是真么生成的,点破有红包哦!
code long filter[80]=
{ 490, 975, 1451, 1913, 2357, 2778, 3172, 3536,
3865, 4157, 4410, 4619, 4785, 4904, 4976, 5000,
4976, 4904, 4785, 4619, 4410, 4157, 3865, 3536,
3172, 2778, 2357, 1913, 1451, 975, 490, 0,
-490, -975, -1451, -1913, -2357, -2778, -3172, -3536,
-3865, -4157, -4410, -4619, -4785, -4904, -4976, -5000,
-4976, -4904, -4785, -4619, -4410, -4157, -3865, -3536,
-3172, -2778, -2357, -1913, -1451, -975, -490, 0,
490, 975, 1451, 1913, 2357, 2778, 3172, 3536,
3865, 4157, 4410, 4619, 4785, 4904, 4976, 5000
};
for(k=0;k<4;k++)
{
for(i=0,p1=0,p2=0,p3=0,p4=0;i<2048;i++)
{
for(;intt0==OFF;)
{
}
intt0=OFF;
r1=ads1286();//读取AD码值
item(AC_CUR); //选择测量电流通道
wait(50);
p1+=(filter[i%64])*(long)r1;
p2+=(filter[i%64+16])*(long)r1;
r1=ads1286();//读取AD码值
item(AC_VOL);//选择测量电压通道
p3+=(filter[i%64])*(long)r1;
p4+=(filter[i%64+16])*(long)r1;
CS25045=OFF;
CS25045=ON;
}
r11[k]=p1;
r2[k]=p2;
r3[k]=p3;
r4[k]=p4;
}
for(k=0;k<4;k++)
{
r11[k]/=130000;
r2[k]/=130000;
r3[k]/=130000;
r4[k]/=130000;
r11[k]*=r11[k];
r2[k]*=r2[k];
r3[k]*=r3[k];
r4[k]*=r4[k];
r11[k]+=r2[k];
r3[k]+=r4[k];
}
for(k=0,p1=0,p2=r11[0],p4=r11[0];k<4;k++)
{
p1+=r11[k];
if(p2>r11[k])
p2=r11[k];
if(p4<r11[k])
p4=r11[k];
}
p1-=p2+p4;
for(k=0,p3=0,p2=r3[0],p4=r3[0];k<4;k++)
{
p3+=r3[k];
if(p2>r3[k])
p2=r3[k];
if(p4<r3[k])
p4=r3[k];
}
p3-=p2+p4;
i=srt(p1);//测量得到的电压
r1=srt(p3);//测量得到的电流
|