请教老师:
用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);
// }
}
}