www.gusucode.com > matlab编程雷达仿真内插函数 多普勒频移计算目标速度源码程序 > code/main.m
clear all; clc; %========================条件======================== fm=2e6;%码频 fc=10e9;%载频 c=3e8;%光速 t=10e-3;%相干积累总时宽 T=1/fm*1270;%相位编码周期 N=15;%周期重复次数(t/T) snr=5;%目标回波输入信噪比(-35~10dB) d=1000;%目标距离(0~10000m) v=2;%目标速度(0~1000m/s) A=1;%目标幅度(1~100) m=1270;%一个周期内的采样点个数 t1=2*d/c;%延时 n1=fix(t1/5e-7);%延时补零个数 %========================m序列产生======================== connection=[1 0 0 0 0 0 1]; n=length(connection); reg=[1 0 1 0 1 0 1 ]; mseqmatrix(1)=reg(n); for i=2:127 newreg(1)=mod(sum(connection.*reg),2); for j=2:n newreg(j)=reg(j-1); end reg=newreg; mseqmatrix(i)=reg(n); end m_bip=2*mseqmatrix-1;%双值电平 %=======================单目标====================== pipei=fliplr(m_bip);%矩阵沿垂直轴左右翻转 hbb=conv(pipei,m_bip); m_1270=[m_bip zeros(1,1143)];%占空比10%补零 hb=repmat(m_1270,1,N); clear j; %---------------------回波-------------------------------------- hb=[zeros(1,n1) hb(1:1270*N-n1)]*A;%加延时 fd=2*v/(c/fc); duopule=exp(j*2*pi.*(1:1:1270*N)*fd/fm); hb1=hb.*duopule;%加多普勒 hb2=awgn(hb1,snr,'measured');%加噪声 % subplot(3,1,1);plot(real(hb)); % subplot(3,1,2);plot(real(hb1)); % subplot(3,1,3);plot(real(hb2));title('受多普勒频率调制的回波'); figure;plot(real(hb2));title('受多普勒频率调制的回波'); %xlabel('t/\mus'),ylabel('hb2(t)') %---------------------脉压------------------------------------- pipei=fliplr(m_1270); hbb1=conv(pipei,hb1); % m_hb1=abs(hbb1); % m_hb=abs(hbb1)/max(m_hb1); % m_hb=10*log10(m_hb); % figure;plot(m_hb); hbb2=hbb1(1:2000); figure;plot(real(hbb2)); title('脉压后一周期内的输出图形'); axis([1250 1300 -20 140]);grid on; set(gca,'Ytick',[67.5,127],'Xtick',1270); %---------------------脉压主瓣高度与多普勒的曲线------------------------% fd1=0:1000:14000;h=1:1:15; for i=1:15 duopule1=exp(j*2*pi.*(1:1:1270)*fd1(i)/fm); hb3=m_1270.*duopule1; pipei=fliplr(m_1270); hbb3=conv(pipei,hb3); h(i)=max(10*log10(abs(hbb3))); %h(i)=max(abs(hbb3)); end figure;plot(fd1*1e-3,h); title('脉压主瓣高度与多普勒的曲线'); xlabel('多普勒频率/KHz');ylabel('脉压主瓣高度/dB'); grid on; set(gca,'Ytick',[17.1,21.04]); hbb4=conv(pipei,hb2); %--------距离门重排---------------% for r=1:N for h=1:m s_hb2(h,r)=hbb4((r-1)*m+h); end end figure;mesh(1:N,1:m,real(s_hb2)); %figure;mesh(1:N,linspace(0,95250,1270),real(s_hb2)); title('脉压后输出图形'); xlabel('x/距离门序数');ylabel('y/目标距离');zlabel('z/目标幅度'); %--------------------------------- for h=1:m r_fft2(h,:)=abs(fft(s_hb2(h,:))); end %figure;mesh(1:N,linspace(0,95250,1270),10*log10(real(r_fft2))); figure;mesh(1:N,1:1270,real(r_fft2)); title('FFT后输出图形'); xlabel('x/目标速度');ylabel('y/目标距离');zlabel('z/目标幅度'); %-----------FFT的时宽和带宽 %求时宽 for i=1:m for j=1:N m_hb1(N*(i-1)+j)=r_fft2(i,j); end end %把FFT后的矩阵转换为一维数组 [max0,adress]=max(m_hb1);%取出最大值的位置 for i=(adress-2):(adress+2); y0(i-(adress-3))=m_hb1(i); y(i-(adress-3))=20*log10(y0(i-(adress-3))); end x=1:1:5; xi=1:1/360:5; yi=interp1(x,y,xi,'cubic');%内插函数 figure; plot(x,y,'o',xi,yi); ylabel('幅度(dB)'); title('时宽内插函数'); %求带宽 for i=1:N for j=1:m m_hb1(m*(i-1)+j)=r_fft2(j,i); end end %把FFT后的矩阵转换为一维数组 [max0,adress]=max(m_hb1);%取出最大值的位置 for i=(adress-1):(adress+1); y0(i-(adress-2))=m_hb1(i); y1(i-(adress-2))=20*log10(y0(i-(adress-2))); end x1=1:1:3; xi1=1:1/360:3; yi1=interp1(x1,y1,xi1,'cubic');%内插函数 figure; plot(x1,y1,'o',xi1,yi1); ylabel('幅度(dB)'); title('带宽内插函数');