硬汉嵌入式论坛

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

[有问必答] 【请教】IIR滤波器输出为0

[复制链接]

2

主题

4

回帖

2

积分

新手上路

积分
2
发表于 2016-4-20 11:11:19 | 显示全部楼层 |阅读模式
       利用STM32F10x的DSP库,进行带通滤波,从ADC采集数据,滤波处理后,DAC输出,可是发现滤波结果都为0,不知道问题出在哪,所以想请教下各位。
       IIR滤波器:

void arm_iir_f32_bp(float* input, float* output)
{
    uint32_t i;
    arm_biquad_casd_df1_inst_f32 S;
    float32_t ScaleValue;

    arm_biquad_cascade_df1_init_f32(&S, numStages, (float32_t *)&IIRCoeffs32BP[0], (float32_t *)&IIRStateF32[0]);

    //IIR Filtered
    arm_biquad_cascade_df1_f32(&S, input, output, TEST_LENGTH_SAMPLES);

    ScaleValue = 0.49833831777472271f * 0.49833831777472271f;

    for(i = 0; i < TEST_LENGTH_SAMPLES; i++)
         output *= ScaleValue【i】
     main函数

while(1)
    {
        if(DMA_GetFlagStatus(DMA1_FLAG_TC1) == SET)
        {
            for(i = 0; i < samples; i++)
            {
                ADC_ConvertedValueLocal【i】        = (float) ADC_ConvertedValue【i】    /    4096 * 3.3;
            }
            arm_iir_f32_bp(ADC_ConvertedValueLocal, Filtered_Bandpass);  

            
            for(i = 0; i < samples; i++)
            {
                ADC_Input【i】 = (uint32_t)(Filtered_Bandpass【i】 * 10000);    //终端打印显示ADC_Input【i】 = 0??????
            }
               
            
            DAC_Value = (float) DAC_GetDataOutputValue(DAC_Channel_1) / 4095 * 3.3;
            
               
            Delay(0xffffee);
        }
        DMA_ClearFlag(DMA1_FLAG_TC1);
        
    }
回复

使用道具 举报

2

主题

4

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-4-20 11:28:55 | 显示全部楼层
打印输出Filtered Bandpass,数值非常大,问题应该出在这,但是为什么呢?IIR函数的配置都是参考了论坛提供的教程,是哪里理解错误吗?不解……有木有人可以解答下……T_T
QQ截图20160420112848.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106994
QQ
发表于 2016-4-20 12:56:08 | 显示全部楼层
没看出哪里有问题,先不要用ADC采集的数据测试,用C库函数生成一批波形数据测试下,看看滤波器系数等是否有问题,一点点排查下。
回复

使用道具 举报

2

主题

4

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-4-28 09:42:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:没看出哪里有问题,先不要用ADC采集的数据测试,用C库函数生成一批波形数据测试下,看看滤波器系数等是否有问题,一点点排查下。 (2016-04-20 12:56) 
大神,你好,这个问题已经解决了……是滤波器系数没有取反的原因……汗(⊙﹏⊙)b。。。。
另外请教大神一个问题,在学习论坛提供的教程里【数字信号处理教程】,里面经常提到将串口打印的数据加载到MATLAB,然后”该方法已经讲解,不再赘述“。。。。。我翻了下前面的教程,没找到讲解MATLAB加载的章节,然后用了特笨重的方法,将数据存为txt,然后再导入matlab,但是这个方法要频繁的打开关闭STM32,昨天一度造成电脑死机,打开STM32串口就死机。。。。。
所以,大神能弱弱的请问下加载的方法大概在哪个章节,或者能不能提供下有关的链接……
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106994
QQ
发表于 2016-4-28 12:01:51 | 显示全部楼层

回 janice 的帖子

janice:大神,你好,这个问题已经解决了……是滤波器系数没有取反的原因……汗(⊙﹏⊙)b。。。。
另外请教大神一个问题,在学习论坛提供的教程里【数字信号处理教程】,里面经常提到将串口打印的数据加载到MATLAB,然后”该方法已经讲解,不再赘述“。。。。。我翻了下前面的教程,没找 .. (2016-04-28 09:42) 
一样,也是打印后倒入的,就在前面的几个章节里面,你找下。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 11:41 , Processed in 0.371915 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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