谁来解读下FIR源程序

2019-07-23 14:29发布

#include "DSP28_Device.h"     // DSP281x Headerfile Include File
//#include "DSP281x_Examples.h"   // DSP281x Examples Include File
//#include "f2812a.h"
#include"math.h"

#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF  10000
#define PI 3.1415926
#define Pi 3.1415926
float InputWave();
float FIR();

//冲激响应系数

float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
                       -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
                       -0.11,-0.02,0.049,-0.018,-0.009,0.01,
                       -0.002,-0.002,0.001,0.0,0.0
                     };
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256],H[102];
int nIn,nOut;
main(void)
{
    InitSysCtrl();
    nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;     
fStepSignal2=2*PI*1.4;
  while ( 1 )
{
  fInput=InputWave();
  fIn[nIn]=fInput;
  nIn++; nIn%=256;
  fOutput=FIR();
  fOut[nOut]=fOutput;
  nOut++;
  if ( nOut>=256 )
  {
   nOut=0;  /* 请在此句上设置软件断点 */
  }
}
}  


float InputWave()
{
for ( i=FIRNUMBER-1;i>0;i-- )
  fXn=fXn[i-1];
// fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;  //此时为混合信号(sin 为低频信号,cos为高频信号)
// fXn[0]=cos(fSignal2)/6.0; //此时为cos 高频信号
fXn[0]=sin(fSignal1); //此时为sin 低频信号
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}

float FIR()
{
float fSum;
fSum=0;
for ( i=0;i<FIRNUMBER;i++ )
{
  fSum+=(fXn*fHn);
}
return(fSum);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。