xzy03101271 发表于 2015-11-10 19:51

IIR数字滤波器实现程序

这是从书上还有很多网上资料找的说的比较多的IIR程序,我觉得这个程序有问题啊,程序里面fYn应该一直是0啊!!!#include "DSP281x_Device.h"   // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "f2812a.h"
#include"math.h"

#define IIRNUMBER 2
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF10000
#define PI 3.1415926

float InputWave();
float IIR();

float fBn={ 0.0,0.7757 };
float fAn={ 0.1122,0.1122 };
float fXn={ 0.0 };
float fYn={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn,fOut;
int nIn,nOut;

main(void)
{
   
           nIn=0; nOut=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=fInput;
                nIn++; nIn%=256;
                fOutput=IIR();
                fOut=fOutput;
                nOut++;
                if ( nOut>=256 )
                {
                        nOut=0;                /* 请在此句上设置软件断点 */
                }
        }
}        


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

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


页: [1]
查看完整版本: IIR数字滤波器实现程序