✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
1. 概述
雷达测距是利用电磁波的传播特性来测量目标距离的一种技术,在各个领域都有着广泛的应用。其中,调频连续波FMCW雷达因其高精度、高分辨率、抗干扰能力强等优点,近年来得到了越来越多的关注。本文将详细介绍基于调频连续波FMCW的雷达测距原理、系统组成、关键技术以及应用领域。
2. FMCW雷达原理
FMCW雷达的工作原理是发射频率随时间线性变化的连续波信号,并接收目标反射信号。通过发射信号和接收信号之间的频率差,可以计算出目标距离。
具体来说,FMCW雷达发射的信号频率随时间线性变化,其频率变化速率称为调频斜率。目标反射信号的频率也随时间线性变化,但其频率变化速率与发射信号的频率变化速率不同。两者之间的频率差称为拍频频率,与目标距离成正比。
3. FMCW雷达系统组成
FMCW雷达系统主要由以下几个部分组成:
-
发射机: 产生频率随时间线性变化的连续波信号。
-
接收机: 接收目标反射信号并与发射信号进行混频,得到拍频信号。
-
信号处理单元: 对拍频信号进行处理,提取目标距离信息。
-
天线: 用于发射和接收电磁波。
4. FMCW雷达关键技术
FMCW雷达的关键技术包括:
-
高精度频率合成技术: 确保发射信号的频率变化准确稳定。
-
高灵敏度接收技术: 提高接收信号的信噪比,提高测距精度。
-
数字信号处理技术: 对拍频信号进行精确测量和分析,提取目标距离信息。
5. FMCW雷达应用领域
FMCW雷达在各个领域都有着广泛的应用,主要包括:
-
汽车自动驾驶: 用于探测前方障碍物,实现自动刹车、车道保持等功能。
-
无人机避障: 用于探测周围障碍物,实现无人机安全飞行。
-
工业过程控制: 用于测量物料液位、距离等参数,实现自动化控制。
-
医疗诊断: 用于测量人体组织的厚度、血流速度等参数,辅助疾病诊断。
-
气象观测: 用于探测云层高度、降水量等气象参数,提高气象预报精度。
6. 总结
基于调频连续波FMCW的雷达测距技术具有精度高、分辨率高、抗干扰能力强等优点,在各个领域都有着广泛的应用前景。随着技术的不断发展,FMCW雷达的应用范围将会更加广泛,为人类社会带来更大的便利。
⛳️ 运行结果
📣 部分代码
clear all;
close all;
clc;
addpath('./funcs');
%% Declear
Nt = 2; % number of transmit antennas
Nr_UCA = 24; % UCA
Nr_ULA = 4; % UCyA
Nr = Nr_UCA * Nr_ULA; % ULA
L = 1; % Channel order
d_H = 4; % Number of propagation paths
Pxp = 1;
K = 64; % OFDM subcarriers
F = dftmtx(K);
FL = F(:,1:L);
sigmax2 = 1;
loop = 1000;
SNR = -10:5:20;
I_D_f = {};
for snr_i = 1:length(SNR)
I_D_f{snr_i} = gather(getfield(load(['./I_D/SNR_' num2str(SNR(snr_i)) '.mat']), 'I_D'));
end
%% Generate position of elements in arrays
d_ULA_nor = 0.5;
d_UCA_nor = 0.5;
R_nor = 0.5 * d_UCA_nor/sin(pi/Nr_UCA);
ULA_elements_nor = zeros(3, 1, Nr);
UCyA_elements_nor = zeros(3, Nr_ULA, Nr_UCA);
for Nr_index=1:Nr
ULA_elements_nor(1, 1, Nr_index) = (Nr_index-1) * d_UCA_nor;
ULA_elements_nor(2, 1, Nr_index) = 0;
ULA_elements_nor(3, 1, Nr_index) = 0;
end
for Nr_ULA_index=1:Nr_ULA
for Nr_UCA_index=1:Nr_UCA
UCyA_elements_nor(1, Nr_ULA_index, Nr_UCA_index) = R_nor * sin((Nr_UCA_index-1)*(2*pi/Nr_UCA)) ; % x
UCyA_elements_nor(2, Nr_ULA_index, Nr_UCA_index) = R_nor * cos((Nr_UCA_index-1)*(2*pi/Nr_UCA)) ; % y
UCyA_elements_nor(3, Nr_ULA_index, Nr_UCA_index) = (Nr_ULA_index-1) * d_ULA_nor; % z
end
end
%% Signal Generation
% we use the Zadoff-Chu sequences
U = 1:2:100;
ZC_p = [];
for u = 1 : Nt
for k = 1 : K
ZC(k,u) = sqrt(Pxp) * exp( ( -1i * pi * U(u) * (k-1)^2 ) / K );
end
ZC_p = [ZC_p; ZC(:,u)];
end
X = [];
for ii = 1 : Nt
X = [X diag(ZC(:,ii))*FL];
end
gamma_f = {};
AOA_f = {};
ZOA_f = {};
CRB_SB_ULA_f = [];
CRB_SB_ULA_spec_f = [];
CRB_SB_UCyA_f = [];
CRB_SB_UCyA_spec_f = [];
for t = 1:loop
tic
fprintf('Working at: %d iters.\n', t);
%% Channel generation
gamma = zeros(d_H, Nt); % complex gain
ZOA = zeros(d_H, Nt); % ffset ZOA ray
AOA = zeros(d_H, Nt); % offset AOA ray
for nt = 1 : Nt
gamma(:, nt) = sqrt(0.5)*(normrnd(0,1,1,d_H) + 1j*normrnd(0,1,1,d_H));
while min(abs(gamma(:, nt)))<0.6
gamma(:, nt) = sqrt(0.5)*(normrnd(0,1,1,d_H) + 1j*normrnd(0,1,1,d_H));
end
AOA(:, nt) = random('unif',0,1,1,d_H)*pi-pi/2;
dist=pdist(vec(AOA(:, nt)),'euclid');
while min(dist) < pi/18
AOA(:, nt)=random('unif',0,1,1,d_H)*pi-pi/2;
dist=pdist(vec(AOA(:, nt)),'euclid');
end
ZOA(:, nt) = random('unif',0,1,1,d_H)*pi-pi/2;
dist=pdist(vec(ZOA(:, nt)),'euclid');
while min(dist) < pi/18
ZOA(:, nt)=random('unif',0,1,1,d_H)*pi-pi/2;
dist=pdist(vec(ZOA(:, nt)),'euclid');
end
end
gamma_f{t} = gamma;
ZOA_f{t} = ZOA;
AOA_f{t} = AOA;
%% Derivative
dev_h_gamma_ULA = [];
dev_h_gamma_H_ULA = [];
dev_h_ZOA_ULA = [];
dev_h_AOA_ULA = [];
dev_h_gamma_UCyA = [];
dev_h_gamma_H_UCyA = [];
dev_h_ZOA_UCyA = [];
dev_h_AOA_UCyA = [];
for Nr_index=1:Nr
Br_gamma = SEMI_spec_chan_derive_gamma( gamma, AOA, ZOA, ULA_elements_nor(:, 1, Nr_index), d_H, Nt);
dev_h_gamma_ULA = [dev_h_gamma_ULA; transpose(Br_gamma)];
Br_gamma_H = SEMI_spec_chan_derive_gamma_H( gamma, AOA, ZOA, ULA_elements_nor(:, 1, Nr_index), d_H, Nt);
dev_h_gamma_H_ULA = [dev_h_gamma_H_ULA; transpose(Br_gamma_H)];
Br_angle_ZOA = SEMI_spec_chan_derive_ZOA( gamma, AOA, ZOA, ULA_elements_nor(:, 1, Nr_index), d_H, Nt);
dev_h_ZOA_ULA = [dev_h_ZOA_ULA; transpose(Br_angle_ZOA)];
Br_angle_AOA = SEMI_spec_chan_derive_AOA( gamma, AOA, ZOA, ULA_elements_nor(:, 1, Nr_index), d_H, Nt);
dev_h_AOA_ULA = [dev_h_AOA_ULA; transpose(Br_angle_AOA)];
end
for Nr_ULA_index=1:Nr_ULA
for Nr_UCA_index=1:Nr_UCA
Br_gamma = SEMI_spec_chan_derive_gamma( gamma, AOA, ZOA, UCyA_elements_nor(:, Nr_ULA_index, Nr_UCA_index), d_H, Nt);
dev_h_gamma_UCyA = [dev_h_gamma_UCyA; transpose(Br_gamma)];
Br_gamma_H = SEMI_spec_chan_derive_gamma_H( gamma, AOA, ZOA, UCyA_elements_nor(:, Nr_ULA_index, Nr_UCA_index), d_H, Nt);
dev_h_gamma_H_UCyA = [dev_h_gamma_H_UCyA; transpose(Br_gamma_H)];
Br_angle_ZOA = SEMI_spec_chan_derive_ZOA( gamma, AOA, ZOA, UCyA_elements_nor(:, Nr_ULA_index, Nr_UCA_index), d_H, Nt);
dev_h_ZOA_UCyA = [dev_h_ZOA_UCyA; transpose(Br_angle_ZOA)];
Br_angle_AOA = SEMI_spec_chan_derive_AOA( gamma, AOA, ZOA, UCyA_elements_nor(:, Nr_ULA_index, Nr_UCA_index), d_H, Nt);
dev_h_AOA_UCyA = [dev_h_AOA_UCyA; transpose(Br_angle_AOA)];
end
end
%% Derivation of $h$ w.r.t. (bar{h},tau,alpha) %% channel specular parameters
G_ULA = [dev_h_gamma_ULA, dev_h_gamma_H_ULA, dev_h_ZOA_ULA, dev_h_AOA_ULA];
G_UCyA = [dev_h_gamma_UCyA, dev_h_gamma_H_UCyA, dev_h_ZOA_UCyA, dev_h_AOA_UCyA];
%% Partial lambda
[H_ULA, h_true_ULA, LAMBDA_ULA, partial_LAMBDA_ULA] = partial_LAMBDA_ULA_f ( gamma, AOA, ZOA, ULA_elements_nor, Nt, Nr, d_H, FL);
[H_UCyA, h_true_UCyA, LAMBDA_UCyA, partial_LAMBDA_UCyA] = partial_LAMBDA_UCyA_f( gamma, AOA, ZOA, UCyA_elements_nor, Nt, Nr_UCA, Nr_ULA, d_H, FL );
%% CRB
N_total = K;
N_pilot = K/4;
N_data = N_total-N_pilot;
%============================================
for snr_i = 1 : length(SNR)
%% Only Pilot
sigmav2 = 10^(-SNR(snr_i)/10);
X_nga = kron(eye(Nr),X);
Iop = X_nga' * X_nga / sigmav2;
%% SemiBlind
I_D = I_D_f{snr_i};
I_D = triu(repmat(I_D, Nr*Nt, Nr*Nt));
%============================================
%Semiblind Normal
I_SB = N_data*I_D+N_pilot*Iop;
CRB_SB_i = pinv(I_SB);
CRB_SB_ULA(snr_i) = abs(trace(CRB_SB_i));
%============================================
%Semiblind Specular
I_SB_spec = G_ULA*G_ULA'*I_SB*G_ULA*G_ULA';
CRB_SB_spec_i = pinv(I_SB_spec);
CRB_SB_ULA_spec(snr_i) = abs(trace(CRB_SB_spec_i));
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类