FIR低通滤波器输入缓冲区为频率等于0的常数,输出缓冲区是否跟随输入?

请教老师:

用MATLAB的FDATool设计一个FIR低通滤波器,Fs=4HZ,Fc=1.5HZ,Order=16,输入采样32个值恒定=1.那么滤波器输出是不是应该=1 ?

我用STM32的CMSIS库函数arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);

把输入缓冲区的数值全部为1,输出缓冲区数值却是随机的,这是为什么?

#define TEST_LENGTH_SAMPLES  16    /* 采样点数 */
#define BLOCK_SIZE           16    /* 调用一次arm_fir_f32处理的采样点个数 */
#define NUM_TAPS             15  //29   /* 滤波器系数个数 */


uint32_t blockSize = BLOCK_SIZE;
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;            /* 需要调用arm_fir_f32的次数 */

static float32_t testInput_f32_50Hz_200Hz[TEST_LENGTH_SAMPLES]; /* 采样点 */
static float32_t testOutput[TEST_LENGTH_SAMPLES];               /* 滤波后的输出 */
static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];        /* 状态缓存,大小numTaps + blockSize - 1*/


/* 低通滤波器系数 通过fadtool获取  FS=4HZ,FC=1.5HZ */
const float32_t firCoeffs32LP[NUM_TAPS] = {
  -0.002572332276, 0.006660863757, -0.01139776595,1.279498026e-17,   0.0481939055,
    -0.1315901577,   0.2148257494,           0.75,   0.2148257494,  -0.1315901577,
     0.0481939055,1.279498026e-17, -0.01139776595, 0.006660863757,-0.002572332276
};

int main(void)
{
uint8_t ucKeyCode;      /* 按键代码 */
    uint16_t i;


    for(i=0; i<16; i++)
    {
            testInput_f32_50Hz_200Hz[i] = 1.0;
    }


while (1)
    {

            arm_fir_f32_lp();    //27ms执行周期


    for(i=0; i<16; i++)
    {

    y=testOutput[i];

    //   timeDly(1000);

    }





    }


}

static void arm_fir_f32_lp(void)
{
    uint32_t i;
    arm_fir_instance_f32 S;
    float32_t  *inputF32, *outputF32;

    /* 初始化输入输出缓存指针 */
    inputF32 = &testInput_f32_50Hz_200Hz[0];
    outputF32 = &testOutput[0];

    /* 初始化结构体S */
    arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);

    /* 实现FIR滤波 */
//  for(i=0; i < numBlocks; i++)
    //{
    i=0;    
    arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);
//  }


    }
}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