全文手码,图来自课件,感谢浙江大学诸位老师的悉心教导,请勿转载。。。
都是我早年入门时的经历,,
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
见到坛子里好多人在做生物电(肌电,心电,脑电),常常遇到问题,作为一名BMEer(
Biomedical Engineering),表示曾经做过一些学习并且现在还在学习,也遇到过很多问题,来给大家分享下吧。
我第一次接触生物电是在大二的时候,学习开了一门叫做《生物医学信号处理》的课程,用的教材是《信号与系统基础:应用Web与MATLAB(第3版)(英文影印版)》,全英文教材,全英文课件,全英文上课,全英文作业,全英文考试。。这是这辈子上过的第一门全英文的课。。所以学的很渣,直接导致了我现在不愿意成为一名码农来写算法,而开始搞烧钱的硬件。不过这不是重点,重点是这门课的实验课,,恩,实验课是中文的,虽然课件还是英文,至少,上课是说中文的了终于,每周一次,一个下午(13:30-17:30大概)。
这里第一次见到了传说中的心电图采集设备(心电图ECG,而不是心律监测)(老师or学长自己DIY的PCB,NI的采集卡)。原理图如下:
这电路的原理十分简单,在浮动地下,左手LA和右手RA的生物电信号信号分别先经过一个跟随器(提高电路的输入阻 抗,减小心电信号衰减,匹配失真),然后分别被一个负反馈放大器放大,之后,两路信号经过差动放大得到较为初步的放大信号。。在差分放大前的信号给过于一个正反馈放大器然后输出到右腿RL上(RLD,右腿驱动电路),用以提高共模抑制比,减少信噪比SNR,提升信号质量,这个电路是否存在对信号输出影响十分巨大,极力推荐加上右腿驱动电路。为了保证信号的不会失真,所以放大倍率并不高,大约在几十倍左右。之后的电路主要用于放大与滤波。
这一部分首先先对信号进行了一个带通滤波,之后,经过一级可调放大倍率的负反馈放大电路,此时,对信号而言,已经基本完成了预处理,可以直接接入单片机或者ADC来进行信号采集了。但是作为一个正常的医疗设备,还是需要考虑安全新,对此,老师在PCB上做了全隔离设计。先通过放大器来做基准电压抬升(虽然也可以用俩电阻和一个电容来做这事情,但这样虽然成本会高,但信号质量还是能更好的保证,对降低信噪比SNR有极大的好处),之后经过跟随器,这样的设计是因为此处使用光耦来进行隔离,光耦内部是LED,LED是一种比较坑爹的东西,并没有在所有的电压段都会有亮度的线性变化,而又一个开启电压(1.7V?我忘了),当输入电压低于这个开启电压的时候,光耦输出一直是关闭的,所以需要电压抬升电路,而LED的电流也是需要比较大,所以需要跟随器。。。。。
至此,心电的模拟部分就这样吧。。。。至于滤波。。我一直都是做软滤波的,因为陷波电路还是比较占板子面积的,焊接也懒。。。
然后模拟部分完了之后当然是ADC啦,采样率不需要太高,不过也不能太低(因为要软滤波,如果你不要滤波,采样率能低至130HZ(2×Fs))。
至于滤波算法,老师不让外传。不过大致上还是可以说说的。 滤波算法其实也没什么。一般就是均值滤波之类的超级简单的,然后就是傅立叶变换之类的稍微难的,在后就是卡尔曼滤波器,小波算法之类的,最后就是自学习算法之类的神经网络。。说多了,其实用不上,基本傅立叶下就完事了。。
从实用角度来说,数字滤波(软件滤波)的思路主要是这样的:
1.你得知道你要的信号的大致的频段,峰值,波形(波形是怎么样其实知不知道都一样)
2.做傅立叶看频谱,看看噪声和信号分别在什么频段
3.做功率谱,看看信号与噪声的强度
4.如果噪声和信号处于同一频段,而且噪声强度过大,恩,如果你的算法不是那么牛逼,那你就不要往下做了,重新去改电路吧
5.如果噪声和信号不在同一频段,那就可以开始设计滤波器了,从最简单的fft然后加窗然后ifft可能还需要fftshift,到调用matlab自带的各种神一般的滤波器,再到自建神经网络,随你怎么玩
哦,对了你们还要看波形。。这是我的作业做的,50HZ公频干扰,温漂与基线漂移,运动伪影,肌电干扰都还去除的不错。。主要是信号源和硬件带通做的不错[s::lol]。。
关于第一次接触生物电,就这些吧。。。。。其他的没想起来,也没太多印象。。。。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第二次: 定量生理学与工程生理学这两门课。。。
作为工科唯一一个需要学医的专业,还是学了很多门医学院的课程(大学化学,普通化学,生物化学,生物材料与组织工程,诊断学,生理学,定量生理学,工程生理学,以及一一系列and so on。。。感觉可以写半篇。。。)
第二次做的是肌电,在工程生理学课上,不过没有做硬件,直接就是用老师采集的数据做了滤波,哦对了,还做了准母亲与其胎儿的心电图分离的算法。从硬件上来说,肌电多了一级放大,滤波器的0.72要挪位置,其他基本不变,至于算法。。没听懂,直接调用了老师写的函数库做的滤波。。。[s::hug:]基本没成果。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第三次: 第三次做的是毕设,穿戴式心电图仪。
要求超小体积,低功耗超长待机,无线连接。。。无线连接选的是蓝牙BLE的蓝牙4.0方案,TI的CC2541.。。。不得不说这块芯片的OSAL有多么的坑,看了一个月没看懂它的架构,最后还是丢包。。。好吧,不说这个了重新回来说心电。。使用的是TI的ADS129×系列的集成前端芯片(集成了RLD,可调PGA,中心参考点,AD,导联脱落,数据打包)。。集成度还是非常高的,就是需要配置寄存器比较麻烦,不过总的来说还是不错的,研发周期也可以缩短很多,不过对数字滤波器还是依赖性非常强。。
毕设的原理图就不上了,另外我随手画了个原理图如下,但没啥好看的,基本没啥内容。。上面那个是第一版,下面那个是第二版。。
前端做了电源隔离,但信号没有隔离。外加了锂电池充电管理部分,与外部基准电压部分,没有什么难点,不细说了,至于这货采到的波形,恩,是这样的。。。这货没有进行过数字滤波直接出的图(主要是没想好怎么在arduino写滤波算法,啊喂,他没有fft啊。。。。。),采样率设置为180hz,凑合着看吧,不过可以提高采样率到10KHz的。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第三次: 后来还做了ADI公司的AD8232的方案,这块只卖8块钱的集成放大器还是很不错的,买了它的官方测试版。。后来又自己画了几块板子,对于他内部的可编程高通低通滤波器还是觉得不怎么感冒,其他都还不错,关键也便宜,原理图我就不上了,在此对大家推荐一个软件,是ADI自己研发的,但是没有人用,还老在论坛里发帖问,,那个软件来调整这个高通低通滤波器十分方便,叫做AD8232 BAND PASS DESIGN。在AD8232的官网页面上就有下载,需要LabView的环境。前前后后做了4片板子,遇到了各种各样的问题,但现在回头来看,AD8232的解决方案还是十分不俗的。首先先经过一个仪表放大器,放大100倍,然后高通+低通放大信号,总共放大1.3K倍左右。还带了右腿驱动和导联脱落监测。
啊啊啊,不知道该说什么了。。。。。。还是来看波形吧。。。
波形还是不错的,噪声也能接受。。稍稍再数字滤波下就好了。。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
现在: 现在在做脑电采集的项目,不过难度很大,木有uV级的信号发生器,木有uV级的信号检测仪器,在搭放大器。。。原理图就不放了,老板会打死我的,不过还是差不多的,先经过一级放大,然后做高通,然后低通,然后二级放大,然后50Hz陷波。。。。然后ADC,然后数字滤波器及算法。。目前遇到的问题是AD8232的滤波器,,,比较坑,出来的波形会有30Hz的倍频。。。
200字以内,仅用于支线交流,主线讨论请采用回复功能。