📄 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 + -