|
请教版主和各路大神,我使用IIR低通滤波(基于matlab和ARM DSP)来处理MEMS加速度传感器输出值, 传感器采样100Hz, 想得到一个正常人呼吸的波形图。 使用IIR过滤得到了一个较为规则的波形,单并不是呼吸的波形
,
滤波器系数采用matlab生成,代码如下
#define MEDIAN_FILTER_WINDOW 3
static u16 mf_array[MEDIAN_FILTER_WINDOW];
static u8 median_filter_index = 0;
static float32_t testInput_f32_50Hz_200Hz[TEST_LENGTH_SAMPLES];
static float32_t testOutput[TEST_LENGTH_SAMPLES];
static float32_t IIRStateF32[4*numStages];
const float32_t IIRCoeffs32LP[5*numStages] = {
1.0f, 2.0f, 1.0f, 1.3209134308194264f, -0.63273879288527657f,
1.0f, 2.0f, 1.0f, 1.0485995763626117f, -0.29614035756166951f
};
static void arm_iir_f32_lp(void)
{
uint32_t i;
arm_biquad_casd_df1_inst_f32 S;
float32_t ScaleValue;
/* 初始化 */
arm_biquad_cascade_df1_init_f32(&S, numStages, (float32_t *)&IIRCoeffs32LP[0], (float32_t
*)&IIRStateF32[0]);
/* IIR滤波 */
arm_biquad_cascade_df1_f32(&S, testInput_f32_50Hz_200Hz, testOutput, TEST_LENGTH_SAMPLES);
/*放缩系数 */
// ScaleValue = 0.052219514664161221f * 0.04279801741658381f;
ScaleValue = 0.077956340516462552f * 0.061885195299764481f;
/* 打印滤波后结果 */
for(i=0; i<TEST_LENGTH_SAMPLES; i++)
{
printf("%f\r\n", testOutput*ScaleValue);
}
}
最终输出结果的matlab显示如下:
这不是我想要的结果,我该如何处理,求大神指点。 |
|