MTI动目标指示和MTD动目标检测

MTI 是一种频域滤波器(radar主席的ppt 中说到) ,它是对多组脉冲回波的同一个距离单元加权求和,得到一个结果;也就是多个输入一个输出;相当于一个高通滤波器,用来抑制固定目标和慢速杂波。就一次对消MTI 滤波器来说,就是将第一个发射脉冲的回波与第二个发射脉冲的回波相减,除去固定目标和慢速杂波,而保留了运动目标的信息,通过视频显示器可以看到幅度上下振动的波形,这也是为什么叫动目标显示;

MTD (moving targets detection)是带通滤波器组,也就是多个输入多个输出,可以用FIR 组实现,但是一般用FFT 实现,即对不同脉冲组回波信号的相同距离单元做FFT 处理,N 个输入得到N 个输出,CACFAR 既是对这N 个输出进行检测和判断目标!若存在目标,这N 个输出中比出现一个峰值最大的数,则这个可能就是目标的位置信息,根据位置信息,即可以得到运动目标的多普勒值。MTD雷达系统中区分运动目标和杂波在于它们速度上的差别。由于速度不同而引起回波信号的多普勒频率不相等,所以可以通过多普勒频率的不同将杂波和运动目标区分开来。动目标检测(MTD)不仅能滤除杂波,而且还可以将不同运动速度的目标区分开来,从而大大改善了在杂波背景下检测运动目标的能力。

MATLAB仿真:

1,雷达信号做脉冲压缩

% ===================================================================================%
%                                    雷达参数                                       %
% ===================================================================================%
C=3.0e8;  %光速(m/s)
RF=3.140e9/2;  %雷达射频 1.57GHz
Lambda=C/RF;%雷达工作波长
PulseNumber=16;   %回波脉冲数
BandWidth=2.0e6;  %发射信号带宽 带宽B=1/τ,τ是脉冲宽度 
TimeWidth=42.0e-6; %发射信号时宽
PRT=240e-6;   % 雷达发射脉冲重复周期(s),240us对应1/2*240*300=36000米最大无模糊距离
PRF=1/PRT;
Fs=2.0e6;  %采样频率
NoisePower=-12;%(dB);%噪声功率(目标为0dB)
% ---------------------------------------------------------------%
SampleNumber=fix(Fs*PRT);%计算一个脉冲周期的采样点数480;
TotalNumber=SampleNumber*PulseNumber;%总的采样点数480*16=;
BlindNumber=fix(Fs*TimeWidth);%计算一个脉冲周期的盲区-遮挡样点数;
%===================================================================================%
%                                    目标参数                                       %
%===================================================================================%
 TargetNumber=4;%目标个数
SigPower(1:TargetNumber)=[1 1 1 0.25];%目标功率,无量纲
TargetDistance(1:TargetNumber)=[3000 8025 15800 8025];%目标距离,单位m   距离参数为[3000 8025 9000+(Y*10+Z)*200 8025]
 DelayNumber(1:TargetNumber)=fix(Fs*2*TargetDistance(1:TargetNumber)/C);% 把目标距离换算成采样点(距离门) fix函数向0靠拢取整
TargetVelocity(1:TargetNumber)=[50 0 204 100];%目标径向速度 单位m/s   速度参数为[50 0 (Y*10+X+Z)*6 100]
TargetFd(1:TargetNumber)=2*TargetVelocity(1:TargetNumber)/Lambda; %计算目标多卜勒频移2v/λ
 
%====================================================================================%
%                                   产生线性调频信号                                  %
%====================================================================================%
 number=fix(Fs*TimeWidth);%回波的采样点数=脉压系数长度=暂态点数目+1
if rem(number,2)~=0  %rem求余
   number=number+1;
end   %把number变为偶数
 
for i=-fix(number/2):fix(number/2)-1
   Chirp(i+fix(number/2)+1)=exp(j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));%exp(j*fi)*,产生复数矩阵Chirp
end
coeff=conj(fliplr(Chirp));%把Chirp矩阵翻转并把复数共轭,产生脉压系数
figure(1);%脉压系数的实部
plot(real(Chirp));axis([0 90 -1.5 1.5]);title('脉压系数实部');

2,生成目标信号回波

%-------------------------产生目标回波串-----------------------------------------------------------------------------------------%
%-------------------------产生前3个目标的回波串-------%
SignalAll=zeros(1,TotalNumber);%所有脉冲的信号,先填0
for k=1:TargetNumber-1 % 依次产生各个目标
   SignalTemp=zeros(1,SampleNumber);% 一个PRT
   SignalTemp(DelayNumber(k)+1:DelayNumber(k)+number)=sqrt(SigPower(k))*Chirp;%一个脉冲的1个目标(未加多普勒速度)(DelayNumber(k)+1):(DelayNumber(k)+number)
   Signal=zeros(1,TotalNumber);
   for i=1:PulseNumber % 16个回波脉冲
      Signal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp; %每个目标把16个SignalTemp排在一起
   end
   FreqMove=exp(j*2*pi*TargetFd(k)*(0:TotalNumber-1)/Fs);%目标的多普勒速度*时间=目标的多普勒相移
   Signal=Signal.*FreqMove;%加上多普勒速度后的16个脉冲1个目标
   SignalAll=SignalAll+Signal;%加上多普勒速度后的16个脉冲4个目标
end
% %-------------------------产生第4个目标的回波串-------%
   fi=pi/3;
   SignalTemp=zeros(1,SampleNumber);% 一个脉冲
   SignalTemp(DelayNumber(4)+1:DelayNumber(4)+number)=sqrt(SigPower(4))*exp(j*fi)*Chirp;%一个脉冲的1个目标(未加多普勒速度)
   Signal=zeros(1,TotalNumber);
   for i=1:PulseNumber
      Signal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp;
   end
   FreqMove=exp(j*2*pi*TargetFd(4)*(0:TotalNumber-1)/Fs);%目标的多普勒速度*时间=目标的多普勒相移
   Signal=Signal.*FreqMove;
   SignalAll=SignalAll+Signal;
 
figure(2);
subplot(2,1,1);plot(real(SignalAll),'r-');title('目标信号的实部');grid on;zoom on;
subplot(2,1,2);plot(imag(SignalAll));title('目标信号的虚部');grid on;zoom on;

3,产生系统噪声信号

%====================================================================================%
%                                   产生系统噪声信号                                  %
%====================================================================================%
SystemNoise=normrnd(0,10^(NoisePower/10),1,TotalNumber)+j*normrnd(0,10^(NoisePower/10),1,TotalNumber);
%均值为0,标准差为10^(NoisePower/10)的噪声
%====================================================================================%
%                                   总的回波信号                                     %
%====================================================================================%
Echo=SignalAll+SystemNoise;% +SeaClutter+TerraClutter,加噪声之后的回波
for i=1:PulseNumber   %在接收机闭锁期,接收的回波为0
      Echo((i-1)*SampleNumber+1:(i-1)*SampleNumber+number)=0; %发射时接收为0
end
figure(3);%加噪声之后的总回波信号
subplot(2,1,1);plot(real(Echo),'r-');title('总回波信号的实部,闭锁期为0');
subplot(2,1,2);plot(imag(Echo));title('总回波信号的虚部,闭锁期为0');

4,时域脉冲压缩和频域脉冲压缩

%================================时域脉压=================================%
pc_time0=conv(Echo,coeff);%pc_time0为Echo和coeff的卷积
pc_time1=pc_time0(number:TotalNumber+number-1);%去掉暂态点 number-1个
figure(4);%时域脉压结果的幅度
subplot(2,1,1);plot(abs(pc_time0),'r-');title('时域脉压结果的幅度,有暂态点');%pc_time0的模的曲线
subplot(2,1,2);plot(abs(pc_time1));title('时域脉压结果的幅度,无暂态点');%pc_time1的模的曲线
% ================================频域脉压=================================%
Echo_fft=fft(Echo,8192);%理应进行TotalNumber+number-1点FFT,但为了提高运算速度,进行了8192点的FFT
coeff_fft=fft(coeff,8192);
pc_fft=Echo_fft.*coeff_fft;
pc_freq0=ifft(pc_fft);
figure(5);

按照脉冲号、距离门号重排数据

