我是靠谱客的博主 英勇裙子,最近开发中收集的这篇文章主要介绍matlab仿真多普勒相移,有关脉冲多普勒雷达的matlab仿真问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大家好,最近在研究脉冲多普勒雷达,从网上找到了一个matlab代码:

% ===========================================================================================%

%            该程序完成16个脉冲信号的【脉压、动目标显示/动目标检测(MTI/MTD)】

% ===========================================================================================%

%  程序中根据每个学生学号的末尾三位(依次为XYZ)来决定仿真参数,034

%  目标距离为[3000 8025 9000+(Y*10+Z)*200 8025],4个目标

%  目标速度为[50 0 (Y*10+X+Z)*6 100]

% ===========================================================================================%

close all; %关闭所有图形

clear all; %清除所有变量

clc;

% ===================================================================================%

%                                    雷达参数                                       %

% ===================================================================================%

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('脉压系数实部');

%-------------------------产生目标回波串-----------------------------------------------------------------------------------------%

%-------------------------产生前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;

%====================================================================================%

%                                   产生系统噪声信号                                  %

%====================================================================================%

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');

%================================时域脉压=================================%

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);

subplot(2,1,1);plot(abs(pc_freq0(1:TotalNumber+number-1)));title('频域脉压结果的幅度,有前暂态点');

subplot(2,1,2);plot(abs(pc_time0(1:TotalNumber+number-1)-pc_freq0(1:TotalNumber+number-1)),'r');title('时域和频域脉压的差别');

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('频域脉压结果的幅度,没有暂态点');

% ================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');

代码写得很不错,注释清楚,语句简练,也能得到正确的结果。但有一个问题不明白,如果把采样频率Fs减半,按理说不会对结果有影响,但图6的结果会出现伪峰(如图),不知道是哪里的问题。跪求大神解答。

图六.jpg

(19.82 KB, 下载次数: 3)

2017-9-17 11:23 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

图6

b0835b3b5da9abc5c5a8df3afd20d5d9.png

最后

以上就是英勇裙子为你收集整理的matlab仿真多普勒相移,有关脉冲多普勒雷达的matlab仿真问题的全部内容,希望文章能够帮你解决matlab仿真多普勒相移,有关脉冲多普勒雷达的matlab仿真问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部