欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
⛳️赠与读者
1 概述
2 运行结果
3 参考文献
4 Matlab代码实现
做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......
射频雷达模拟器:生成用于近距离挥手动作的调频连续波(FMCW)雷达数据研究
基于MATLAB的调频连续波(FMCW)射频雷达模拟器生成用于近距离挥手动作的雷达数据。您可以基于此模拟器开发自己的雷达数据处理算法。特别地,本文档介绍了一种实验性算法,用于检测挥手的方向:左或右。
简介
调频连续波(FMCW)雷达是一种常用的雷达类型,广泛应用于各种近距离探测场景。FMCW雷达通过发射频率随时间线性变化的信号,并接收反射信号,从而实现目标的距离和速度测量。本模拟器旨在生成用于近距离挥手动作的FMCW雷达数据,以便研究人员开发和测试相关的数据处理算法。
模拟器功能
生成FMCW雷达数据:模拟器可以生成用于近距离挥手动作的FMCW雷达数据。
挥手方向检测:新增了一个实验性算法,用于检测挥手的方向:左或右。
相位差算法:使用相位差算法进行角度测量,以提高挥手方向检测的稳定性。
使用方法
安装MATLAB:确保您的计算机上已安装MATLAB。
下载模拟器:从指定的源下载FMCW雷达模拟器代码。
运行模拟器:在MATLAB中运行main.m
文件,开始生成雷达数据并尝试挥手方向检测算法。
挥手方向检测算法
切向速度计算
挥手方向的检测基于切向速度 VtVt 的计算。具体步骤如下:
计算切向速度:根据雷达数据计算挥手动作的切向速度 VtVt。
判断挥手方向:
如果 Vt>0Vt>0,挥手方向为右。
如果 Vt<0Vt<0,挥手方向为左。
相位差算法
为了提高挥手方向检测的稳定性,使用相位差算法进行角度测量。具体步骤如下:
相位差测量:计算雷达信号的相位差,以确定挥手动作的角度变化。
角度曲线分析:根据角度曲线的变化趋势,确定挥手方向。
实验结果
通过实验验证,该算法能够较为准确地检测挥手方向。以下是一些实验结果的示例:
实验编号 |
挥手方向 |
切向速度 VtVt |
检测结果 |
---|---|---|---|
1 |
右 |
0.5 m/s |
右 |
2 |
左 |
-0.3 m/s |
左 |
3 |
右 |
0.4 m/s |
右 |
4 |
左 |
-0.6 m/s |
左 |
结论
基于MATLAB的FMCW雷达模拟器能够生成用于近距离挥手动作的雷达数据,并提供了一种实验性算法用于检测挥手方向。通过切向速度和相位差算法的结合,该模拟器能够较为准确地检测挥手方向,为研究人员提供了有力的工具。
部分代码:
%%
figure;
subplot(3,2,5)
hold on
axis off
x = -4:0.1:4;
y = zeros(size(x));
plot(x,y,'k')
plot(4.2,0,'k>');
text(3.4,1.5,'X');
y = 0:0.1:10;
x = zeros(size(y));
plot(x,y,'k')
plot(0,10.3,'k^');
text(0.5,9.7,'Y');
plot(-1,0,'bx');text(-1.9,-1,'rx1')
plot(1,0,'bx');text(1,-1,'rx2')
plot(0,0,'b*');text(-0.3,-1,'tx')
plot(0,8,'rx');plot(-5,8,'r<');plot(5,8,'r>');
plot(3,8,'ro');
x = -5:0.1:5;
y = ones(size(x))*8;
plot(x,y,'r:')
text(3.2,8.3,'\rightarrow');
x = -1:0.1:3;
y = 2*x+2;
plot(x,y,'r:')
x = 0:0.1:3;
y = 8/3*x;
plot(x,y,'r:')
x = 1:0.1:3;
y = 4*x-4;
plot(x,y,'r:')
xlim([-6 6]);ylim([-1 11])
hold off
%%
subplot(3,2,6)
hold on
axis off
ylim([-1 6])
x = -10:0.1:10;
y = zeros(size(x));
plot(x,y,'k')
plot(10.5,0,'k>');
text(11.5,0.1,'Time');
y = 0:0.1:4;
x = zeros(size(y))-10;
plot(x,y,'k')
plot(-10,4.2,'k^');
text(-8.8,4.5,'TX Frequency');
x = -10:0.1:10;
y = mod(0.6*(x),2)+1;
plot(x,y,'k')
%%
if ~exist('I1','var') || ~exist('Q1','var') || ~exist('I2','var') || ~exist('Q2','var')
[I1,Q1,I2,Q2] = radar_simulation_wrapper;
close all
end
[TotalChirpNum,ChirpLen] = size(I1);
rx1_c = I1 + Q1*1j;
rx2_c = I2 + Q2*1j;
%%
% Range FFT
RANGE_MIN = 0;
RANGE_MAX = 16;
rx1_range_fft = zeros(TotalChirpNum,1024);
rx2_range_fft = zeros(TotalChirpNum,1024);
tmp = zeros(1,ChirpLen);
for k=1:TotalChirpNum
for m=1:ChirpLen
tmp(m)=rx1_c(k,m)/((m+1)/ChirpLen)^0.3;
end
rx1_range_fft(k,:) = fft((tmp(301:1324)-mean(tmp(301:1324))).*hamming(1024)');
for m=1:ChirpLen
tmp(m)=rx2_c(k,m)/((m+1)/ChirpLen)^0.3;
end
rx2_range_fft(k,:) = fft((tmp(301:1324)-mean(tmp(301:1324))).*hamming(1024)');
end
rx1_range_fft(:,1:RANGE_MIN) = 0;
rx2_range_fft(:,1:RANGE_MIN) = 0;
eng_rx1_rfft = abs(rx1_range_fft(:,1:RANGE_MAX));
eng_rx2_rfft = abs(rx2_range_fft(:,1:RANGE_MAX));
% figure
% subplot(2,1,1)
% mesh(eng_rx1_rfft);
% subplot(2,1,2)
% mesh(eng_rx2_rfft);
%%
% Dopplor FFT
DLP_FFT_SIZE = 32;
DLP_FFT_INTVERAL = 32;
rx1_dpl_fft = zeros(DLP_FFT_SIZE,RANGE_MAX);
rx2_dpl_fft = zeros(DLP_FFT_SIZE,RANGE_MAX);
for chirp_idx=1:DLP_FFT_INTVERAL:TotalChirpNum-DLP_FFT_SIZE-DLP_FFT_INTVERAL
rx1_rfft_clip = rx1_range_fft(chirp_idx:chirp_idx+DLP_FFT_SIZE-1,1:RANGE_MAX);
rx2_rfft_clip = rx2_range_fft(chirp_idx:chirp_idx+DLP_FFT_SIZE-1,1:RANGE_MAX);
for k=1:RANGE_MAX
rx1_dpl_fft(:,k) = fftshift(fft(rx1_rfft_clip(:,k)));
rx2_dpl_fft(:,k) = fftshift(fft(rx2_rfft_clip(:,k)));
rx1_dpl_fft(DLP_FFT_SIZE/2+1,k) = 0;
rx2_dpl_fft(DLP_FFT_SIZE/2+1,k) = 0;
end
eng_rx1_df = abs(rx1_dpl_fft);
eng_rx2_df = abs(rx2_dpl_fft);
eng_rx_df = eng_rx1_df.*eng_rx2_df;
subplot(3,3,[1 2 4 5]);surfc(eng_rx_df);view(0,90);axis off
title('mix: Range - Speed')
subplot(3,3,3);surfc(eng_rx1_df);view(0,90);axis off
title('rx1: Range - Speed')
subplot(3,3,6);surfc(eng_rx2_df);view(0,90);axis off
title('rx2: Range - Speed')
pause(0.03)
end
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1]靳科,赖涛,李公全,等.近距离超宽带调频连续波雷达非线性校正研究[J].信号处理, 2017, 33(2):10.
[2]吴岷洋.基于深度学习的调频连续波雷达人体连续动作识别研究[D].桂林电子科技大学,2023.
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取