TI毫米波雷达人体生命体征(呼吸、心跳)信号提取算法(IWR6843ISK+DCA1000EVM)

目录

一、引言

二、毫米波雷达检测呼吸、心跳基本原理

1.TI官方开发资料:

2.博主“调皮连续波”开源资料以及原理讲解:

三、 毫米波雷达提取呼吸、心跳信号Matlab算法处理

1.硬件平台: IWR6843ISKEVM+DCA1000EVM

2.mmavestudio参数设置: 

配置说明:

算法流程简介:

(1) 预处理:

(2)粗略的人体定位:距离维FFT

(3)消除静态干扰算法【因为后面用了滑动平均去噪,故这里不做静态干扰算法处理】

 (4)经典算法提取相位:相位反正切

(5)相位解缠绕

(6)相位差分

(7)脉冲噪声去除:滑动平均滤波

(8)带通滤波器输出呼吸信号:

带通滤波器的设计可以参考上一篇内容:MATLAB设计滤波器之新版filterDesigner使用_CoCo哥的博客-CSDN博客

(9)带通滤波器输出心跳信号:

(10)提取心跳波的包络线,归一化心跳波

 四、参考资料

已上代码资料到csdn的资源区:

五 、总结

一、引言

        非雷达科班出身,“入坑”毫米波雷达一年多,现在把入门毫米波雷达检测呼吸、心跳的传统与改进算法进行开源并归纳整理了相关的资料。欢迎交流以及专业人士的指正。

二、毫米波雷达检测呼吸、心跳基本原理

1.TI官方开发资料:

Vital Signs 68xx Users Guide (ti.com)

2.博主“调皮连续波”开源资料以及原理讲解:

干货 | IWR1642EVM呼吸心跳原始数据采集与仿真分析(含MATLAB代码和数据) (qq.com)

(1)线性调频连续波雷达基本原理(第1讲): 干货-线性调频连续波雷达基本原理(第1讲)

(2)线性调频连续波雷达基本原理(第2讲): 干货-线性调频连续波雷达基本原理(第2讲)

(3)线性调频连续波雷达基本原理(第3讲): 干货-线性调频连续波雷达基本原理(第3讲)

3. 驾驶员生命体征检测原理视频说明(1642EVM,77GHZ)中文讲解:

毫米波雷达的应用无处不在- 1.4 对驾驶员心跳呼吸检测的应用-模拟与混合信号在线培训- 德州仪器(TI)官方视频课程培训

三、 毫米波雷达提取呼吸、心跳信号Matlab算法处理

        以下matlab代码基于“调皮连续波”的77GHz IWR1642EVM的算法处理代码进行改进,同时参考了期刊论文文献: 《基于毫米波雷达的生命体征检测》(张兰春,顾海潮)重新设计了带通滤波器分离呼吸心跳信号,并且还参考了另一篇论文:《mmHRV_Contactless_Heart_Rate_Variability_Monitoring_Using_Millimeter-Wave_Radio》对提取的心跳信号进行估计包络的归一化处理。

1.硬件平台: IWR6843ISKEVM+DCA1000EVM

2.mmavestudio参数设置: 

配置说明:

雷达配置:一帧2个chirp,一帧50ms,ADC采样点为200个,采样率为4Msps,数据处理时仅采用每帧的第一个chirp。
毫米波雷达发射起始频率:f0=60.25GHz      调频斜率:S=64.985MHz/us(~65e17)    

有效带宽B=ts*S=3.24925GHz≈3.25GHZ     距离分辨率:ΔR=0.04615m

3.信号处理算法(matlab)

算法流程简介:

(1) 预处理:
%复采样
    numChirps = fileSize/2/numADCSamples/numRX;     %含有实部虚部,除以2
    %共2048个chirps(1024帧*2个chirp)
    LVDS = zeros(1, fileSize/2);
    %combine real and imaginary part into complex data将实部虚部结合成复数
    %read in file: 2I is followed by 2Q     adcData数据组成:两个实部,接着是两个虚部
    counter = 1;
    for i=1:4:fileSize-1        %1T4R
        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:每一列为chirp
    LVDS = reshape(LVDS, numADCSamples*numRX, numChirps);
    %each row is data from one chirp:每一行为chirp
    LVDS = LVDS.';
end

%% 重组数据(4条接收天线的复数数据)
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:200*2048
评论 295
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值