⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcmtitest.m

📁 汇编语言编写的雷达动目标显示源程序
💻 M
字号:
%===========================================================================================%
%            该程序完成舰载雷达中频接收信号的产生(为脉压产生)                   %
%===========================================================================================%
close all; 
clear all;
%===================================================================================%
%                                    雷达参数                                       %
%===================================================================================%
C=3.0e8;  %光速(m/s)
RF=3.140e9;  %雷达射频
Lambda=C/RF;%雷达工作波长
PulseNumber=2;   %回波脉冲数 
BandWidth=2.0e6;  %发射信号带宽
TimeWidth=42.0e-6; %发射信号时宽
PRT=230e-6;   % 雷达发射脉冲重复周期(s)
PRF=1/PRT
Fs=2.0e6;  %采样频率
NoisePower=-26;%(dB);
%---------------------------------------------------------------%
SampleNumber=fix(Fs*PRT);%计算一个脉冲周期的采样点数;
TotalNumber=SampleNumber*PulseNumber;%总的采样点数;
BlindNumbe=fix(Fs*TimeWidth);%计算一个脉冲周期的盲区-遮挡样点数;
%===================================================================================%
%                                    目标参数                                       %
%===================================================================================%
TargetNumber=3;%目标个数
SigPower(1:TargetNumber)=[1 .5 .3];%目标功率,无量纲
TargetDistance(1:TargetNumber)=[7000 14000 23000];%目标距离,单位m
DelayNumber(1:TargetNumber)=fix(Fs*2*TargetDistance(1:TargetNumber)/C);
TargetVelocity(1:TargetNumber)=[0 30 100];%目标径向速度 单位m/s
TargetFd(1:TargetNumber)=2*TargetVelocity(1:TargetNumber)/Lambda  %计算目标多卜勒
%====================================================================================%
%                                   产生线性调频信号                                     %
%====================================================================================%
number=fix(Fs*TimeWidth);
if rem(number,2)~=0
   number=number+1;
end   
for i=-fix(number/2):fix(number/2)-1
   Chirp(i+fix(number/2)+1)=exp(j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));
end
coeff=conj(Chirp);
%-------------------------产生目标回波串------------------------%
SignalAdd=zeros(1,TotalNumber);%所有脉冲的信号
for k=1:TargetNumber% 依次产生各个目标
   SignalTemp=zeros(1,SampleNumber);% 一个脉冲
   SignalTemp(DelayNumber(k)+1:DelayNumber(k)+number)=sqrt(SigPower(k))*Chirp;%一个脉冲的某个目标
   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;
   SignalAdd=SignalAdd+Signal;
end
SignalAll=SignalAdd;
 figure(1);
  subplot(2,1,1);plot(real(SignalAll));title('目标信号的实部');
  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);
figure(20);
plot(abs(fft(SystemNoise)));
%====================================================================================%
%                                   总的回波信号                                     %
%====================================================================================%
Echo=SignalAll+SystemNoise;% +SeaClutter+TerraClutter;
for i=1:PulseNumber   %在接收机闭锁期,接收的回波为0
      Echo((i-1)*SampleNumber+1:(i-1)*SampleNumber+number)=0;
end
 figure(2);
 subplot(2,1,1);plot(real(Echo));title('总回波信号的实部,闭锁期为0');
 subplot(2,1,2);plot(imag(Echo));title('总回波信号的虚部,闭锁期为0');
%================================时域脉压=================================%
pc_time0=conv(Echo,coeff);
figure(3);
plot(abs(pc_time0));
title('时域脉压结果的幅度,有暂态点');
pc_time1=pc_time0(number:TotalNumber+number-1);%去掉暂态点 number-1个
%================================频域脉压=================================%
%Echo_fft=fft(Echo,TotalNumber+number-1);
% coeff_fft=fft(coeff,TotalNumber+number-1);
Echo_fft=fft(Echo,1024);%理应进行TotalNumber+number-1点FFT,但为了提高运算速度,进行了1024点的FFT
%figure(13);plot(real(Echo_fft));
%figure(14);plot(imag(Echo_fft));
coeff_fft=fft(coeff,1024);
pc_fft=Echo_fft.*coeff_fft;  %线性调频信号取其共轭与总信号相乘,相当与脉动压缩。
%figure(11);plot(real(pc_fft));
%figure(12);plot(imag(pc_fft));
pc_freq0=ifft(pc_fft);
figure(4);plot(real(pc_freq0));title('实部脉压结果');
figure(5);plot(imag(pc_freq0));title('iamg pulse solution');
figure(6);plot(abs(pc_freq0));title('频域脉压结果的幅度,有暂态点和后填充点,红色为时域频域脉压的差别');
frequ0=abs(pc_freq0);
save module.dat frequ0  -ascii -double 
hold on;
plot(abs(pc_time0(1:TotalNumber+number-1)-pc_freq0(1:TotalNumber+number-1)),'r');
pc_freq1=pc_freq0(number:TotalNumber+number-1);%去掉暂态点 number-1个,后填充点若干(1024-number+1-TotalNumber=21个)
% save pc_freq1.dat pc_freq1 -ascii -double 
%================MTI,对消静止目标和低速目标---相当于杂波=================================%
mti=pc_time1(SampleNumber+1:2*SampleNumber)-pc_time1(1:SampleNumber);
remti=real(mti);
immti=imag(mti);
figure(8);plot(real(mti));title('MTI real 结果');
figure(9);plot(imag(mti));title('MTI imag 结果');
mti_module=abs(mti);
% save remti.dat remti -ascii -double 
% save immti.dat immti -ascii -double 
% save mtimodule.dat mti_module -ascii -double
figure(10);
subplot(2,1,1);
plot(abs(mti));title('MTI 结果');
fo=fopen('coeff_fft_re.dat','wt');
for i=1:1024
    fprintf(fo,'%f\r\n',real(coeff_fft(i)));
end
fclose(fo);
fo=fopen('coeff_fft_im.dat','wt');
for i=1:1024
    fprintf(fo,'%f\r\n',imag(coeff_fft(i)));
end
fclose(fo);

real_Echo=real(Echo);
imag_Echo=imag(Echo);
save real.dat real_Echo -ascii -double    % 920点回波信号的实部,补零后作1024点FFT
save imag.dat imag_Echo -ascii -double    % 920点回波信号的虚部,补零后作1024点FFT

N2=1024;
for i=1:N2
    x1(i)=sin(2*pi*(i-1)/N2);
    x2(i)=cos(2*pi*(i-1)/N2);
end
ts=x1(1:N2/2);
tc=x2(1:N2/2);
save ts2.dat ts -ascii -double;% 1024点数据对应的正弦旋转因子
save tc2.dat tc -ascii -double;% 1024点数据对应的余弦旋转因子

dsp_mti=load('data.dat');
subplot(2,1,2);
plot(dsp_mti);title('DSP_mti');

error=mti_module-reshape(dsp_mti,1,460);
figure(12);
plot(error);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -