close all;
clear all;
clc;
%%
%%雷达参数
%雷达射频10GHz,波长3cm
%回波64个脉冲,PRT128us,脉冲63/4e6=15.75us,占空比12.3%
%噪声功率1dB,目标功率0dB
%一个脉冲周期2048点
%总共64*2048=131072点
C=3e8;%光速
RF=10e9;%雷达射频10GHz
Lambda=C/RF;%雷达工作波长3cm
PulseNumber=64;%回波脉冲数,64个脉冲,脉冲重复周期CPI=64
PRT=128e-6;%雷达发射脉冲重复周期,128us
PRF=1/PRT;
fs=64e6;%采样频率16MHz
dt=1/fs;
NoisePower=1;%噪声功率1dB
SampleNumber=fix(fs*PRT);%一个脉冲周期的采样点数,16e6*128e-6=2048点
TotalNumber=SampleNumber*PulseNumber;%总的采样点数2048*16=131072点
%%
%%
%%目标参数
%两个目标
%2048个距离门
%64个速度门
TargetNumber=2;%目标个数
SigPower(1:TargetNumber)=[1 1];%目标功率0dB,无量纲
TargetDistance(1:TargetNumber)=[3000 6000];%目标距离,单位m
DelayNumber(1:TargetNumber)=fix(fs*2*TargetDistance(1:TargetNumber)/C);%把目标距离换算成采样点(距离门)
TargetVelocity(1:TargetNumber)=[50 90];%目标径向速度,单位m/s
TargetFd(1:TargetNumber)=2*TargetVelocity(1:TargetNumber)/Lambda;%计算目标多普勒频移
%%
%%
%%二相码
%码元频率4MHz,载波频率4MHz,采样频率16MHz,一个码元内一个载波周期,四个采样点
%码元长度63/4e6=15.75us
%脉冲采样点数16e6*63/4e6
fm=4e6;%码元频率4MHz
NUM=fs/fm;
fbconnection=[0 0 0 0 1 1];
m_sequence=m_sequence(fbconnection);
DataLen=length(m_sequence);
mt=upsample(m_sequence,NUM);
for a=1:NUM:NUM*DataLen-1;
for b=1:NUM-1
mt(a+b)=mt(a);
end
end
T=1/fm*DataLen;
t=0:dt:T-dt;
mt=-2*mt+1;
fc=4e6;%载波频率4MHz
st=mt.*exp(1i*2*pi*fc*t-1i*pi/2);
figure(1) %二相码图
subplot(211)
plot(t,mt)
grid on;
axis([0,T,-1.2,1.2]);
subplot(212)
plot(t,real(st))
axis([0,T,-1.2,1.2]);
title('二相编码时域波形图');
% figure(1)
% % t=0:1/32:63-1/32;
% plot(t,real(st));
% grid on;
% axis([0,T/6,-1.2,1.2]);
% title('二相编码时域波形图');
% xlabel('时间(单位:秒)')
% ylabel('幅度')
coeff=conj(fliplr(st));%把st矩阵翻转并把复数共轭,产生脉压系数
%%
%%
%%回波
number=fix(fs/fm*DataLen);%回波单脉冲的采样点数
SignalAll=zeros(1,TotalNumber);%所有脉冲的信号,先填0
for a=1:TargetNumber %依次产生各个目标
SignalTemp=zeros(1,SampleNumber);%一个PRT
SignalTemp(DelayNumber(a)+1:DelayNumber(a)+number)=sqrt(SigPower(a))*st;%一个脉冲的一个目标(未加多普勒速度)
Signal=zeros(1,TargetNumber);
for b=1:PulseNumber %64个回波脉冲
Signal((b-1)*SampleNumber+1:b*SampleNumber)=SignalTemp;%每个目标把64个signaltemp排在一起
end
FreqMove=exp(1i*2*pi*TargetFd(a)*(0:TotalNumber-1)/fs);%目标的多普勒速度*时间=目标的多普勒相移
FreqMoveD=zeros(1,TotalNumber);
FreqMoveD(DelayNumber(a)+1:TotalNumber)=FreqMove(1:TotalNumber-DelayNumber(a));
FreqMoveD(1:DelayNumber(a))=FreqMove(TotalNumber-DelayNumber(a)+1:TotalNumber);
Signal=Signal.*FreqMoveD;%加上多普勒速度后的64个脉冲1个目标
SignalAll=SignalAll+Signal;%加上多普勒速度后的64个脉冲2个目标
end
figure(2) %回波信号图
subplot(211)
plot(real(SignalAll),'r');
axis([0,8000,-1.5,1.5]);
title('目标信号的实部(不带噪声)');
xlabel('距离门')
ylabel('幅度')
grid on;
zoom on;
subplot(212)
plot(imag(SignalAll));
axis([0,8000,-1.5,1.5]);
title('目标信号的虚部(不带噪声)');
xlabel('距离门')
ylabel('幅度')
grid on;
zoom on;
%SystemNoise=normrnd(0,10^(NoisePower/10),1,TotalNumber)+1i*normrnd(0,10^(NoisePower/10),1,TotalNumber);%均值为0,标准差为10^(NoisePower/10)的噪声
snri=-10;
Echo=awgn(SignalAll,snri,'measured');
% Echo=Echo-SignalAll;
% Echo=SignalAll+SystemNoise;%加噪声后的回波,地杂波海杂波
% Echo=SignalAll;
for a=1:PulseNumber
Echo((a-1)*SampleNumber+1:(a-1)*SampleNumber+number)=0;%发射时接收为0
end
figure(3) %加上噪声的回波信号图,闭锁器为0
subplot(211)
plot(real(Echo),'r');
axis([0,14e4,-10,10]);
title('总回波信号的实部,闭锁期为0');
xlabel('距离门')
ylabel('幅度')
subplot(212)
plot(imag(Echo));
title('总回波信号的虚部,闭锁期为0');
xlabel('距离门')
ylabel('幅度')
%%
%%
%%脉压
%时域脉压
pc_time0=conv(Echo,coeff);%时域脉压pc_time0为Echo和coeff的卷积
pc_time1=pc_time0(number:TotalNumber+number-1);%去掉number-1个前暂态点
% pc_time1=pc_time0(number:SampleNumber+number-1);%去掉number-1个前暂态点
% figure(4) %时域脉压图
% subplot(211);plot(abs(pc_time0),'r');title('时域脉压结果的幅度,有暂态点');%pc_time0的模的曲线
% subplot(212);
% plot(abs(pc_time1));xlabel('距离门');ylabel('幅度');title('时域脉压结果的幅度');
for a=1:PulseNumber
pc_time(a,1:SampleNumber)=pc_time1((a-1)*SampleNumber+1:a*SampleNumber);
end
%将回波转换为64*2048矩阵
%Echo[131072]
%echo[64][2048]
for a=1:PulseNumber
tmp(a,1:SampleNumber)=Echo((a-1)*SampleNumber+1:a*SampleNumber);
end
for a=1:PulseNumber
echo(a,1:SampleNumber)=zeros(1,SampleNumber);
echo(a,1:SampleNumber-number)=tmp(a,number+1:SampleNumber);%%将Echo变为echo
end
%频域脉压
Nfft=SampleNumber;
for a=1:PulseNumber
echo_fft(a,1:SampleNumber)=fft(echo(a,1:SampleNumber));
end
coeff_fft=fft(coeff,Nfft);
for a=1:PulseNumber
pc_fft(a,1:SampleNumber)=echo_fft(a,1:SampleNumber).*coeff_fft;
end
for a=1:PulseNumber
pc(a,1:SampleNumber)=ifft(pc_fft(a,1:SampleNumber));
end
%for a=1:PulseNumber %频域脉压遍历图
figure(5)
plot(abs(pc(a,1:SampleNumber)));xlabel('距离门');ylabel('幅度');title('频域脉压结果的幅度');
%end
% figure(5)
% plot(abs(pc(1,1:SampleNumber)));
figure(6)
mesh(abs(pc));
xlabel('距离门');ylabel('速度门');zlabel('幅度');title('频域脉压结果');
s=sum(abs(pc_time'));
ss=sum(abs(s));
pc_p=10*log10(ss/131072)
pc_p1=max(max(10*log10(abs(pc_time))))
SNR=10*log10(0.2*sum(abs(st)))
%%
%%
%%MTD
%MTI动目标显示,对消静止目标和低速目标
for a=1:PulseNumber-1
mti(a,:)=pc(a+1,:)-pc(a,:);
end
% figure(7)
% mesh(abs(mti));title('MTI');
%MTD
for h=1:SampleNumber %对不同速度门的信号做FFT
mtd(:,h)=fft(pc(:,h));
end
% mtd=zeros(PulseNumber,SampleNumber);
% for i=1:SampleNumber
% buff(1:PulseNumber)=pc(1:PulseNumber,i);
% buff_fft=fft(buff);
% mtd(1:PulseNumber,i)=buff_fft(1:PulseNumber);
% end
rbin=C*(0:SampleNumber-1).*dt/2;
fds=1/PRT;
dopplerbin=(0:PulseNumber-1).*0.5*Lambda*fds/PulseNumber;
figure(8)
mesh(rbin,dopplerbin,abs(mtd));xlabel('距离(单位:米)');ylabel('速度(单位:米/秒)');zlabel('幅度');title('MTD结果');
%view([90 0]);
%view([0 0]);
%%
评论10