硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6626|回复: 5
收起左侧

[信号与系统] IIR滤波,C语言代码实现

[复制链接]

1

主题

3

回帖

1

积分

新手上路

积分
1
发表于 2016-5-10 18:48:52 | 显示全部楼层 |阅读模式
请教版主和各路大神,我使用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显示如下:
xxxx.JPG
   这不是我想要的结果,我该如何处理,求大神指点。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2016-5-10 22:38:25 | 显示全部楼层
先对比正常的波形和含有噪声波形的FFT,看看噪声主要在那个频段,然后再做相应的滤波。
回复

使用道具 举报

1

主题

3

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-26 12:51:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:先对比正常的波形和含有噪声波形的FFT,看看噪声主要在那个频段,然后再做相应的滤波。 (2016-05-10 22:38) 
发现原因了,因为我是每采样一个点,就计算一次,导致最终结果很小, 现在我每32个点处理一次,值是正常的,为什么会这样,也不清楚
  那么,每次处理多少个点会不会影响最终的滤波效果呢?  比如32个点和400个点
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2016-5-26 14:03:17 | 显示全部楼层

回 randolph 的帖子

randolph:发现原因了,因为我是每采样一个点,就计算一次,导致最终结果很小, 现在我每32个点处理一次,值是正常的,为什么会这样,也不清楚
  那么,每次处理多少个点会不会影响最终的滤波效果呢?  比如32个点和400个点  (2016-05-26 12:51) 
要大于1个点,DSP教程有说。
回复

使用道具 举报

1

主题

3

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-26 15:26:52 | 显示全部楼层
现在发现论坛上有好多资料可以参考。
   我在设计滤波器时遇到了问题,加速度传感器采样频率100hz, 要从里面提取出呼吸波形(呼吸大概2.5秒一次), 使用fir滤波器,fdatool该如何设计参数?

fdatool

fdatool
回复

使用道具 举报

2

主题

8

回帖

2

积分

新手上路

积分
2
发表于 2016-7-28 09:47:01 | 显示全部楼层
LZ你好,你的滤波是滤掉多少赫兹的呀,我现在程序也是这样,可我想滤掉50HZ的,却不成功
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 18:39 , Processed in 0.294476 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表