?? fd.txt
字號:
鑒于試驗箱帶的程序比較冗繁,我將FIR,IIR,FFT三個函數分別寫成子函數形式,這樣
簡單、易記、代碼量減少了很多。
此代碼為個人所改寫,僅供參考
//fir
#define FIRNUMBER 25
float fHn[FIRNUMBER]={Matlab求得的系數表};
//float fXn[FIRNUMBER]={輸入序列};
float FIR(float fXn[FIRNUMBER])
{
float fSum;
fSum=0;
for(i=0;i<FIRNUMBER;i++)
{
fSum+=(fXn[i]*fHn[i]);
}
return(fSum);
}
//iir
#define IIRNUMBER 2
float fAn[IIRNUMBER]={輸出序列系數};
float fBn[IIRNUMBER]={輸入序列系數};
//float fXn[IIRNUMBER]={輸入序列};
//float fYn[IIRNUMBER]={輸出序列};
float FIR(float fXn[IIRNUMBER],float fYn[IIRNUMBER])
{
float fSum;
fSum=0;
for(i=0;i<FIRNUMBER;i++)
{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}
//fft
#define SAMPLENUMBER 128
float sin_tab[SAMPLENUMBER ]={正弦系數表};
float cos_tab[SAMPLENUMBER ]={余弦系數表};
viod FFT(float dataR[SAMPLENUMBER ],float dataI[SAMPLENUMBER ])
{
int x0,x1,x2,x3,x4,x5,x6,xx;
int i,j,k,b,L,p;
float TR,TI,temp;
*******************invent sequence*******************
for(i=0;i<SAMPLENUMBER ;i++)
{
x0=x1=x2=x3=x4=x5=x6=0;
x0=i&0x01;
x1=(i/2)&0x01;
x2=(i/4)&0x01;
x3=(i/8)&0x01;
x4=(i/16)&0x01;
x5=(i/32)&0x01;
x6=(i/64)&0x01;
xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;
dataI[xx]=dataR[i];
}
for(i=0;i<SAMPLENUMBER ;i++)
{
dataR[i]=dataI[i];
dataI[i]=0;
}
******************following code FFT*********************
for(L=1;L<=7;L++)
{
b=1;
i=L-1;
while(i>0)
{
b=b*2;
i--;
}
for(j=0;j<=b-1;j++)
{
p=1;
i=7-L;
while(i>0)
{
p=p*2;
i--;
}
p=p*j;
for(k=j;k<128;k=k+2*b)
{
TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
dataR[k+b]=TI+temp*sin_tab[p]+dataI[k+b]*cos_tab[p];
}
}
}
for(i=0;i<SAMPLENUMBER /2;i++)
{
w[i]=sqart(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -