根据电子设计大赛心率检测的设计实践思路

2023-10-31

该装置具有以下几个特征:

(1)、电路简单、系统整体功耗低、发热量低、可以稳定连续运行;

(2)、使用新型、主频高的控制芯片,能在芯片上实现数据滤波

(3)、设计安卓端上位机显示心电信号与反馈信息

(4)、PC端上位机显示信号波形,将采集的数据以文件格式储存,并对数据进行分析,供科研人员进一步研究。

实施方案

1总体流程图

2.前端模拟放大电路

         采用AgCl电极片,减小基线漂移。

         心电信号通过二级放大,放大倍数1000倍以上,第一级采用仪表放大器AD620进行放大,二级电路用LM358,和OP07构成放大。通过蓝牙,用于STM32与手机通信。附加MPU6050用于跌倒检测。

心电部分采用右腿驱动,减小工频干扰。通过RC与运算放大器构成有源带通滤波器,0.3HZ-106Hz的频率通过。电源部分采用AMS11175.0V和7660s构成一对正负5负的电压为运放供电。通过AMS11173.3V稳压到3.3V为STM32进行供电。

2.1负电源产生电路

用两个ICL7660s并联,提高能够输出的最

2.2心电放大电路

R25,C24,R26和U2(OP07)构成右腿驱动电路,AD620将信号放大10倍左右。C25与R12与U3(OP07)构成一个有源高通滤波器。R35、C26构成低通滤波器,放大倍数=(R34/R33)*(R37/R36)=1000。

2.3电压抬升电路

经过放大后的信号,电压范围在-5V到+5V,为了让STM32AD能够读到电压值,需要将放大的信号转换到0-3.3V。可知最后输出的电压在0到3.3之内,可以由STM32的AD读出。

3.单片机部分

3.1 主控单元选取

本次数据采集与滤波电路使用的主控芯片为意法半导体公司的STM32F103RBT6。该芯片的具有ARM 32-bit Cortex-M3 CPU,片上128k flash,20kRAM,12-bit精度的是,片内ADC转换器,以及I2C接口等外设。可以在简单的电路上完成信号采集与数据滤波等运算。

3.3.2信号的采集与传输

模拟信号的采样使用了ADC1的第10通道,两次采样时间间隔为14个时钟周期,转换精度为12bit,ADC的触发时钟配置为TIM2输出,通过DMA方式进行外设到内存数据传输,采用DMA乒乓结构进行数据存储和处理

3.2.1定时器配置PWM输出关键代码

TIM_TimeBaseStructure.TIM_Period = 400;       

         TIM_TimeBaseStructure.TIM_Prescaler = 720 - 1; 

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_Pulse = 200;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//下面详细说明

         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

    TIM_OCInitStructure.TIM_Pulse = 200;

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

TIM_CtrlPWMOutputs(TIM2, ENABLE);

3.3.2.2配置DMA外设到内存传输

         DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;           DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;

3.3.2.3用定时器配置ADC采样率

         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2 ; //Timer触发         ADC_ExternalTrigConvCmd(ADC1, ENABLE);   //使用外部中断触发(相对于M3内核来说)

3.3.3干扰来源

工频干扰:工频干扰是由电力系统引起的一种干扰,由50hz及其谐波构成的一种干扰,幅值约为ECG(心电信号)的50%

基线漂移:呼吸作用引起的,源于被测对象在测试过程中呼吸时电机与人体皮肤间的阻抗仪器放大的热噪声等干扰引起的,频率约为0.15-0.3hz。呼吸作用时ECG幅值有15%的变化

肌电干扰:来源于人体的肌肉颤抖,肌电干扰产生毫伏级电势,可视为瞬间发生的高斯零均值带限噪声

3.3.3数字陷波滤波器的设计

工频干扰可以用先波器进行处理,过滤50hz信号,而基线漂移则通过高通滤波器消除0.5hz以下的频率。常用固定频率的设计有IIR滤波器和FIR滤波器两种,其中FIR滤波器具有良好的线性相位。但是在同等性能条件下阶数比IIR滤波器高,运算量大。故本设计的工频陷波和高通滤波均采用IIR滤波器来设计

   IIR滤波器的设计方法有脉冲响应不变法和双线性变换法,但过程比较复杂,借助Matlab的fdatool工具包可以直接生成相关参数。再通过直接II型翻译成c语言形式应用于STM32平台

导出滤波系数得到转移函数

再根据滤波器直接II型实现框图,翻译成c语言代码并烧录到主控芯片中运行

c语言响应代码

x0=ADC_ConvertedValueLocal;  //输入ADC采集到的信号

         w0[0]=IIR_50Notch_A[0]*x0-IIR_50Notch_A[1]*w0[1]-IIR_50Notch_A[2]*w0[2];

         y0=IIR_50Notch_B[0]*w0[0]+IIR_50Notch_B[1]*w0[1]+IIR_50Notch_B[2]*w0[2];

w0[2]=w0[1];

         w0[1]=w0[0];

3.3.4数字高通滤波器的设计

         数字高通滤波器能有效抑制呼吸作用导致的基线漂移,同样采用Matlab Fdatool工具箱设计0.5hz二阶IIR高通滤波器,导出滤波系数。

得到响应函数:

翻译成C语言代码:

            w1[0]=0.991153*(IIR_High_A[0]*x1-IIR_High_A[1]*w1[1]-IIR_High_A[2]*w1[2]);

            y1=IIR_High_B[0]*w1[0]+IIR_High_B[1]*w1[1]+IIR_High_B[2]*w1[2];

w1[2]=w1[1];

            w1[1]=w1[0];

3.3.5.采用SG平滑滤波算法对心电信号进行平滑处理

对IIR滤波后的数据进行SG平滑处理,先在Matlab平台上面进行实时仿真,通过提取MIT-BIH数据库的文件,对其进行SG平滑滤波以验证算法的效果,再将其翻译成c语言,

SG平滑之后数据比之前平滑很多

3.3.5跌倒检测算法检测

         基于MPU6050六轴模块设计跌倒检测算法。MPU6050是全球首例整合性6轴运动处理器件整合了3轴陀螺仪和3轴加速度计,免除了组合陀螺仪和加速度计时之轴间差的问题。

由于产品佩戴于胸前,所以选取X轴方笔直朝下,使用I2C通讯协议,提取MPU6050各轴数据,消除零点漂移之后,对加速度计的数据进行均值滤波,通过加速度计数据得到x轴与重力加速度方向的角度,然后通过卡尔曼滤波融合陀螺仪的加速度,得到修正之后X轴与重力加速度方向的倾角,实际实验测试出临界阈值。

mpu6050_get_data(&gx,&gy,&gz,&ax,&ay,&az,&temperature);  

acc_filter();        

ax-=AX_OFFSET;        

ay-=AY_OFFSET;

az-=AZ_OFFSET;

gx-=GX_OFFSET;        

gy-=GY_OFFSET;

gz-=GZ_OFFSET;

angle_dot = gz * GZRO_SCALE; 

angle =atan(sqrt(ax * ax + ay * ay )/az ); 

angle =angle * 57.295780;  

kalman_filter(angle, angle_dot, &f_angle, &f_angle_dot);

3.5.6数据帧协议

4安卓端程序设计

4.1  Android客户端的作用相当于一个网关,一是通过蓝牙发送请求数据的命令至STM32核心控制系统并接收数据,同时在界面上绘制心电图; 二是通过Wifi在后台将心电数据发送至服务器,包含如下组件:

  1. 蓝牙服务:负责与STM32系统建立蓝牙连接的串口信道,收发数据。
  2. 绘图模块:实现与用户的交互功能,对采集数据进行实时画图,以供观察。
  3. 网络服务:负责向服务器发出连接请求,将接收的数据通过Wifi发送至服务器
  4. 其它服务:包括短信提醒和保存数据的功能,可以通过对网络返回的数据进行判断,给用户预先设置的联系人发送短信提醒,并且对数据进行保存,方便让专业学者进行诊断

4.2  Android SDK对蓝牙的支持

4.2.1 蓝牙通信技术

蓝牙通信技术是一种支持设备短距离通信( 一般10m以内) 的无线电技术,能在包括移动电话PDA无线耳机笔记本电脑相关外设等众多设备之间进行无线信息交换 利用蓝牙技术,能够有效得简化移动通信终端设备之间的通信

4.2.2 Android蓝牙APIS

AndroidSDK2.0版本及以上包含了对蓝牙网络协议栈的支持,这使得Android设备能够无线连接其它蓝牙设备交换数据Android的应用程序框架提供了访问蓝牙功能的APIs( 应用程序接口) , 这些APIs让应用程序能够无线连接其他蓝牙设备,实现点对点,或点对多点的无线交互功能。可用的蓝牙APIs都包含在android.bluetooth包里,使用蓝牙APIs,一个Android应用程序能够实现下列功能: ( 1) 扫描其它蓝牙设备;( 2) 查询本地蓝牙适配器用于配对蓝牙设备; ( 3) 建立RFCOMM信道; ( 4) 通过服务发现连接其它设备; ( 5) 数据通信;( 6) 管理多个连接。

4.3 Android客户端设计

4.3.1 蓝牙通信:进行蓝牙通信需要完成以下四个步骤: ( 1) 设置蓝牙适配器; ( 2) 发现已经配对或者可用的附近的蓝牙设备; ( 3) 连接设备; ( 4) 在不同设备之间传输数据。

  系统流程如图:

4.3.2 绘图模块:提取心电数据,并绘制心电图.提取STM32模块经过滤波后得到的心电数据,通过事先设定的协议:以@为开始符,|为数据的分隔符,$为停止符,进行数据的发送和提取,再通过SufaceView控件去进行动态心电图的绘制

4.3.3数据上传:在向服务器上传数据时,采用Socket 通信协议 Socket 通常称作套接字,一个Socket 对象包含了IP地址和端口应用程序通常通过套接字向网络发出请求或者应答网络请求套接字之间的连接过程可以分为三个步骤: 服务器监听,客户端请求,连接确认 首先在PC端建立一个ServerSocket监听客户请求,本文采用在Android手机端监听了上传事件的方法,触发事件后,通过“socket=new Socket(172.38.30.10)”来请求连接服务器 通过socket.getOutputStream().write()来发送数据。

5.PC端上位机程序设计

二:上位机部分

采用VC++6.0编写PC端上位机,上位机与手机通过WiFi进行通信.

上位机具有以下功能:

  1. 波形显示,实时显示用户心电图
  2. 与手机通过Wi-Fi进行数据传输
  3. 在服务器端显示用户心率,姓名等信息
  4. 心率分析,通过检测QRS波中的R波,运用阈值检测算得心率数据
  5. 将心电图的数据记录并保存到文件,也可以从文件中读取心电数据进行显示。
  6. 上位机支持多用户连接,服务器端可根据用户的姓名进行选择观看。
  7. 采用FFT计算出频谱心电图(FCG),对于研究心电图具有重要意义。运用蝶形算法计算fft求得心电信号的频谱,比DFT的计算量减小很多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据电子设计大赛心率检测的设计实践思路 的相关文章

  • 机器学习及其分类

    机器学习 机器学习 ML 是一门多领域交叉学科 涉及概率论 统计学 逼近论 凸分析 算法复杂度理论等多门学科 专门研究计算机怎样模拟或实现人类的学习行为 以获取新的知识或技能 重新组织已有的知识结构使之不断改善自身的性能 它是人工智能核心
  • 【华为OD机试】寻找身高相近的小朋友【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 小明今年升学到小学一年级 来到新班级后发现其他小朋友们身高参差不齐 然后就想基于各小朋友和自己的身高差对他们进行排序 请帮他实现排序 输入描述 第一行为正整数H和N
  • Latex特殊符号、公式、颜色整合

    Latex特殊符号 公式整合 更新于2021 03 15 文章目录 Latex特殊符号 公式整合 花体 希腊字母 法语字符及重音符 括号 点 符号 运算符 箭头 公式 空格 其他特殊问题 公式编号 项目编号 正下方标注 加粗 条件公式 矩阵
  • c语言 for循环 逗号,vs中for语句中的逗号怎么使用?

    Visual Studio 2015中的for循环语句还可以使用逗号 该怎么使用逗号呢 下面我们就来看看详细的教程 软件名称 Visual Studio 2015 简体中文正式版 企业版 软件大小 4 5GB更新时间 2016 09 17立
  • 针式打印机打印发虚_针式打印机打印输出字符模糊不清晰的原因有哪些

    针式打印机打印输出字符模糊不清晰的原因有哪些 针式打印机应用于发票和多联单据 如果打印效果出现模糊或者不清晰情况的话 所打印出来的发票和多联单据就会报废 这样就会出现耗材浪费 所以针式打印机输出字符模糊不清的时候 我们就应该找出引起故障原因
  • TCP和UDP详解

    文章目录 一 UDP协议 1 1 UDP协议报文格式 1 2 UDP协议的特点 1 3 扩展问题 二 TCP协议 2 1 TCP协议报文格式 2 2 什么是可靠性 2 2 1 确认应答机制 2 2 2 超时重传机制 2 2 3 连接管理机制
  • java eclipse 和 adt eclipse 去掉红色的波浪线以及错误语法提示

    windows gt perferences gt editors gt text editor gt annotation 在里面选择errors 把其中的三个选项都取消勾选 在里面选择c c indexer markers 把其中的三个
  • 前端代码规范

    文章目录 一 编程规约 一 命名规范 二 HTML 规范 Vue Template 同样适用 三 CSS 规范 四 LESS 规范 五 Javascript 规范 二 Vue 项目规范 一 Vue 编码基础 二 Vue 项目目录规范 前端代
  • 网络安全:XSS、CSRF、点击劫持、HTTPS加密(中间人攻击、DNS劫持)、泛洪攻击、SQL注入

    一 XSS攻击 什么是 XSS 攻击 XSS 全称是 Cross Site Scripting 即跨站脚本 为了和 CSS 区分 故叫它XSS XSS 攻击是指浏览器中执行恶意脚本 无论是跨域还是同域 从而拿到用户的信息并进行操作 这些操作
  • AMA: Yoshua Bengio (self.MachineLearning)

    Yoshua Bengio http www iro umontreal ca bengioy yoshua en index html is one of the machine learning professors who led t
  • 线上环境 CPU 使用率飙升如何快速排查?

    相比于一大堆复杂的 JVM 调优过程 本文介绍的排查步骤还是挺简单的 可以帮助各位小伙伴排查一些简单问题 面试官问起来也好过啥也不会 这个 CPU 打满如何排查我被问过好多次 模拟高 CPU 场景 这里就不麻烦地建 Web 项目了 用一个最
  • 上拉电阻和下拉电阻的作用详解

    一 定义 1 上拉就是将不确定的信号通过一个电阻嵌位在高电平 电阻同时起限流作用 下拉同理 2 上拉是对器件注入电流 下拉是输出电流 3 弱强只是上拉电阻的阻值不同 没有什么严格区分 4 对于非集电极 或漏极 开路输出型电路 如普通门电路
  • HTTP服务器实现(一)

    实现一个HTTP服务器就是实现一个程序可以接受客户端发送给服务器进程的请求消息 通过解析这些请求消息 做出相应的响应 下面我们先来梳理一下整体的思路 进行服务器的初始化 int init server char ip int port in
  • FPGA时序约束系列文章汇总

    时序约束在FPGA开发中起着非常关键的作用 与时序约束相关的方面包括时钟分析 路径分析 布线和布局优化等 时序约束的正确性和准确性对于设计的成功是至关重要的 因为它们对电路的时序性能 功耗和资源利用率有着重要影响 有效的时序约束可以帮助设计
  • UE4开发学习笔记(双人游戏共享视角,共享相机)

    先创建一个共享相机的actor类share camera 里面只要spring arm和camera就行 在关卡蓝图里设置摄像机位置 setviewtargetwithblend是将character本身的摄像机过渡到公共摄像机 这里的bl
  • 前端小白练习题查缺补漏2

    1 声明不是 HTML 标签 它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令 声明没有结束标签 声明对大小写不敏感 2 end Math pow 2 50 111111 假设的值 var start end 100
  • duilib-自定义圆形按钮-环形进度条控件

    duilib 自定义圆形按钮 环形进度条控件 如何自定义一个圆形按钮控件内嵌到环形进度条底部 点击按钮刷新进度条值 类似下图 1 在UIDefine h中增加宏定义 define DUI CTR BTN PROGRESS T btnProg
  • sqli-labs(27)

    0X01 先查询闭合 id 1 报错 id 1 正确 知道是 的闭合语句 0X02那么开始我们的注入之旅 空格过滤了 尝试一下 0a绕过 也被过滤了 那么用and 1 1构造闭合 id 1 1 1 显示正确 我们来爆一下数据名称 哦豁 un
  • 产品经理工作积累(1)

    相比较做技术工作的人来说 做产品工作的更倾向于软能力 而这种软能力体现在个人的产品思想上 更或者说做产品的思维或理念 做产品除了本身的产品设计能力外 还有一点就是产品的思想 同一种产品不太的产品做出来后产品形态都会不同 特别是对于一些有独特
  • 在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    先来说一下主要以下有几种方式 fork 如果脚本有执行权限的话 path to foo sh 如果没有 sh path to foo sh exec exec path to foo sh source source path to foo

