qq_33787896 2019-04-24 19:02
浏览 479

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);
//  }


    }
}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog