雷达回波的多普勒谱提取

  之前写过一个基于FMCW雷达的目标轨迹的提取,感觉看的人还是蛮多的,这周准备写一下关于多普勒谱提取的相关内容。主要内容为英国格拉斯哥大学公开的一个人体行为的数据集。数据集以及示例代码可以访问下方链接,如果访问不了可以下载如下压缩包获取。

  • 官网地址:https://researchdata.gla.ac.uk/848/
  • 压缩包:https://pan.baidu.com/s/1rW0OfuUrYc7kC9NZ6HHClQ
    提取码:kw9d

  当然,官网也给出了提取多普勒谱的示例代码,下面将结合代码进行分析,最终构建图片数据集用于后续的识别分类。

数据集介绍

数据集采集自C波段(5.8GHz)的FMCW雷达,带宽为400MHz,调频周期为1ms。
人体行为的种类包括:行走坐下起立俯身捡东西喝水跌倒
数据集构建的思路包括:不同行为、左/右手、男/女性、身高/年龄、重复次数。

作者给出了不同数据获取的详细信息,但是吧,我觉得雷达信号对这些信息敏感度可能不是很高
同一个动作不同的人、年龄、身高甚至不同的手做差别有很大吗,这应该属于雷达中的微动领域吧

这个数据集有七个文件夹

代表作者在不同时间点采集的数据
数据集的数据不是特别多,本文主要过一下特征提取过程

特征提取

  流程比较简单,主要包括距离压缩MTISTFT。下面以一个行走的数据举例。

  • 距离压缩
      Dechirp体制雷达的距离压缩如上篇轨迹提取的文章,采用加窗FFT的方式,结果如下图所示
      中间有个红线,不是特别清楚原因,可能是因为是三角波的缘故?作者只选取了底下比较强的一半数据进行处理。

  • MTI
      上一篇文章中MTI使用了两脉冲对消,对于该数据集的处理,原作者使用了一个巴特沃斯的高通滤波器,下面是处理后的结果前后对比

  • STFT
      通过短时傅里叶变换提取目标的多普勒信息,由于目标大致运动范围在10到30个距离单元之间,所以STFT采用这一区间内的数据进行。短时傅里叶变换的示意图如下

      可以看出,对一个距离bin进行多次STFT后得到一个横向为时间,纵向为多普勒信息的多普勒谱。对于多个距离bin,采用非相干叠加的方式得到最终的多普勒谱图如下:

下面是上面三个步骤的代码:

%% Data reading part
clear
close all
[filename,pathname] = uigetfile('*.dat');
file=[pathname,filename]; %%网站下载的程序没有这句话,所以源程序不可以选择任意文件夹下的图片
fileID = fopen(file, 'r');
dataArray = textscan(fileID, '%f');
fclose(fileID);
radarData = dataArray{1};
clearvars fileID dataArray ans;
fc = radarData(1); % Center frequency
Tsweep = radarData(2); % Sweep time in ms
Tsweep=Tsweep/1000; %then in sec
NTS = radarData(3); % Number of time samples per sweep
Bw = radarData(4); % FMCW Bandwidth. For FSK, it is frequency step;
% For CW, it is 0.
Data = radarData(5:end); % raw data in I+j*Q format
fs=NTS/Tsweep; % sampling frequency ADC
record_length=length(Data)/NTS*Tsweep; % length of recording in s
nc=record_length/Tsweep; % number of chirps
%% Reshape data into chirps and plot Range-Time
Data_time=reshape(Data, [NTS nc]);
win = ones(NTS,size(Data_time,2));
%Part taken from Ancortek code for FFT and IIR filtering
tmp = fftshift(fft(Data_time.*win),1);
Data_range=zeros(size(tmp,1)/2,size(tmp,2)); %% !!原始代码中无此句,此句说明见本文最后部分
Data_range(1:NTS/2,:) = tmp(NTS/2+1:NTS,:);
ns = oddnumber(size(Data_range,2))-1;
Data_range_MTI = zeros(size(Data_range,1),ns);
[b,a] = butter(4, 0.0075, 'high');
[h, f1] = freqz(b, a, ns);
for k=1:size(Data_range,1)Data_range_MTI(k,1:ns) = filter(b,a,Data_range(k,1:ns));
end
freq =(0:ns-1)*fs/(2*ns);
range_axis=(freq*3e8*Tsweep)/(2*Bw);
Data_range_MTI=Data_range_MTI(2:size(Data_range_MTI,1),:);
Data_range=Data_range(2:size(Data_range,1),:);
%% Spectrogram processing for 2nd FFT to get Doppler
% This selects the range bins where we want to calculate the spectrogram
bin_indl = 10;
bin_indu = 30;
MD.PRF=1/Tsweep;
MD.TimeWindowLength = 200;
MD.OverlapFactor = 0.95;
MD.OverlapLength = round(MD.TimeWindowLength*MD.OverlapFactor);
MD.Pad_Factor = 4;
MD.FFTPoints = MD.Pad_Factor*MD.TimeWindowLength;
MD.DopplerBin=MD.PRF/(MD.FFTPoints);
MD.DopplerAxis=-MD.PRF/2:MD.DopplerBin:MD.PRF/2-MD.DopplerBin;
MD.WholeDuration=size(Data_range_MTI,2)/MD.PRF;
MD.NumSegments=floor((size(Data_range_MTI,2)-MD.TimeWindowLength)/floor(MD.TimeWindowLength*(1-MD.OverlapFactor)));Data_spec_MTI2=0;
Data_spec2=0;
for RBin=bin_indl:1:bin_induData_MTI_temp = fftshift(spectrogram(Data_range_MTI(RBin,:),MD.TimeWindowLength,MD.OverlapLength,MD.FFTPoints),1);Data_spec_MTI2=Data_spec_MTI2+abs(Data_MTI_temp);                                Data_temp = fftshift(spectrogram(Data_range(RBin,:),MD.TimeWindowLength,MD.OverlapLength,MD.FFTPoints),1);Data_spec2=Data_spec2+abs(Data_temp);
end
MD.TimeAxis=linspace(0,MD.WholeDuration,size(Data_spec_MTI2,2));Data_spec_MTI2=flipud(Data_spec_MTI2);figure
imagesc(MD.TimeAxis,MD.DopplerAxis.*3e8/2/5.8e9,20*log10(abs(Data_spec_MTI2))); colormap('jet'); axis xy
ylim([-6 6]); colorbar
colormap; %xlim([1 9])
clim = get(gca,'CLim');
set(gca, 'CLim', clim(2)+[-40,0]);
xlabel('Time[s]', 'FontSize',16);
ylabel('Velocity [m/s]','FontSize',16)
set(gca, 'FontSize',16)
title(filename)

你以为本文到这里就已经完了吗???
  哈哈哈哈,怎么可能,我们的目的是获得这个多普勒图的数据集用来后续的识别分类,所以还有两个实际的问题:

图片的保存:保存上图经过色彩风格调整后的伪彩色图片而不是黑白图片,因为黑白图片看起来效果不是很好。
#黑白图片可以使用imshow显示,不过需要归一化;保存使用imwrite
批量化处理:原始的数据集是dat格式的数据而并非图片,所以需要批量生成图片

Solvation

1. 图片保存
  如果想保存图窗显示的伪彩色图,需要做的操作如下:

 去除坐标轴,这没啥好解释的去除白边,一般保存图窗都会带白边,这是我们不希望看到的调整尺寸,最后保存的图片尺寸会不一样,只能找比例关系再调整一下了

代码如下:

imagesc(out);
colormap('jet');
clim = get(gca,'CLim');
set(gca, 'CLim', clim(2)+[-40,0]);
[r,c]=size(out);
set(gca,'xtick',[],'ytick',[]);%去除坐标轴
set(gca,'LooseInset', get(gca,'TightInset'))    %去除白边
set(gcf,'innerposition',[0 0 c*16/25 r*16/25])  %调整尺寸
savepath=['./img/1/',filename(1:end-4),'.jpg']; %保存地址根据文件名变化
saveas(gca,savepath,'jpg')%图窗保存

2.批量化处理
  直接读取文件夹到一个结构体,再使用for循环遍历文件夹体中的文件,然后保存的图片根据文件名变化就可以实现批量化处理了。部分关键代码如下:

Files=dir(fullfile('.\path\*.dat'));% path是包含dat文件的目录名
lengthFiles=length(Files);
for i=1:lengthFilesfilename=Files(i).name;pathname=Files(i).folder;file=[pathname,'/',filename];fileID = fopen(file, 'r');dataArray = textscan(fileID, '%f');fclose(fileID);radarData = dataArray{1};---savepath=['./img/1/',filename(1:end-4),'.jpg']; %保存地址根据文件名变化saveas(gca,savepath,'jpg')%图窗保存
end

  #这里补充一个小细节: 由于原始代码中没有对一个矩阵初始化,所以在批量化处理时由于数据集中有的数据尺寸不一样会导致出错。所以添加代码段中的 “ !!”部分。

  最后展示得到的部分图片数据集结果:

  OK,本文的内容就到这里了。主要是基于原作者提供代码上进行的一些小tricks,供大家参考哇!!!
  最后的图片数据集我就不给出了,有需要的跑一下代码就可以了。

【FMCW雷达人体行为识别——多普勒谱提取】相关推荐

  1. 人体行为识别特征点提取 综述很全面

    转自:http://www.cnblogs.com/tornadomeet/archive/2012/06/22/2558548.html 行为识别特征提取综述   摘要   人体行为识别目前处在动作 ...

  2. python人体行为识别代码_人体行为识别(骨架提取),搭建openpose环境,VS2019(python3.7)+openpose...

    这几天开始接触人体行为识别,经过多方对比后,选择了现在最热的人体骨架提取开源库,openpose. 下面就不多说了,直接开始openpose在win10下的配置: 需求如下: 1. VS2019    ...

  3. 车载FMCW雷达的距离-多普勒检测基本原理

    本文选自论文:Range Doppler Detection for automotive FMCW Radars 论文作者:Volker Winkler DICE GmbH & Co KG ...

  4. FMCW雷达距离多普勒(RDM)处理方法中距离分辨率和速度分辨率的推导

    目录 距离多普勒(Range-Dopple Matrix)处理方法 快时间维度处理(Range-FFT) 慢时间维度处理(Doppler-FFT) RDM中距离分辨率和速度分辨率推导方法 仿真程序代码 ...

  5. fmcw matlab仿真,干货 | 利用MATLAB实现FMCW雷达的距离多普勒估计

    利用Chirp序列的FMCW(Frequency Modulated Continuous Wave)毫米波雷达在汽车防撞等领域得到了广泛的应用.这篇文章基于Matlab对该Chirp序列的Range ...

  6. 科研笔记-无线感知第1篇(基于WIFI CSI进行人体行为识别调查)

    基于WIFI CSI进行人体行为识别调查 目录 基于WIFI CSI进行人体行为识别调查 人体姿态识别研究现状: 无线感知相关知识点: WIFI系统的局限性: 基于 Wi-Fi CSI 的行为识别: ...

  7. FMCW雷达在汽车自适应巡航中的应用(学习摘自MathWorks笔记)

    FMCW雷达更小,功耗更低,通常用于汽车自适应巡航系统(ACC),这种雷达通常占据77 GHz左右的频段.雷达系统不断估计安装在其上的车辆与其前方车辆之间的距离,并在两者变得太近时向驾驶员发出警报.下 ...

  8. 微波雷达人体感应器,即时存在感知方案,智能家居人体感应交互

    人体微波感应器在智能家居的人体感应应用中具有明显的优势. 一是人体静止时仍然敏感:二是环境灵活性高,感应效果不受温度.亮度.湿度.光波动等周围环境的影响. 雷达人体微波感应器具有更广泛的角度,可以实现 ...

  9. 毫米波雷达人体存在感应,人体精准感知应用

    随着科技水平的不断发展,人们的经济水平不断提高,全屋智能成为了许多当代人的向往,但随着用户度全屋智能体验的需求逐渐多样化,简单的人体存在感应已经无法满足大部分消费者的需求. 毫米波雷达人体存在感应是一 ...

最新文章

  1. 怎么把本地项目和远程git仓库相连通
  2. 如何封装Spring bean
  3. ANT安装与测试和简明教程
  4. C语言中一个指针传递问题的分析
  5. 算法 Tricks(六)— if 条件分支的简化
  6. android动画之从源码角度分析动画原理
  7. scsi设备扫描特征分析
  8. 让对应背景随着轮播的图片变化而改变
  9. js中求2个数的最大值的几种方法
  10. NI ELVIS III模拟电子电路课程实验解决方案
  11. Android文件MD5/SHA1/SHA256校验
  12. 另辟蹊径,挑战网络战争
  13. Hive架构及相关函数
  14. Domain Adaption3
  15. 腾讯笔试算法题-开锁
  16. 计算机房图怎么画,任务6掌握机房平面图的绘制方法.ppt
  17. emmc linux 识别分区_Linux和Uboot下eMMC boot分区读写
  18. 查看并 redis慢日志
  19. 用c语言编写智能停车系统,浅谈:智能停车系统设计是什么
  20. 飞塔30E防火墙忘记密码,重置密码

热门文章

  1. 利用MS11_003 IE漏洞攻击win7主机
  2. 经典漏洞MS11_003漏洞复现(windows7IE溢出漏洞)
  3. 小程序webview不铺满_感恩宠粉季小程序优惠多多,一元秒杀不容错过!
  4. 在win2003中安装 Mustek 1200 CU 扫描仪
  5. 解决前端页面中文乱码问题
  6. Seata分布式事务XA与AT全面解析
  7. 自动化专业课和计算机技术联系,自动化专业课程有哪些
  8. 软磁材料交流测量装置TD81系列软磁交流测试装置系统
  9. onmouseenter和onmouseover
  10. 2022数学建模国赛B题和C题高质量论文代码数据