当前位置: 代码网 > it编程>编程语言>C/C++ > 2.毫米波雷达心率呼吸实时处理实例(二)

2.毫米波雷达心率呼吸实时处理实例(二)

2024年08月06日 C/C++ 我要评论
这部分内容将是我使用Matlab的AppDesigner制作的上位机软件,关于该上位机的制作的详细过程,由于篇幅问题在这里就不详细讲解了。

摘要:本文主要补充上一篇博客1.毫米波雷达心率、呼吸原理实现(一)实例,由于平时较忙,没来得及更新。本项目实时处理主要用到两个工具:1.ccs开发平台 ;2.matlab 2020版本以上(本人使用的2021b)。项目基本思路:通过ccs平台控制awr1843获取串口实时数据,然后使用matlab的appdesign功能设计上位机处理实时获得的串口数据。值得注意的是,在ti的工具箱中有awr1642运行的生命体征demo,可以在不做任何修改的情况下烧录到awr1843中运行。

一、ccs串口数据获取

  1. ccs项目创建

打开ccs软件,点击菜单栏中的file,点击new,点击ccs project,出现如下界面:

target中选择mmwavesensor,这里博主用的是awr1843型号的毫米波雷达,所以选择awr1843,也可以根据自己的雷达型号进行选择。project name可以自己命名,我这里命名为adcdata_mss,project templates and examples中选择sys/bios下的titarget examples下的typical,如下图:

上面的设置对cortex r[arm]中设置的,同时在c67xx[c6000]进行相同的设置,只是工程名称不一样为adcdata_dss,如下图:

点击next,此时在cortex r[arm]下面有错误,这是因为没有对platform进行设置。需要对platform进行设置

在cortex r[arm]中的platform设置为ti.platforms.cortexr:awr18xx:false:200,c67xx[c6000]中的platform设置为ti.platforms.c6x:awr18xx:false:600,分别如下图:

点击finish后,完成新建工程这时在project explorer中会有adcdata_mss和adcdata_dss两个工程。值得说明的是其中前者是用于awr1843中awm核控制芯片,后者用于dsp数据处理。再本demo中只用到一个工程即可,数据处理部分我将内嵌上位机中完成。如下图:

2.项目环境搭建

在上一步骤中完成项目创建之后,接下来将是项目环境搭建。再次强调,本demo使用串口数据以达到实时处理的效果。首先从mmwave_sdk_version\packages\ti\platform\xwr18xx目录下复制r4f_linker.cmd文件到工程目录adcdata_mss目录下。同时还需要再创建一个cmd文件,在这里,我命名为mss_adcdata_linker.cmd,如下图所示:

此时mss_adcdata_linker.cmd中的内容为:


/*----------------------------------------------------------------------------*/
/* linker settings                                                            */
--retain="*(.intvecs)"

/*----------------------------------------------------------------------------*/
/* section configuration                                                      */
sections
{
    systemheap : {}  > data_ram
}
/*----------------------------------------------------------------------------*/

同时,要在adcdata_mss工程中的properties(属性)中的general设置linker command file设置为mss_adcdata_linker.cmd,点击apply and close。

接下来在adcdata_mss工程中创建一个app.cfg配置文件(如果已经存在该文件就不用再创建),并将其命名为mss_adcdata.cfg(也可以根据自己随意命名)。并将其内容修改为如下:


/*
 *  copyright 2016 by texas instruments incorporated.
 *
 *  all rights reserved. property of texas instruments incorporated.
 *  restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *
 */
environment['xdc.cfg.check.fatal'] = 'false';

/********************************************************************
 ************************** bios modules ****************************
 ********************************************************************/
var memory    = xdc.usemodule('xdc.runtime.memory');
var bios      = xdc.usemodule('ti.sysbios.bios');
var heapmem   = xdc.usemodule('ti.sysbios.heaps.heapmem');
var heapbuf   = xdc.usemodule('ti.sysbios.heaps.heapbuf');
var task      = xdc.usemodule('ti.sysbios.knl.task');
var idle      = xdc.usemodule('ti.sysbios.knl.idle');
var sem       = xdc.usemodule('ti.sysbios.knl.semaphore');
var event     = xdc.usemodule('ti.sysbios.knl.event');
var hwi       = xdc.usemodule('ti.sysbios.family.arm.v7r.vim.hwi');
var system    = xdc.usemodule('xdc.runtime.system');
var sysstd    = xdc.usemodule('xdc.runtime.sysstd');
var clock     = xdc.usemodule('ti.sysbios.knl.clock');
system.supportproxy = sysstd;

/* fiq stack usage: */
hwi.fiqstacksize                = 2048;
hwi.fiqstacksection            = ".myfiqstack"
program.sectmap[".myfiqstack"] = "data_ram";

/* default heap creation: local l2 memory */
var heapmemparams           = new heapmem.params();
heapmemparams.size          = 32*1024;
heapmemparams.sectionname   = "systemheap";
program.global.heap0        = heapmem.create(heapmemparams);
memory.defaultheapinstance  = program.global.heap0;

/* enable bios task scheduler */
bios.taskenabled            = true;

program.sectmap[".vecs"]    = "vectors";

/* make sure libraries are built with 32-bit enum types to be compatible with dsp enum types*/
bios.includexdcruntime  = true; 
bios.libtype            = bios.libtype_custom;
bios.customccopts      += " --enum_type=int ";

修改完成后,编译工程会出现如下图所示的错误信息,如下图:

提示的是用到的符号没有定义,对properties(属性)中的build中的arm linker中的advanced options中的command filepreproces中添加预先定义添加如下内容:


