打印
[C语言]

高手围观下这是什么滤波算法

[复制链接]
870|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LCYGCS|  楼主 | 2016-4-7 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
已知测量的是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);//测量得到的电流


相关帖子

沙发
zhaoyu2005| | 2016-4-7 09:01 | 只看该作者
看着好像64点正弦波数据

使用特权

评论回复
板凳
xyz549040622| | 2016-4-7 10:08 | 只看该作者
关注下,等待做过的人的解惑。

使用特权

评论回复
地板
cuya| | 2016-4-7 10:37 | 只看该作者
如果数据是64点正弦波, 那么应该是离散傅立叶变换 DFT, 用来计算正弦波的幅值和角度。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

36

帖子

1

粉丝