请选择 进入手机版 | 继续访问电脑版

php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 184|回复: 0

MATLAB实现RFT算法

[复制链接]

2112

主题

2119

帖子

7704

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
5470
贡献
0
注册时间
2021-4-14
最后登录
2022-12-2
在线时间
522 小时
QQ
发表于 2022-8-20 16:48:23 | 显示全部楼层 |阅读模式
[AppleScript] 纯文本查看 复制代码
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=230  fd<=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=[0:Np-1]*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=[0:Np-1]*PRF/Np;
f2=[Np-1:-1:0]*PRF/Np;
v2=f2*lambda/2;
figure,
mesh(range,v2,abs(FFT_Jilei));
xlabel ('距离m')
ylabel('速度')
title('FFT积累')

%---mti与mtd---%
f=[0:Np-2]*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)*[0:Np-1].'*[0:Np-1]/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)*[0:Np-1].'*[0:Np-1]/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
        









上一篇:PM2.5传感器实例
下一篇:MATLAB实现阻塞干扰仿真
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )51LA统计

GMT+8, 2022-12-2 09:45 , Processed in 0.471774 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表