pc_freq1=pc_freq0(number:TotalNumber+number-1);%去掉暂态点 number-1个,后填充点若干(8192-number+1-TotalNumber)
% ================按照脉冲号、距离门号重排数据=================================%
for i=1:PulseNumber
      pc(i,1:SampleNumber)=pc_freq1((i-1)*SampleNumber+1:i*SampleNumber);%每个PRT为一行,每行480个采样点的数据
end
figure(6);
plot(abs(pc(1,:)));title('频域脉压结果的幅度,没有暂态点');

5,MTI和MTD

% ================MTI(动目标显示),对消静止目标和低速目标---可抑制杂波=================================%
for i=1:PulseNumber-1  %滑动对消,少了一个脉冲
   mti(i,:)=pc(i+1,:)-pc(i,:);
end
figure(7);
mesh(abs(mti));title('MTI  result');
 
% ================MTD(动目标检测),区分不同速度的目标,有测速作用=================================%
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
  figure(8);mesh(abs(mtd));title('MTD  result');

6,虚实矩阵转换
coeff_fft_c=zeros(1,2*8192);
for i=1:8192
    coeff_fft_c(2*i-1)=real(coeff_fft(i));
    coeff_fft_c(2*i)=imag(coeff_fft(i));
end
echo_c=zeros(1,2*TotalNumber);
for i=1:TotalNumber
    echo_c(2*i-1)=real(Echo(i));
    echo_c(2*i)=imag(Echo(i));
end

function y=maiya(PulseNumber,range,Fs,TargetVelocity,SNR)

C=3e8;
Tr=800e-6;%单脉冲最大可测距离0.5*Tr*C=120000m
Tp=160e-6;
fr=1/Tr;
lamda=0.03;
B=1e6;
%% 产生线性调频信号 
number=fix(Fs*Tp);%单脉冲发射信号内采样点数
SampleNumber=fix(Fs*Tr);%一个脉冲采样点数,800;则每个采样间距代表120000/799m
TotalNumber=SampleNumber*PulseNumber;
for i=-fix(number/2):fix(number/2)-1
    Chirp(i+fix(number/2)+1)=exp(j*(pi*(B/Tp)*(i/(Fs))^2)); 
end  
figure
plot(real(Chirp));
title('线性调频信号')
coeff=conj(fliplr(Chirp));%匹配滤波函数h
figure
plot(real(coeff))
title('匹配滤波函数h')


W = linspace(-pi,pi,4096);    
[h1,w0] = freqz(coeff,1,W);  
figure
plot(w0/pi,20*log10(abs(h1/max(h1)))); 
title('匹配滤波函数H频率响应')
%-------
%% 产生目标回波
TargetDistance(1:2)=range;
DelayNumber(1:2)=fix(Fs*2*TargetDistance(1:2)/C);

TargetFd(1:2)=2*TargetVelocity(1:2)/lamda; %计算目标多卜勒

SignalAll=zeros(1,TotalNumber);%所有脉冲的信号,先填0
for k=1:2% 依次产生各个目标1 2 
    SignalTemp=zeros(1,SampleNumber);% 一个脉冲
   
    SignalTemp(DelayNumber(k)+1:DelayNumber(k)+number)=(10^(SNR(k)/10))*Chirp;  %一个脉冲的1个目标(未加多普勒速度)
    Signal=zeros(1,TotalNumber);
    for i=1:PulseNumber
        Signal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp;
    end
    FreqMove=exp(j*2*pi*TargetFd(k)*(0:TotalNumber-1)/Fs);%目标的多普勒速度*时间=目标的多普勒相移
    Signal=Signal.*FreqMove;
    SignalAll=SignalAll+Signal;
end
figure
subplot(2,1,1);plot(real(SignalAll),'r-');title('目标信号的实部');grid on;zoom on;
subplot(2,1,2);plot(imag(SignalAll));title('目标信号的虚部');
grid on;zoom on;
%% 产生噪声
SystemNoise=normrnd(0,10^(-12/10),1,TotalNumber)+j*normrnd(0,10^(-12/10),1,TotalNumber);
%% 回波+噪声
Echo=SignalAll+SystemNoise;   % +SeaClutter+TerraClutter;
for i=1:PulseNumber   %在接收机闭锁期,接收的回波为0
    Echo((i-1)*SampleNumber+1:(i-1)*SampleNumber+number)=0;
