admin 发表于 2022-8-20 16:48:23

MATLAB实现RFT算法

clc;
close all;
clear all;
%% 参数设置%%
c=3e8;                      %光速
f0=10e6;                  %载频频率
lambda=c/f0;                %波长
fs=500e3;                  %采样频率
B=250e3;                     %信号带宽
T=1e-3;                  %脉冲重复周期            
PRF=fix(1/T);               %脉冲重复频率 && %第一盲速对应多普勒频率 && PRF*c/(2*f0)=71.42m/s
vd=PRF*c/(2*f0)
taup=0.2*T;               %脉宽
k=B/taup;                   %调制斜率

%目标速度
v=zeros(1,3);
v(1)=2000;v(2)=5000;v(3)=14000;
%fd=2*f0*v/c;   %多普勒频率       2*f0/c=230fd<=PRF/2=8500

d_max=(T-taup)*c/2    %测量最大距离
R_max=T*c/2

%目标距离
R=zeros(1,3);
R(1)=10e3;   R(2)=50e3;   R(3)=80e3;   
Np=500;                %脉冲数
Ns=fix(fs*T);                  %一个周期内采样点数         
N_mainei=fs*taup;         %脉冲内采样点数
t=linspace(0,T,Ns);       %taup--T


%% 生成信号%%
baseband=exp(1i*k*pi*(t-taup/2).^2).*rectpuls(t-taup/2,taup);             %基带信号
x0=exp(1i*2*pi*f0*(t-taup/2));                                          %载波信号
x1=exp(1i*2*pi*(f0*(t-taup/2)+k./2*(t-taup/2).^2)).*rectpuls(t-taup/2,taup);       %线性调频信号


for n=1:Np
    s=zeros(1,Ns);
    for m=1:3
    t0=2*(R(m)+(n-1)*v(m)*T)/c;   
    y_dan(n,:)=rectpuls(t-t0-taup/2,taup).*exp(1i*(2*pi*(f0+2*v(m)/lambda)*(t-t0-taup/2)+pi*k.*(t-t0-taup/2).^2));
    s=s+y_dan(n,:);
    end
    y(n,:)=s;
end



%%   生成噪声   %%
rng default;
clutteri=10*randn(Np, Ns);
clutterq=10*randn(Np, Ns);
clutter=complex(clutteri,clutterq);   %生成噪声
s0=0.001*clutter+y;                           %目标加噪声


%%低通滤波器%%
x2=ones(Np,1)*(conj(x0)).*s0;      %混频:载波和回波进行相乘(下变频)
% %======低通滤波器======%%   
% for i=1:Np
% LPF_out0(i,:)=lowpass(x2(i,:),1.4*B,fs); %100个脉冲回波
% end


%%脉冲压缩%%
LPF_out1=fft(x2.').*(conj(fft((baseband.')))*ones(1,Np));
LPF_out2=(ifft(LPF_out1)).';                %反傅里叶变换后仍为时域信号
range=c*t/2;

%% 直接FFT进行积累 %%
FFT_Jilei=fft(LPF_out2);

%%    MTI杂波抑制(双脉冲对消器)%%
for n=1:Np-1
    mti(n,:)=LPF_out2(n+1,:)-LPF_out2(n,:);
end
mti_out=fft(mti);




%%画图%%
%---混频与脉压---%
f=*PRF/Np;
v=f*lambda/2;

figure
mesh([-Ns/2:Ns/2-1]*fs/Ns,1:Np,abs(fftshift((LPF_out1).')));
title('混频过低通LPF_out1');
xlabel ('频率Hz')
ylabel('脉冲个数')

figure
mesh(range,1:Np,abs(LPF_out2));
title('脉压后的信号LPF_out2');
xlabel ('距离m')
ylabel('脉冲个数')

%---FFT进行积累---%
f1=*PRF/Np;
f2=*PRF/Np;
v2=f2*lambda/2;
figure,
mesh(range,v2,abs(FFT_Jilei));
xlabel ('距离m')
ylabel('速度')
title('FFT积累')

%---mti与mtd---%
f=*PRF/(Np-1);
figure
mesh(range,1:Np-1,abs(mti));
title('对消');
xlabel ('距离m')
ylabel('脉冲个数')

figure
mesh(range,f,abs(mti_out));
title('mtd');
xlabel ('距离m')
ylabel('频率Hz')

%%RFT算法%%

% rft(:,:)=exp((-1i*(2*pi)*.'*/Np));
% g(:,:)=rft*LPF_out2(1:Np,:);

vmax=15e3;   Nv=500; delta_v=vmax/Np;
rmax=120e3;Nr=500; delta_r=rmax/Np;
% t=2*(delta_r*r+delta_v*v*m*T+delta_a*a*(m*T)^2)/c;%round(2*(2500*Np*T+1000000)/c)
% o=round(t*fs);

for r=1:Nr
    for v=1:Nv
      RFT2(v,r)=0;
      RFT(v,r)=0;
      for m=1:Np
            t=2*(delta_v*v*m*T+delta_r*r)/c;%round(2*(2500*Np*T+1000000)/c)
            o=round(t*fs);
%             if o==0
%               o=1;
%             end
            RFT(v,r)=LPF_out2(m,o)*exp(1i*4*pi/lambda*delta_v*(v-1)*(m-1)*T)+RFT(v,r);
            RFT2(v,r)=LPF_out2(m,o)*exp(1i*2*pi/Np*(v-1)*(m-1))+RFT2(v,r);
            %%%%%%两个公式结果一样,为什么一样?
%               o=round(2*B*(delta_v*v*m*T+delta_r*r)/c)*5;
%               if o==0
%               o=1;
%               end
%               RFT(r,v)=LPF_out2(m,o)*exp(1i*4*pi*(v-1)*(m-1)/(lambda*Np))+RFT(r,v);
               MM(v,r)=LPF_out2(m,o);
      end
    end
end
v=f1*lambda/2;
range1=delta_r*(1:Nr);
figure,mesh(range1,v,abs(RFT));title('RFT');
xlabel ('距离m')
ylabel('速度')
figure,mesh(abs(RFT2)),title('RFT2')


%rft(:,:)=exp((1i*(2*pi)*.'*/Np));


% for v=1:Np
%   for r=1:Np
%         o(r)=round(fs*2*(delta_r*r+delta_v*v*T)/c);
%         MM(v,r)=LPF_out2(v,o(r));
%   end
% end
% RFT1(:,:)=rft*MM.';
% figure,mesh(abs(MM)),title('MM')
%
%
%
%
% figure,mesh(abs(fft(MM.')))


% for n=1:Np
%   g(n,:)=zeros(1,Ns);
%   for k=1:Np
%      g(n,:)=LPF_out2(k,:)*exp(-i*2*pi*(n-1)*(k-1)/Np)+g(n,:);
%   end
% end
      




页: [1]
查看完整版本: MATLAB实现RFT算法