随机推荐

  • android 反编译方法、工具介绍

    网上有很多的反编译文章 个人认为写的比较好的文章有 APK反编译得工具总结 转载 hayhx 博客园 我也是参考其文章来的 本人写此文章目的 以及反编译运用场景 主要有以下几方面 记录反编译的方法 方便自己用的时候比较方便 起到记录的作用
  • python词频统计_Python中文词频统计

    1 下载一长篇中文小说 2 从文件读取待分析文本 3 安装并使用jieba进行中文分词 pip install jieba import jieba ljieba lcut text import jieba txt open r piao
  • async 和 await

    async async是一个加在函数前面的修饰符 被async修饰的函数会默认返回一个promise对象 可以使用then方法添加回调函数 返回的promise对象的结果是由async函数执行的返回值的结果来决定的 1 当async函数内部
  • 一步步教你用 WebVR 实现虚拟现实游戏

    翻译 疯狂的技术宅 www smashingmagazine com 2018 11 vir 在本教程中 我们将创建三维对象并为它们添加简单的交互 此外 你还可以学到如何在客户端和服务器之间建立简单的消息传递系统 虚拟现实 VR 是一种依赖
  • 说说HashMap的扩容机制

    HashMap的扩容机制 HashMap的数据结构 HashMap几个重要的元素 HashMap的扩容过程 1 为什么扩容 2 什么时候进行扩容 3 怎么扩容 HashMap的数据结构 JDK1 8为例 如图 先知道三个概念 table 存
  • Vmware安装Ubuntu出现 unable to find a medium containing a live file system

    一 前言 由于未知的原因 使用Vmware安装Ubuntu的时候 总是遇到奇怪的问题 忘记截图了 大致是 unable to find a medium containing a live file system 找了几个帖子 参考1 参考
  • ajax 调用node,Node.js 远程调用 方法大全

    关于Node js 远程调用 远程调用 简称 RPC 主要是指服务器或集群之间对处理过程的调用 通过远程调用可以打通不同系统之间的数据与功能 或是抽离与建立公共的逻辑统一提供服务 远程调用的两端也称为远程调用的客户端与服务端 一般是多对多的
  • 借助模糊逻辑将文化算法与和谐搜索相结合进行学习——文化和谐学习算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 文化和谐学习算法 创建于 18 Jan 2
  • 剑指 Offer 24. 反转链表

    定义一个函数 输入一个链表的头节点 反转该链表并输出反转后链表的头节点 示例 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 5 gt 4 gt 3 gt 2 gt 1 gt NULL 代码 Definition f
  • exchange 系统管理器 服务器,在“exchange系统管理器”安全里有个receive as是什么权限?谢谢...

    您好 用Visual Basic访问Microsoft Exchange和Outlook的数据 想通过Access中的Visual Basic for Applications VBA 和数据访问对象 DAO 的方法和对象来连接和导入来自E
  • 故事板(Storyboard)

    1 使用Storyboard完成各项常见功能 1 1 问题 故事板Storyboard是IOS5开始引入的一个新的系统 将多个视图文件 类似xib文件 集中到一个单独的可视化工作区间 负责创建和管理所有的界面及界面间的跳转 每一个Story
  • 【Log日志】springboot项目中集成Log日志详解

    springboot项目中集成Log日志详解 一 Log日志介绍 1 Log 日志组件主要作用及用途 2 日志的级别Level 级别控制 3 日志的输出Import 3 1 快速使用 3 2 日志文件输出 3 3 自定义配置 4 Sprin
  • 微派三轮面试总结

    三轮技术面 面试周期 2023 6 19 2023 6 26 目录 一面 1 介绍一下自己的项目 2 Vue2中父子组件的声明周期执行顺序是怎么样的 3 computed和watch的区别 4 Vue路由中包含两种模式 hash和histo
  • 在windows中使用scp命令

    windows自带scp命令 上传文件 使用方法 scp 源文件路径 账户 地址 目的路径 scp C Users zbh Desktop 1 txt lucas 192 168 11 150 home lucas 然后输入密码即可 下载文
  • React18的useEffect会执行两次

    React18的useEffect会执行两次 useeffect执行两次 翼晗的博客 CSDN博客
  • ubuntu20.04开启SSH远程登录

    默认情况下 首次安装Ubuntu时 不允许通过SSH进行远程访问 以root 用户或具有sudo特权的用户执行以下步骤 以在Ubuntu系统上安装并启用SSH 1 打开终端并安装openssh server软件包 sudo apt upda
  • 入门级动态规划:2018年第九届蓝桥杯省赛B组第四题—测试次数( 摔手机 )

    目录 下面列出用动态规划如何解决此问题 计算若干层楼用若干部手机最少需要摔多少次 计算用若干部手机摔若干次最多可以确定多少层楼 原题描述 x星球的居民脾气不太好 但好在他们生气的时候唯一的异常举动是 摔手机 各大厂商也就纷纷推出各种耐摔型手
  • IntelliJ IDEA中创建jsp项目

    原 IntelliJ IDEA中创建jsp项目 2019年06月13日 22 24 08 炸天帮陈长生 阅读数 88 更多 分类专栏 IDEA 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和
  • SpringBoot集成ffmpeg、javacv自动为视频生成动态封面和静态封面图片

    引入依赖
  • 根据电子设计大赛心率检测的设计实践思路

    该装置具有以下几个特征 1 电路简单 系统整体功耗低 发热量低 可以稳定连续运行 2 使用新型 主频高的控制芯片 能在芯片上实现数据滤波 3 设计安卓端上位机显示心电信号与反馈信息 4 PC端上位机显示信号波形 将采集的数据以文件格式储存