This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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;

    }

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

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

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

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

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

  • whisper luther 说:

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

    数组没问题的,就是一个含有噪声的直流,没有那个上升沿。这个是因为FIR滤波前面都会有N/2的无效数据,但是我不知道为什么我的无效数据有N个。

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

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

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

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

  • whisper luther 说:

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

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

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

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

    这是个固有问题,需要进行端点延拓才能解决,但是我不知道为什么我这样的无效数据有N个,有些人说只有N/2个