mmwave_l3ram_num_bank=6
mmwave_shmem_bank_size=0x20000
mmwave_shmem_tcma_num_bank=0
mmwave_shmem_tcmb_num_bank=0

如下图所示:

点击apply and colse,再次进行编译,仍然会有一个警告,如下图:

接下来,需要修改两处地方就可以消除警告了。

1.对properties(属性)中的build中的xdctools中的advanced

options中的additional complier options(-compileoptions)中修改为"-enum_type=int", 如下图

2.对propeties(属性)中的build中的arm compiler中的advanced options中的runtime model

options中的desinate enum type(-enum_type)选为int,如下图

做完以上两步,再次进行编译,就不会有警告了,如下图所示:

接着就是sdk的导入,为后续程序编写做准备。

  1. 基本的环境配置好后,接下来要导入mmwave_sdk的路径,在properties(属性)中的build中的arm compiler中的include options中导入mmwave_sdk的路径,导入后如下图:

  1. 此外,还需要在properties(属性)中的build中的arm compiler中的predefined symbols中增加subsys_mss和soc_xwr18xx,如下图

3.接下来要对properties(属性)中的build中的arm linker中的file search path中的include library file or command file as input(-library,-l)和add<dir>to library search path(-search_path,-i)添加相应的内容:

include library file or command file as input(-library,-l)添加的内容如下:

add<dir>to library search path(-search_path,-i)添加的内容如下:

注意:上述添加内容皆为mmwave_sdk中库的路径地址。添加后的效果图为:

最后就是文件后缀的修改。对properties(属性)中的build中的arm linker中的basic options中的specify output file name(-output file,-o)中的文件后缀名修改为"xer4f",如下图

3.程序结构分析

adcdata_mss项目程序基本流程图如下图所示:

接下来就是对上述程序结构进行简要描述

  • main函数:

首先,程序进入main函数,进行soc驱动初始化,创建initdriver_task线程来初始化所需要的一些驱动程序,最后调用bios_start。

  • initdriver task函数:

首先,进行pin引脚复用,接下来对串口、gpio、邮箱等驱动进行初始化,初始化串口参数以及打开串口,调用initadcbufdriver函数初始化驱动程序,注册frame、 chirp开始的监听函数,mmwave初始化、同步,创建uartsendsemhandle信号量, 该信号显用于协调串口发送数据的线程,创建adcdata mss_msswavectritask线程, 该线程调用mmwave_execute()函数,创建adcdata_mss_uartsendtask(线程,该线程用于发送原始数据,调用adcdata_mss_start函数,该函数用于配置雷达发射信号参数以及启动雷达。

  • initadcbufdriver函数:

该函数用于初始化adcbuf中的一些配置,对adcbuf进行初始化、参数配置以及打开adcbuf,调用adcdata_adcbufconfig函数。

  • adcdata_adcbufconfig函数:

配置adcbuf存储数据的格式以及接收到数据的存储位置。

  • adcdatamss_msswavectritask函数:

调用mmwave_execute函数。

  • adcdata_mss_uartsendtask函数:

该函数用于将雷达采集到的原始数据发送到上位机。

  • adcdata_mss_start函数:

该函数用于配置雷达发射信号的参数以及启动雷达。

该项目文件放已经在文章末尾。

小结:在上面的部分中,我们初步通过ccs平台控制awr1843雷达获得原始的未经过处理的串口数据,接下来下一部分内容中我将通过matlab编写一个上位机来处理从串口传回来的原始数据(另外,在awr1843中有内置的dsp芯片进行数据处理,可以直接输出处理结果,但是由于工程量以及时间问题,博主就不做这部分内容了,读者可以自行完成或者可以看ti给出的1642demo,这个demo可以直接在1843里运行)。

二、上位机数据处理

1.简介

这部分内容将是我使用matlab的appdesigner制作的上位机软件,关于该上位机的制作的详细过程,由于篇幅问题在这里就不详细讲解了。上位机的界面如下图所示:

2.软件使用指南

首先连接pc与awr1843设备并通电,使用awr1843的debug模式与ccs平台进行调试,并加载在上文中项目编译后产生的.xer4f文件并运行,这时候可以通过串口助手检测是否有数据传回到pc端。我相信大家都知道ti毫米波雷达ccs的debug模式,如果实在不知道如何操作可以去顺便看看ti的开源demo,上面有详细的指导步骤。如下图:

可以看到此时我的pc和毫米波雷达已经可以正常通信了,这时打开上位机就可以正常处理了。

另外需要说明的是,界面中一些按钮以及功能的介绍:

1.端口方面

  • 关于端口方面有两个按钮和两个下拉选择框,端口号是自己识别电脑中的端口,到时候根据自己电脑端口选择即可。波特率选择跟我上图界面一致。

2.抖动消除

  • 该功能用于消除身体抖动,有效值为0和1,0表示不执行,1表示执行。该部分算法借鉴ti的demo。

3.静态杂波消除

  • 该功能用于消除背景噪声,采用基于指数平均对消算法,有效值为0和1,0表示不执行,1表示执行。

4.加权因子

  • 该因子是静态杂波消除算法中用的因子,有效值在0到1之间。

5.呼吸时域窗长和心跳时域窗长

  • 该窗长之间关系傅里叶长度的大小,为2的幂次方。

6.搜索范围

  • 表示此时目标距离雷达前端的有效距离,一般不超过1m为最佳。

结束语

这期内容到这里就结束了,制作不易,希望各位读者可以毫不吝啬的加个点赞和关注,感谢支持。

有关上述的所用到的代码取件地址:

链接:生命体征检测(完整)

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com