首页 > 其他分享 >毫米波雷达呼吸心跳检测仿真演示+数据集(7个G)

毫米波雷达呼吸心跳检测仿真演示+数据集(7个G)

时间:2023-05-04 17:36:21浏览次数:49  
标签:仿真 LVDS 演示 numChirps %% fft numADCSamples 毫米波 data


公众号【调皮连续波】

毫米波雷达呼吸心跳检测仿真演示+数据集(7个G)_数据

【正文】


编辑 |  调皮哥的小助理        审核 | 调皮哥

1、仿真

闲来无事编程序,正好把之前上学时后留下的这个毫米波雷达呼吸心跳检测动态波形绘制拿出来完善一下。

原文的链接是:干货  |  IWR1642EVM呼吸心跳原始数据采集与仿真分析(含MATLAB代码和数据),不过代码已经更新了,旧版的不能用了。

感觉效果还可以,先上视频:


整体来说,这个前面的程序改动不大,就是修改了一些之前感觉不对的参数,然后对数据解析部分做了修改,目的是适应当前的数据集。

代码如下图所示:

毫米波雷达呼吸心跳检测仿真演示+数据集(7个G)_数据集_02

部分代码片段如下图所示:

%% 本程序仅供学习交流使用
%% 微信公众号:调皮连续波
%% 知乎:调皮连续波
%% 采用平台 IWR1642EVM+DCA1000
%% 时间:2023年03月
%% 功能:单人呼吸心跳原始数据采集与MATLAB仿真
%% ========================================================================
clc;
clear all;
close all;
%% =========================================================================
%% 读取数据部分
numADCSamples = 200; % number of ADC samples per chirp
numADCBits = 16;     % number of ADC bits per sample
numRX = 4;           % number of receivers
numLanes = 2;        % do not change. number of lanes is always 2
isReal = 0;          % set to 1 if real only data, 0 if complex data0
chirpLoop = 2;


%% 雷达参数设置
Fs=4e6;             %ADC采样率 见配置说明
c=3*1e8;            %光速
ts=numADCSamples/Fs;%ADC采样时间
slope=70e12;        %调频斜率 
B_valid =ts*slope;  %有效带宽
detaR=c/(2*B_valid);%距离分辨率


addpath('.\data\man');
addpath('.\data\woman');


%% 读取Bin文件
Filename = 'woman_0.5m_1min_1.bin';  %文件名 用户需要按照自己的文件名修改
fid = fopen(Filename,'r');
adcDataRow = fread(fid, 'int16');
if numADCBits ~= 16
    l_max = 2^(numADCBits-1)-1;
    adcDataRow(adcDataRow > l_max) = adcDataRow(adcDataRow > l_max) - 2^numADCBits;
end
fclose(fid);


fileSize = size(adcDataRow, 1);
PRTnum = fix(fileSize/(numADCSamples*numRX));
fileSize = PRTnum * numADCSamples*numRX;
adcData = adcDataRow(1:fileSize);
% real data reshape, filesize = numADCSamples*numChirps
if isReal
    numChirps = fileSize/numADCSamples/numRX;
    LVDS = zeros(1, fileSize);
    %create column for each chirp
    LVDS = reshape(adcData, numADCSamples*numRX, numChirps);
    %each row is data from one chirp
    LVDS = LVDS.';
else
    numChirps = fileSize/2/numADCSamples/numRX;     %含有实部虚部除以2
    LVDS = zeros(1, fileSize/2);
    %combine real and imaginary part into complex data
    %read in file: 2I is followed by 2Q
    counter = 1;
    for i=1:4:fileSize-1
        LVDS(1,counter) = adcData(i) + sqrt(-1)*adcData(i+2);
        LVDS(1,counter+1) = adcData(i+1)+sqrt(-1)*adcData(i+3); counter = counter + 2;
    end
    % create column for each chirp
    LVDS = reshape(LVDS, numADCSamples*numRX, numChirps);
    %each row is data from one chirp
    LVDS = LVDS.';
end


%% 重组数据
adcData = zeros(numRX,numChirps*numADCSamples);
for row = 1:numRX
    for i = 1:numChirps
        adcData(row, (i-1)*numADCSamples+1:i*numADCSamples) = LVDS(i, (row-1)*numADCSamples+1:row*numADCSamples);
    end
end


retVal= reshape(adcData(1, :), numADCSamples, numChirps); %取第二个接收天线数据,数据存储方式为一个chirp一列


process_adc = retVal(:,1:4:end);


  
%% 距离维FFT(1个chirp)
% figure;
% plot((1:numADCSamples)*detaR,db(abs(fft(process_adc(:,1)))));
% xlabel('距离(m)');
% ylabel('幅度(dB)');
% title('距离维FFT(1个chirp)');
% figure;
% plot(db(abs(fft(process_adc(:,1)))))


%% 相位解缠绕部分
RangFFT = 512;
fft_data_last = zeros(1,RangFFT); 
range_max = 0;
adcdata = process_adc;
numChirps = size(adcdata, 2);


%% 距离维FFT
fft_data = fft(adcdata,RangFFT); 
fft_data = fft_data.';
fft_data_abs = abs(fft_data);
fft_data_abs(:,1:4)=0; %去除直流分量
real_data = real(fft_data);
imag_data = imag(fft_data);




for i = 1:numChirps
    for j = 1:RangFFT  %对每一个距离点取相位 extract phase
        angle_fft(i,j) = atan2(imag_data(i, j),real_data(i, j));
    end
end


% Range-bin tracking 找出能量最大的点,即人体的位置  
for j = 1:RangFFT
    for i = 1:numChirps % 进行非相干积累
        fft_data_last(j) = fft_data_last(j) + fft_data_abs(i,j);
    end
    if ( fft_data_last(j) > range_max)
        range_max = fft_data_last(j);
        max_num = j;
    end
end 


%完整代码需单独联系调皮哥。

2、数据集

之前采集了一大包1642的数据集,大小总共有160组,文件大小7个G,有性别区分、距离远近和时间区分。下图所示仅为一小部分。

毫米波雷达呼吸心跳检测仿真演示+数据集(7个G)_数据集_03

上述代码和数据集是完全配合使用的,需要数据集可以找调皮哥。


标签:仿真,LVDS,演示,numChirps,%%,fft,numADCSamples,毫米波,data
From: https://blog.51cto.com/u_12413309/6243651

相关文章

  • 无人系统的环境感知技术 | 毫米波雷达技术(二)
    公众号【调皮连续波】,续接上文:无人系统的环境感知技术|毫米波雷达技术(一)【正文】OS-CFAR算法模型:参考单元根据大小对2L个x值进行排序,排序后的序列如下: 排序后,选择第m个样本  作为参考单元2L个数内的杂波背景。阈值    是在     。在一般情况下,m 可以取参考单元......
  • 4D毫米波多模成像雷达
    公众号【调皮连续波】【正文】一直以来,我们大多数人包括我自己所研究的雷达都是单芯片或单芯片级联雷达,而对于建立在这两种硬件结构上的雷达模式也是单一的模式,仅能实现一些特定场景的需求,比如车载近距雷达、中距雷达或者远距雷达,又比如呼吸心跳检测雷达、室内人员检测或跌倒检测雷......
  • 从4D到成像 | 4D毫米波雷达技术的发展
    公众号【调皮连续波】【正文】1.毫米波雷达的发展毫米波雷达从德国大陆集团在1999年研发的第一代雷达开始,到现在已经是第六代了,而且视野开阔且具备前瞻性的雷达企业也在布局第七代毫米波雷达的研发工作。二十多年来,毫米波雷达的发展主要在如下三个方面取得进步:(1)体积逐渐变小;(2)半导......
  • 4D毫米波雷达技术发展趋势分析
    公众号【调皮连续波】【正文】1、4D毫米波雷达产品特征及应用前景分析1.1 4D毫米波雷达的功能与特征4D毫米波雷达在3D毫米波雷达检测目标3D信息(雷达与目标的距离、相对径向速度、水平角度的数据)的基础上,增加对目标高度(垂直角度)的估计,相比于3D毫米波雷达具有天线数量多且密度高......
  • 特斯拉双级联毫米波雷达解析
    公众号【调皮连续波】【正文】1、芯片屏蔽罩(1)屏蔽罩的作用是什么?屏蔽电磁干扰,芯片对天线的电磁干扰,天线对芯片的电磁干扰。但谁是主要,谁是次要的呢?我个人认为天线对芯片的干扰是主要的。(2)屏蔽罩上6个小孔的作用是什么?网友回答说屏蔽罩上的小孔,一方面是为了工作时内部器件的散热,开孔......
  • python-Gradio 机器学习演示库
    python-GradioGradio是一个开源的Python库,用于构建机器学习和数据科学演示应用。有了Gradio,你可以围绕你的机器学习模型或数据科学工作流程快速创建一个简单漂亮的用户界面。Gradio适用于以下情况:为客户/合作者/用户/学生演示你的机器学习模型。通过自动共享链接快速部署你的......
  • 基于EKF扩展卡尔曼滤波算法的永磁同步电机PMSM无传感器矢量控制Simulink仿真模型。
    基于EKF扩展卡尔曼滤波算法的永磁同步电机PMSM无传感器矢量控制Simulink仿真模型。1.依据PMSM的数学模型搭建电机模型2.双闭环dq解耦控制,转速外环,转矩内环3.EKF算法对电机的转子电角度和机械转速进行估算ID:2465668485383219......
  • 永磁同步电机的MRAS模型参考自适应控制算法,matlab,仿真模型。
    永磁同步电机的MRAS模型参考自适应控制算法,matlab,仿真模型。ID:4365667815721072......
  • 基于卡尔曼滤波的永磁同步电机无传感器矢量控制,matlab,仿真模型。
    基于卡尔曼滤波的永磁同步电机无传感器矢量控制,matlab,仿真模型。ID:6765667935045527......
  • 异步电机的无传感器矢量控制,matlab,仿真模型,控制算法为MRAS模型参考自适应。
    异步电机的无传感器矢量控制,matlab,仿真模型,控制算法为MRAS模型参考自适应。ID:44100668158918155......