end
figure
plot(real(Echo));title('总回波信号的实部,闭锁期为0');
%subplot(2,1,2);plot(imag(Echo));title('总回波信号的虚部,闭锁期为0');

%% 回波积累
Echoplus=zeros(1,SampleNumber);
for i=1:PulseNumber
   Echoplus1(1:SampleNumber)=Echo((i-1)*SampleNumber+1:i*SampleNumber);
   Echoplus=Echoplus+Echoplus1(1:SampleNumber);
end
Echoplus=Echoplus/PulseNumber;
figure
plot(real(Echoplus));title('回波脉冲积累信号的实部,闭锁期为0');


%% 时域脉压
pc_time0=conv(Echo,coeff);
%figure
%plot(abs(pc_time0));title('时域脉压结果的幅度,有暂态点');
%% 频域脉压
Echo_fft=fft(Echo,TotalNumber+number-1);%进行TotalNumber+number-1点FFT
coeff_fft=fft(coeff,TotalNumber+number-1);
pc_fft=Echo_fft.*coeff_fft;
pc_freq0=ifft(pc_fft);
pc_freq_abs=abs(pc_freq0);
figure
plot(pc_freq_abs);title('(不加窗)频域脉压结果的幅度(有暂态点)');

%%  数据重排到距离门
pc_freq1=pc_freq0(number:TotalNumber+number-1);
for i=1:PulseNumber
   pc(i,1:SampleNumber)=pc_freq1((i-1)*SampleNumber+1:i*SampleNumber);
end


figure

%subplot(2,1,1)
%plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), abs(pc(5,:)) );
% title('不加窗脉压结果');xlabel('距离'),ylabel('脉压输出');
 
plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), 20*log10(abs(pc(1,:))) );
xlabel('距离'),ylabel('脉压输出/db');
axis([-inf,inf, -10,50]);
title('不加窗脉压结果')
%% 加窗处理 
win=chebwin(number,35)';
h_w=coeff.*win;
hfft_w=fft(h_w,TotalNumber+number-1);
y=abs(ifft(Echo_fft.*hfft_w));
%figure
%plot(y);title('(加窗)频域脉压结果的幅度(有暂态点)');

pcW_freq1=y(number:TotalNumber+number-1);  %重排数据
for i=1:PulseNumber
   pcW(i,1:SampleNumber)=pcW_freq1((i-1)*SampleNumber+1:i*SampleNumber);
end

figure
%subplot(2,1,1)
%plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), abs(pcW(1,:)) );
 %title('加窗脉压结果');xlabel('距离'),ylabel('脉压输出');
 

plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), 20*log10(abs(pcW(1,:))) );
xlabel('距离'),ylabel('脉压输出/db');
axis([-inf,inf, -10,50]);
title('加窗脉压结果')


%% 相干积累
Echoplus_fft=fft(Echoplus,SampleNumber+number-1);%理应进行TotalNumber+number-1点FFT,但为了提高运算速度,进行了8192点的FFT
coeffplus_fft=fft(coeff,SampleNumber+number-1);
pcplus_fft=Echoplus_fft.*coeffplus_fft;
pcplus_freq=abs(ifft(pcplus_fft));
%figure
%plot(pcplus_freq);title('(不加窗)积累后频域脉压结果的幅度,有暂态点');

pcplus_freq1=pcplus_freq(number:SampleNumber+number-1);
figure
subplot(2,1,1)
plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), abs(pcplus_freq1) );
 title('不加窗积累后脉压结果');xlabel('距离'),ylabel('脉压输出');
subplot(2,1,2)

plot((0:SampleNumber-1)*(120000/(SampleNumber-1)), (20*log10((pcplus_freq1))));
 title('不加窗积累后脉压结果');xlabel('距离'),ylabel('脉压输出/DB');
 axis([-inf,inf, -20,50]);

