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

📄 lfmmti.m

📁 通过visual DSP
💻 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=20.0e6;  %采样频率
NoisePower=-12;%(dB);
%---------------------------------------------------------------%
SampleNumber=fix(Fs*PRT);%计算一个脉冲周期的采样点数;
TotalNumber=SampleNumber*PulseNumber;%总的采样点数,920;
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);%BlindNumbe
if rem(number,2)~=0%不等于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);   %coeff为匹配滤波的系数,conj为取共轭函数
%Chirp_fft=fft(Chirp,128);
figure(20);
subplot(2,1,1);plot(real(Chirp));title('LFM信号实部');
 subplot(2,1,2);plot(imag(Chirp));title('LFM信号虚部');
figure(10);plot(abs(fft(Chirp)));title('LFM信号');

%-------------------------产生目标回波串------------------------%
% 目标回波串信号=发射信号经过一定的延时后在加上多普勒平移。即SignalAll=Chirp(t-t0)*exp(-jwt)  
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;   %SignalAll为模拟的目标回波信号,没有加入噪声
 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);
%====================================================================================%
%           总的回波信号,实际的总的回波信号不可避免存在噪声干扰,须加上噪声进行模拟 %
%====================================================================================%
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');
 
%================================时域脉压=================================%
%===========时域脉冲压缩直接对雷达回波信号进行卷积运算,其算式如下===========%
%   s(n)=s1(n)+jsQ(n);h(n)=hI(n)+jhQ(n)
%   y(n)=s(n)*h(n)     (1)
%   式中,s(n)为总的回波信号;h(n)为匹配滤波器的冲激响应信号;y(n)为经匹配滤波器压缩后的输出信号。
%   对线性调频信号的脉冲压缩处理,就是让信号通过一个与其相匹配的滤波器实现的
pc_time0=conv(Echo,coeff);%conv为卷积函数
figure(3);plot(abs(pc_time0));title('时域脉压结果的幅度,有暂态点');
pc_time1=pc_time0(number:TotalNumber+number-1);%去掉暂态点 number-1个

fo=fopen('td_pc.dat','wt');
for i=1:920
    fprintf(fo,'%f\r\n',abs(pc_time0(i)));
end
fclose(fo);


%================================频域脉压=================================%
%频域脉冲压缩先对输入的总的回波序列进行FFT变换,然后点乘以匹配滤波器冲击响应的离散谱,再用逆FFT还原成压缩后的时间离散信号。其算式如下:
% %S(k)=FFT(s(n));H(k)=FFT(h(n))
%y(n)=IFFT(S(k)×H(k))=IFFT(FFT(s(n))×FFT(h(n)))   
 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
coeff_fft=fft(coeff,1024);
pc_fft=Echo_fft.*coeff_fft;
pc_freq0=ifft(pc_fft);
figure(4);plot(abs(pc_freq0));title('频域脉压结果的幅度,有暂态点和后填充点,红色为时域频域脉压的差别');
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个)

fo=fopen('fd_pc.dat','wt');%存放频域脉压数据
for i=1:920
    fprintf(fo,'%f\r\n',abs(pc_freq0(i)));
end
fclose(fo);

%================MTI,对消静止目标和低速目标---相当于杂波=================================%
%目标信号=总的回波信号(有多普勒频移)-发射信号(无多普勒频移),这样进行MTI
mti=pc_time1(SampleNumber+1:2*SampleNumber)-pc_time1(1:SampleNumber);%
figure(5);plot(abs(mti));title('MTI 结果');

%load dsp_mti_result.dat;
%dsp_mti_result;
%error=dsp_mti_result'-mti;
%figure(6);plot(abs(error));title('MTI 结果误差');

fo=fopen('matlab_mti_result.dat','wt');  %存取mti数据
for i=1:460   %   2个周期=920点
   fprintf(fo,'%f\r\n',abs(mti(i)));
end
fclose(fo);


%save matlab_mti_result.dat     abs(mti)  -ascii -double

fo=fopen('coeff_fft_re.dat','wt');
for i=1:1024
    fprintf(fo,'%f\r\n',real(coeff_fft(i)));%将Matlab产生的LFM系数(84点)变换到频域(1024点),实部存入文件
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);

fo=fopen('Echo_re.dat','wt');%Matlab产生的LFM信号(920点),实部存入文件
for i=1:920
    fprintf(fo,'%f\r\n',real(Echo(i)));
end
fclose(fo);
fo=fopen('Echo_im.dat','wt');%Matlab产生的LFM信号(920点),虚部存入文件
for i=1:920
    fprintf(fo,'%f\r\n',imag(Echo(i)));
end
fclose(fo);


⌨️ 快捷键说明

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