您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > DSP实现线性调频信号的匹配滤波
DSP实现线性调频脉冲信号的匹配滤波一.实验目的深入理解并掌握雷达信号处理方法,特别是以获得最大输出的匹配滤波方法,并体验在实际的信号处理应用中如何去实现该方法,进一步锻炼硬件DSP编程的能力。二.实验设备及条件1.PC兼容机一台;操作系统为WindowsXP2.ICETEK-C6713A-S60实验箱一台。3.USB连接电缆一条三.实验内容及要求使用DSP仿真出线性调频波,明确其中的参数——带宽,时宽等,重点要构造出匹配滤波器,使滤波后的效果达到脉冲压缩的目的。四.实验原理五.实验步骤5.1.实验准备:5.2.创建工程并加载程序:5.3.运行程序观察结果:六、实验结果七、收获和体会附录:本次实验可能用到的参考程序(仅仅是参考)/*时间:2010415*/#includemath.h#definePI3.141592653589793#defineSAMPLENUMBER256//fft点数,数据最大长度#definebeta1e6//带宽#definetr1.0e-4//脉冲宽度(beta*tr为时宽带宽积,βτ=100)#definefs2e6//采样率voidInitForFFT();//为FFTIFFT产生旋转因子voidMakeWave(int);//产生线性调频序列,在脉冲宽度之内voidFFT();//FFT函数voidIFFT();//逆FFTvoidFFTSHIFT_VECTOR(float[],float[]);intN=0;//有效的线性调频数据长度根据实际的脉宽在变在不够FFT点数时补零floatINPUTR[SAMPLENUMBER],INPUTI[SAMPLENUMBER];//线性调频数据floatresultR[SAMPLENUMBER],resultI[SAMPLENUMBER];//线性调频数据floatt[SAMPLENUMBER],w[SAMPLENUMBER],w1[SAMPLENUMBER];//时间和幅度doublesin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];//旋转因子main(){while(1){inti;//先初始化为0for(i=0;iSAMPLENUMBER;i++){INPUTR[i]=0;INPUTI[i]=0;resultR[i]=0;resultI[i]=0;t[i]=0;w[i]=0;w1[i]=0;}InitForFFT();//产生旋转因子N=ceil(tr*fs);//数据长度for(i=0;iN;i++)//时间序列{t[i]=i*1.0/fs;}MakeWave(N);//产生线性调频波,包含实部虚部for(i=0;iN;i++){resultR[i]=INPUTR[N-i+1];resultI[i]=-INPUTI[N-i+1];}//产生参考脉冲(即匹配滤波器),翻转和平移,此处的平移为N//时域的卷积变成频域的相乘FFT(INPUTR,INPUTI);//此处查看w的图形可以检验线性调频波是否正确FFT(resultR,resultI);for(i=0;iSAMPLENUMBER;i++){floattemp;temp=resultR[i];resultR[i]=INPUTR[i]*resultR[i]-INPUTI[i]*resultI[i];resultI[i]=temp*INPUTI[i]+INPUTR[i]*resultI[i];}//结果存在result里而后进行逆变换IFFT(resultR,resultI);//此处查看resultR的图形可以检验线性调频波压缩是否正确//while(1);//breakpoint}}voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER])//实部虚部,256点{intx0,x1,x2,x3,x4,x5,x6,x7,xx;inti,j,k,b,p,L;floatTR,TI,temp;/**********followingcodeinvertsequence************/for(i=0;iSAMPLENUMBER;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;x7=(i/128)&0x01;xx=x0*128+x1*64+x2*32+x3*16+x4*8+x5*4+x6*2+x7;dataI[xx]=dataR[i];}for(i=0;iSAMPLENUMBER;i++){dataR[i]=dataI[i];dataI[i]=0;}/**************followingcodeFFT*******************/for(L=1;L=8;L++){/*for(1)*/b=1;i=L-1;while(i0){b=b*2;i--;}/*b=2^(L-1)*/for(j=0;j=b-1;j++)/*for(2)*/{p=1;i=8-L;while(i0)/*p=pow(2,7-L)*j;*/{p=p*2;i--;}p=p*j;for(k=j;kSAMPLENUMBER;k=k+2*b)/*for(3)*/{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];dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];}/*ENDfor(3)*/}/*ENDfor(2)*/}/*ENDfor(1)*/for(i=0;iSAMPLENUMBER/2;i++){w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}}/*ENDFFT*/voidIFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER])//实部虚部,256点{intx0,x1,x2,x3,x4,x5,x6,x7,xx;inti,j,k,b,p,L;floatTR,TI,temp;/**********followingcodeinvertsequence************/for(i=0;iSAMPLENUMBER;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;x7=(i/128)&0x01;xx=x0*128+x1*64+x2*32+x3*16+x4*8+x5*4+x6*2+x7;dataI[xx]=dataR[i];}for(i=0;iSAMPLENUMBER;i++){dataR[i]=dataI[i];dataI[i]=0;}/**************followingcodeFFT*******************/for(L=1;L=8;L++){/*for(1)*/b=1;i=L-1;while(i0){b=b*2;i--;}/*b=2^(L-1)*/for(j=0;j=b-1;j++)/*for(2)*/{p=1;i=8-L;while(i0)/*p=pow(2,7-L)*j;*/{p=p*2;i--;}p=p*j;for(k=j;kSAMPLENUMBER;k=k+2*b)/*for(3)*/{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];dataI[k+b]=TI-temp*sin_tab[p]-dataI[k+b]*cos_tab[p];}/*ENDfor(3)*/}/*ENDfor(2)*/}/*ENDfor(1)*/for(i=0;iSAMPLENUMBER;i++){dataR[i]=1.0/SAMPLENUMBER*dataR[i];dataI[i]=1.0/SAMPLENUMBER*dataI[i];}for(i=0;iSAMPLENUMBER;i++){w1[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}}/*ENDFFT*/voidInitForFFT(){inti;for(i=0;iSAMPLENUMBER;i++){sin_tab[i]=sin(PI*2*i/SAMPLENUMBER);cos_tab[i]=cos(PI*2*i/SAMPLENUMBER);}}voidMakeWave(intn)//要产生变频信号lfm{inti;for(i=0;in;i++){INPUTR[i]=cos(PI*1.0*beta/tr*(t[i])*(t[i]));INPUTI[i]=sin(PI*1.0*beta/tr*(t[i])*(t[i]));}}voidFFTSHIFT_VECTOR(floatdataR[],floatdataI[])//交换行列之类的使中心频率位于零点{volatileintk2;volatilefloattemp11;for(k2=SAMPLENUMBER/2-1;k2=0;k2--){temp11=dataR[k2];dataR[k2]=dataR[SAMPLENUMBER/2+k2];dataR[SAMPLENUMBER/2+k2]=temp11;temp11=dataI[k2];dataI[k2]=dataI[SAMPLENUMBER/2+k2];dataI[SAMPLENUMBER/2+k2]=temp11;}}
本文标题:DSP实现线性调频信号的匹配滤波
链接地址:https://www.777doc.com/doc-6195919 .html