%% mti对消
for i=1:PulseNumber-1  %滑动对消,少了一个脉冲 2脉冲
    mti(i,:)=pc(i+1,:)-pc(i,:);
end
mti_abs=abs(mti);
figure
mesh(20*log10(mti_abs));title('MTI  result');
xlabel('距离单元');
   ylabel('多普勒通道');
   zlabel('幅度值');
axis([-inf,inf,-inf,inf, 0,100]);

%% MTD

mtd=zeros(PulseNumber,SampleNumber);
mtd_abs=zeros(PulseNumber,SampleNumber);
for i=1:SampleNumber
    buff(1:PulseNumber)=pc(1:PulseNumber,i);
    buff_fft=fftshift(fft(buff)); %用fftshift将零频搬移到中间 这样可以方便观察速度正负
    mtd(1:PulseNumber,i)=buff_fft(1:PulseNumber)';
end
mtd_abs=abs(mtd);
x=0:1:SampleNumber-1;
y=-PulseNumber/2:1:PulseNumber/2-1;     %通道这样设后读出的通道数乘单位值则是速度值。
figure
mesh(x,y,20*log10(mtd_abs));title('MTD  result');
xlabel('距离单元');
   ylabel('多普勒通道');
   zlabel('幅度值');
axis([-inf,inf,-inf,inf, 0,100]);

%% cfar


cfar=zeros(PulseNumber,SampleNumber);
 T=sqrt(2*(10^(-12/10))^2*log(1/(1e-6)));
 for i=1:PulseNumber 
    for k=1:2
         left=0;
         right=Mean(mtd_abs(i,:),k+2,k+17);
         maxV=max(left,right);
        if(mtd_abs(i,k)>=T*maxV)
             cfar(i,k)=mtd_abs(i,k);
        else
             cfar(i,k)=0;
        end       
    end
    
    
    for k=3:17
        left=Mean(mtd_abs(i,:),1,k-2);
        right=Mean(mtd_abs(i,:),k+2,k+17);
        maxV=max(left,right);
        if(mtd_abs(i,k)>=T*maxV)
            cfar(i,k)=mtd_abs(i,k);
        else
            cfar(i,k)=0;
        end
    end
     for k=18:SampleNumber-18
        left=Mean(mtd_abs(i,:),k-17,k-2);
        right=Mean(mtd_abs(i,:),k+2,k+17);
        maxV=max(left,right);
        if(mtd_abs(i,k)>=T*maxV)
            cfar(i,k)=mtd_abs(i,k);
       else
            cfar(i,k)=0;
        end
     end
    for k=SampleNumber-17:SampleNumber-2
        left=Mean(mtd_abs(i,:),k-17,k-2);
        right=Mean(mtd_abs(i,:),k+2,SampleNumber);
        maxV=max(left,right);
        if(mtd_abs(i,k)>=T*maxV)
            cfar(i,k)=mtd_abs(i,k);
        else
            cfar(i,k)=0;
        end
    end
    for k=SampleNumber-1:SampleNumber
         left=Mean(mtd_abs(i,:),k-17,k-2);
         right=0;
         maxV=max(left,right);
         if(mtd_abs(i,k)>=T*maxV)
             cfar(i,k)=mtd_abs(i,k);
         else
             cfar(i,k)=0;
         end 
    end
 end
   figure
   
   IQ_acc=mean(abs(mti));
   mesh(x,y,20*log10(cfar));title(' CFAR  result');
   xlabel('距离单元');
   ylabel('多普勒通道');
   zlabel('幅度值');
 axis([-inf,inf,-inf,inf, 0,100]);
figure
 plot(x,20*log10(cfar(:,:)),x,20*log10(abs(IQ_acc)));
 title(' CFAR  result');
 xlabel('距离单元');
   ylabel('幅度');
axis([-inf,inf, -20,100]);

 

版权声明:本文为CSDN博主「寒听雪落」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangjie36/article/details/115712945

寒听雪落

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

单目3D目标检测调研

单目3D目标检测调研 一、 简介 现有的单目3D目标检测方案主要方案主要分为两类,分别为基于图片的方法和基于伪雷达点云的方法。   基于图片的方法一般通过2D-3D之间的几何约束来学习,包括目标形状信息&#xff0