打印
[DSP编程]

IIR滤波器的例程不知道从何看起,求提示

[复制链接]
1679|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ttxs_2013|  楼主 | 2014-5-18 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在学算法实验-IIR,感到很苦恼的是 给出的例程一个字的注释都没有,也不知道设计指标什么,变量也不知道表示什么含义,只能根据书上介绍的内容猜测大概什么含义。哪位能够给出一些提示,不然无从理解啊。
***#include"math.h"

#define IIRNUMBER 2
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF  10000
#define PI 3.1415926

float InputWave();
float IIR();

float fBn[IIRNUMBER]={ 0.0,0.7757 };
float fAn[IIRNUMBER]={ 0.1122,0.1122 }; //得到的数字滤波器的系统参数(An 分母,Bn 分子)
float fXn[IIRNUMBER]={ 0.0 }; //输入信号,查分方程中的x(n)
float fYn[IIRNUMBER]={ 0.0 }; //输出信号, 查分方程中的y(n)
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;

main()
{
        nIn=0; nOut=0;
        fInput=fOutput=0;
        f2PI=2*PI;
        fSignal1=0.0;
        fSignal2=PI*0.1;     //初始化
//        fStepSignal1=2*PI/30;
//        fStepSignal2=2*PI*1.4;
        fStepSignal1=2*PI/50;
        fStepSignal2=2*PI/2.5;
        while ( 1 )
        {
                fInput=InputWave(); // 输入
                fIn[nIn]=fInput;
                nIn++; nIn%=256;
                fOutput=IIR();
                fOut[nOut]=fOutput;
                nOut++;                                // break point
                if ( nOut>=256 )
                {
                        nOut=0;               
                }
        }
}

float InputWave()
{
        for ( i=IIRNUMBER-1;i>0;i-- )
        {
                fXn[i]=fXn[i-1];         
                fYn[i]=fYn[i-1];
        }
        fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
        fYn[0]=0.0;
        fSignal1+=fStepSignal1;
        if ( fSignal1>=f2PI )        fSignal1-=f2PI;
        fSignal2+=fStepSignal2;
        if ( fSignal2>=f2PI )        fSignal2-=f2PI;
        return(fXn[0]);
}

float IIR()
{
        float fSum;
        fSum=0.0;
        for ( i=0;i<IIRNUMBER;i++ )
        {
                fSum+=(fXn[i]*fAn[i]);
                fSum+=(fYn[i]*fBn[i]);
        }
        return(fSum);
}
***************************************************************************************************************************************************************************

相关帖子

沙发
竖琴上的最亮点| | 2014-5-19 14:38 | 只看该作者
建议楼主先去补充数字信号处理的知识,搞清楚IIR滤波器的设计,然后这些C代码就很容易看懂了

使用特权

评论回复
板凳
zhangmangui| | 2014-5-19 22:24 | 只看该作者
找找资料看看滤波器的系数是怎么得到的   

使用特权

评论回复
地板
ttxs_2013|  楼主 | 2014-5-20 22:47 | 只看该作者
zhangmangui 发表于 2014-5-19 22:24
找找资料看看滤波器的系数是怎么得到的

嗯,正在考虑这个问题

使用特权

评论回复
5
ttxs_2013|  楼主 | 2014-5-20 22:49 | 只看该作者
竖琴上的最亮点 发表于 2014-5-19 14:38
建议楼主先去补充数字信号处理的知识,搞清楚IIR滤波器的设计,然后这些C代码就很容易看懂了 ...

的确,是应该先回顾下理论知识,有点本末倒置了。不过,还是有几个地方没弄明白。

使用特权

评论回复
6
七颗咖啡豆| | 2014-9-9 11:15 | 只看该作者
这个程序就是错的,Y(n)整个过程始终为0。打着IIR的旗子做FIR的运算,好多教材都把这个当IIR搞了。呵呵了

使用特权

评论回复
7
846150568| | 2014-9-14 16:13 | 只看该作者
七颗咖啡豆 发表于 2014-9-9 11:15
这个程序就是错的,Y(n)整个过程始终为0。打着IIR的旗子做FIR的运算,好多教材都把这个当IIR搞了。呵呵了 ...

程序没错啊,估计个人水平比较低,看不出错误,求指明

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

125

帖子

4

粉丝