TI中文支持网
TI专业的中文技术问题搜集分享网站

28335的FIR滤波

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

mangui zhang:

你这波形怎么看到的   在matlab中还是?

有些软件中都是从0开始的

fir的话   你修改参数    让整体右移

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

jianfa cai:

回复 mangui zhang:

这是我对DSP28335的直流ADC输入进行滤波后的结果,理想应该是一条直线才对,但是FIR滤波刚开始等于滤波器长度的那段我觉得本身滤波算法有缺陷

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

whisper luther:

回复 jianfa cai:

采样刚开始 的时候,你的数组没写入值的时候,滤波出来当然是0。

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

jianfa cai:

回复 whisper luther:

whisper luther

采样刚开始 的时候,你的数组没写入值的时候,滤波出来当然是0。

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

whisper luther:

回复 jianfa cai:

那个, 假设b [ ] = {1,1,1,1,…..}; 

两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。

i > j 时, h [ ] 的累加就达成定值了,变成直线。

从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。

FIR滤波的起始从零开始上升那段有没有办法避免掉?

程序如下:void fir_filter(float b[],float c[])

{

    int i,j=0;

    float sum;

    float h[21]={

              -0.09055792262407, 0.009744804975761,  0.01838867509003,  0.03195961694651,

               0.04917012260358,  0.06836127325356,  0.08774901331544,   0.1053433191277,

                0.1194310387162,    0.128484986607,   0.1316381457976,    0.128484986607,

                0.1194310387162,   0.1053433191277,  0.08774901331544,  0.06836127325356,

               0.04917012260358,  0.03195961694651,  0.01838867509003, 0.009744804975761,

              -0.09055792262407

               };

 

    for(i=0;i<300;i++)

    {

       sum=0.0;

       for(j=0;j<21;j++)

       {

           if(i >= j)

           sum+=h[j]*b[i-j];

           else

           ;

 

       }

       c[i]=sum;

    }

jianfa cai:

回复 whisper luther:

whisper luther

那个, 假设b [ ] = {1,1,1,1,…..}; 

两个for循环中,i是慢慢 增大的,相当于当 i< j 时,一直在对 h[ ] 做累加,所以sum 是慢慢增大的。

i > j 时, h [ ] 的累加就达成定值了,变成直线��

从i = 21(j 的最大值开始)到300,应该就不会出现这种现象了吧。

赞(0)
未经允许不得转载:TI中文支持网 » 28335的FIR滤波
分享到: 更多 (0)