???????ŵ?·

核心提示我做的滤波器 #include<reg51.h> #include"math.h" #define?N?25 #define?PI?3.1415926 sbitda_wr1=P3^6; sbitda_cs=P2^7;void?I

我做的滤波器

#include<reg51.h>

#include"math.h"

#define?N?25

#define?PI?3.1415926

sbitda_wr1=P3^6;

sbitda_cs=P2^7;

void?InputWave();

float?FIR();

void?da0832();

float?fHn[N]={0.0,0.0,0.001,-0.002,0.01,-0.09,

-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[N]={0.0};

float?fInput,fOutput;

float?fSignal1,fSignal2;

float?fStepSignal1,fStepSignal2;

float?f2PI;

int?i;

float?FIN[256],FOUT[256];

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;

?while(1)

?{

?//?fInput=InputWave();

?InputWave();

?//?FIN[nIn]=fInput;

?//?nIn++;nIn%=256;

fOutput=FIR();

FOUT[nOut]=fOutput;

nOut++;

if(nOut>=256)

{nOut=0;da0832();

?}

?}

}

void?InputWave()

{

int?i;

for(i=0;i<=15000;i++)

{

fXn[i]=(sin(PI*2*i/N*15000)+1)*5;

}

}

float?FIR()

{

float?fSum;

fSum=0;

for(i=0;i<N;i++)?fSum+=(fXn[i]*fHn[i]);

return(fSum);

}

void?da0832()

{

unsigned?char?i;

da_cs=0;//da转换输出使能标志置位

da_wr1=0;//输入寄存器的官写选通信号,表示单片机要传送数据了

for (i=0;i<255;i++)

P0=FOUT[i];

da_wr1=1;//数据传送完成,使能锁存

da_cs=1;

}

 
友情链接
鄂ICP备19019357号-22