在远程心电监护系统中,心电信号采集器是实现心电信号的现场采集、存储和传输的重要终端设备。对采集器的基本要求之一是:及时对采集到的心电信号进行滤波和压缩等预处理,以减少存储器占用量和数据远程传输到头端服务器的开销。为降低成本,这些任务一般采用单片机完成。然而,限于单片机的资源、运算能力和运行速度,许多压缩算法,如周期压缩法、小波变换压缩法和神经网络方法等无法使用,一些缺乏快速算法的频域变换法也很难达到实用的程度[3]。高性价比的心电信号采集器的研制一直是一个热点问题。
通过研究FFT(快速傅立叶变换)的算法结构和心电信号的特点发现,采用分段FFT,保留分析心电波形需要的谐波成分,巧妙地组织单片机的片内RAM资源,可使数据运算量和RAM开销大大减少,能实现数据滤波和压缩,且能达到实时采集与处理所需的运算速度。
SP061A是凌阳科技公司研制的一款16位超低功耗单片机[1],片内有2K字RAM、10位A/D转换器,CPU时钟高达49.152MHz,且价格低廉,还特别具有一套精简、高效的指令系统和类似于DSP的硬件内积运算功能。这些特点很适合心电信号的采集和处理。图1是作者研发的心电信号采集器中有关硬件的组成框图:多路ECG模拟信号送SP061A进行A/D转换,转换数据送NVRAM DSl265W暂存;待采集完成后,由SP061A进行FFT和滤波、压缩;压缩结果送回DSl265W,再适时通过电话线或计算机网络送到监护中心处理、诊断。 本文仅讨论用SP061A实现FFT[2]、低通滤波与压缩。设对心电信号的采样率为500次/秒,数据精度为10位。
1 数据分段算法 设采集到的原始数据存于片外RAM中,将这些数据分为若干段,逐段读入片内进行FFT。各段的变换结果及时送回片外RAM中保存。 按照FFT的要求,段中包含的数据个数必须为2N,N为FFT变换的层数。考虑到SP061A片内RAM为2K字,此处取N=9或N=10,即段中数据为 512或1024,以保证RAM够用。显然,段头和段尾的数据大小相等时,以该段作为一个周期而无限重复的波形将无跳跃点。经过“FFT变换到频域”→ “丢弃高频成分”→“IFFT(快速傅立叶反变换,在头端PC上进行)”一系列操作而重建的时域波形,段与段之间的结合点将是连续的。但实际上,按上述分段几乎不能做到段头和段尾的数据大小相等。取两种段长的目的就是提供两种可能的选择——选择首尾数据之差较小的段作FFT。尽管如此,段首尾数据之差仍存在,经处理、复原后的波形在段的结合部位仍将有间断点。而采用加窗、延拓等办法在单片机上又难以实现。解决问题的策略为:分段时,各段间的数据首、尾各覆盖10个数据。头端PC在完成重建后,应将首、尾各5个数据丢弃。
2 时域数据的整序与加载 分段后,将该段加载到SP061A的RAM中,以实施FFT。原始数据以采集的时间先后顺序存放,加载时则应“整序”,即改变数据的先后顺序,以保证变换后的频域数据为正序。 设Rs为指向片外RAM的、待加载的段内数据的偏移地址,Rs=O…2N-1;Rd为指向片内RAM的、待写入数据的偏移地址,如图2。将Rs按N位二进制逐位高低互换就得到只Rdo例如,当N=9时,若Rs为011001011B,则Rd为110100110B。为加快计算速度,将N=9时及,的值制表存于FLASHROM,供整序时查询。当N=10时,取Rs的B0~B9位查表获得Rd,再将Rs的B10位传送到Rd,的B15位,最后将Rd循环左移 1位。 FFT变换是复数运算。在将原始数据加载到片内RAM的同时,应把实数转换为复数,即令虚部为0。于是,一个原始数据加载到RAM中要占用2个字。复数的存储格式为:实部字存于低地址,虚部字存于相邻的高地址。现在考察RAM需要量。N=9时,段长为512个数据,加载到RAM中要占用 512%26;#215;2=1024字;N=10时,段长为1024个数据,全部加载将占用1024%26;#215;2=2048字,超过片内RAM 的可用容量。此时,将数据分为两部分,先将第一部分加载到RAM作FFT,得到中间结果,再将第二部分加载、变换,最后相加合成。
3 FFT变换及低通滤波 FFT将时域序列{χ[i],i∈0…2N}变换为频域序列{F[i],i∈0…2N}。为了实现低通滤波,仅须保留{F[i]}中≤75Hz的频率分量。当N=9时,应保留{F[i]}中的前77个低频分量;当N=10时,则应保留{F[i]}中的前154个低频分量。这也同时减少了计算量,加快了计算速度;存放周转量所需的片内RAM也能得到保证。 为叙述简便,以N=3为例,研究FFT的计算结构,如图3所示。 图3中,W[k]是复因子,W[k]=COS[(2kπ)/N ]+jsin[(2kπ)/N],k=0…2N-1。将W[k]的实部和虚部都乘2 14,取整后制成表,存于FLASH ROM中,供程序查表获得其值;而W[k]与某数相乘,将32位运算结果右移14位作为积。这就使全部运算为整数运算,适应SP061A的硬件乘法功能。 由图3知,第一层的计算仅涉及实部加减,虚部保持为0,可单独进行。从第二层开始有复数乘,但是,当只需计算{F[i]}中的低频分量时,许多中间结果可不计算。例如,如果需计算出F[0]和F[1](即保留原始信号的直流分量和1次谐波),则仅需计算χ[0]3、χ[4]3和χ[1]、χ[5]3。计算层数N越多,减少的运算也越多。 图4 复数乘可利用SP061A的内积功能实现。例如,要计算χ[i]%26;#215;W[j],设χ[i]%26;#215;W[j]= (a+jb)%26;#215;(c+jd)=ac+(-bd)+j(bc+ad)。显然,结果的实部和虚部均为内积形式,只是设置操作数时须注意符号和排列顺序。 上述方法使计算量显著减少。以512点FFT为例,计算出全部频率分量需要512%26;#215;log2 512=4608次运算,其中含有2048次复数乘。若计算77个低频分量,则只有3611次运算,其中含有1767次复数乘。 当N=10时,计算点数达1024,片内RAM不够用。此时,应按1024点的整序次序取数,先对χ[0]1~χ[511]1,进行FFT,算出 F1[0]~F1[153],暂存于片内RAM中的一个缓冲区;再对χ[512]1~χ[1023]1进行FFT,算出F2[0]~F2[153];则最终结果为:F[i]=Fl[i]+F2[i],i=0…153。 为避免计算中产生数据溢出,从第三层开始,对χ[i]4~χ[i]9都算术右移1位。操作的累积结果使F[i]缩小了64倍,故在重建时应扩大64倍。如此操作实际上降低了运算精度,但实验表明,重建的波形完全满足医学观察要求。
4 数据压缩
采取如下简易格式实现数据压缩: 对于F[0],因虚部为0,仅用一个字存放实部,重建时默认虚部为0; 对于F[i],i>0,若实部在—64~63范围内且虚部在—128~127范围内,则用2个字节存放,格式如下:
两种格式由第1字节的最高位区分。 5 实验结果与分析 用自行研发的心电信号采集器进行实验,对采集到的4个样本进行处理,实验结果如表1。表1中,PRD为均方根误差,CC为相关系数,计算公式为:
式中m为样本系列的数据个数,x[n]、x分别为原始数据系列及其平均值,y[n]、y分别为重建后的系列及其平均值。CR为压缩比,CR=1(m%26;#215;10)/(压缩后的字节数%26;#215;8) 处理时间为SP061A完成FFT与压缩花费的时间,CPU时钟设置为49.152MHz。 表1 实验结果数据 样本编号代表波形 CR PRD(%) CC 原始数据个数压缩后字节数处理时间(ms) 1 图4(a) 3.93 23.132 0.97103 17926 5694 254 3 图4(b) 3.88 14.058 0.98999 19290 6086 263 6 图4(c) 4.08 3.0731 0.99953 65126 20884 857 9 图4(d) 3.92 7.4203 0.99592 12804 3978 179
实验表明,本方法用价格低廉的单片机实现了复杂的FFY与数据压缩,计算耗时少,所得结果满足实用要求。由图4可见,重建后的波形在段间结合点无畸变。噪声较弱时PRD和CC参数较为理想;而当噪声很强时,如图4(a)、4(b),因滤除了高频噪声而使得重建波形与原始波形差距较大,PRD和CC参数已不能说明问题。压缩算法简便,CR约为4。顺便说明,本方法未实现50Hz干扰滤波、肌电干扰滤波和基线漂移,这些处理可在头端PC上进行。
关键字:SP061A 心电数据 单片机
引用地址:
用单片机实现心电数据的FFT与压缩
推荐阅读最新更新时间:2024-03-16 13:39
基于AVR单片机的嵌入式系统的应用分析
引言 随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式,在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。 AVR微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集
[单片机]
略谈MSP43单片机端口
MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。由于MSP430的端口只有数据口,没有状态口或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位或者几位来传送状态信息,通过查询对应位的状态来确定外设是否处于“准备好”状态。 端口的功能
[单片机]
爱特梅尔瞄准触摸应用推出先进的触摸软件库
电容性触摸感应产品供应商爱特梅尔公司现已推出先进的触摸软件库 (Touch-library),可驻留于微控制器内,以取代单独的芯片,从而实现具有高成本效益的解决方案,而且无需任何额外费用。该库包含了预编译和校验二进制檔,能够各自配置为分立式按键、或按需要组合为滑轮或滑块。
爱特梅尔提供一个完备的开发环境,帮助用户轻松地开发基于其AVR® 微控制器的触摸系统。AVR内核结合爱特梅尔的QTouch™ 技术,构成业界最稳健的触摸解决方案,尤其适合于要求严苛的应用。这一方案为设计人员带来多项优势,例如高信噪比可以提高系统设计余量、改善EMC性能,并提供高ESD容限。此外,设计人员还能够处理要求高可靠性的应用,
[单片机]
8-基于51单片机的羽毛球计分器
具体实现功能 系统由STC89C52单片机+超声波测距传感器(HC-SR04)+DS18B20温度传感器+LCD1602液晶显示屏+按键+蜂鸣器+电源构成 具体功能:1、LCD1602液晶显示测量的距离和温度; 2、测量范围0.02m~4m,精度为0.01m; 3、可以设置距离报警上下限值;按键功能:加键,减键,设置键 4、超过设定的报警上下限值则开始声光报警。 设计分析 根据功能要求及设计成本,控制系统选用AT89C51芯片。采用按钮开关实现功能控制,按照设计的功能模块共选用8个按钮开关,分别实现启动、A队加分、A队减分、B队加分、B队减分、暂停、停止、清零功能。时钟电路由晶体振荡器、晶振控制芯片和电容组成,
[单片机]
8051单片机(STC89C52)八段数码管稳定显示0 ~ 7
在轮流显示0~7程序的基础上, 将delay()函数提供的时延大幅缩小, 以达到视觉短暂的停留效果. 在该种情况下的数码管亮度和对比度较轮流显示时有一定幅度的降低. 另外, 如果想感知到动态扫描的存在, 可从拍摄视频中观察(到像波浪一样的光浪). #include STC89C5xRC.H void delay()//提供时延 { int i, j; for(i = 0; i 15 ; i++) for(j = 0; j 15; j++) ; } void f1_3_4_3()//在8个数码管上轮流显示0~7 { unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b
[单片机]
MCS-51单片机输入/输出口的P0并行扩展方法
在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。 MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O口应用的就只有P1口了。这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。 由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问外部RAM存
[单片机]
PIC系列单片机应用的优势
1,PIC系列单片机最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。可以说PIC系列单片机从小到大阵容是非常的强大的。 2,精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。 3,产品上市零等待(Zero time to market)。采用PIC的低价OTP型芯片,可使单片机在其
[单片机]
EM78P447S单片机及其在直流电机红外遥控
1 EM78P447S的主要特点 EM78系列单片机是台湾义隆电子股份有限公司采用CMOS工艺制造商的8位高性价比单片机。 该系列单片机一般都内置看门狗计数器(WDT)、RAM、ROM、可编程定时/计数器、预分频器以及5层堆栈。该系列器件的绝大部分指令只需两个振荡周期,同时具有内外部中断、低电压检测复位、可编程I/O、内部上拉电阻和集电极开路输出、SLEEP方式等功能。另外,EM78P447S单片机还具有编程简单、速度快、功耗小、成本低等优点,能广泛应用于玩具、家电、工业控制等方面。 EM78P447S主要性能特点如下: ●工作电压范围:2.5-5.5V; ●允许温度范围:0-70℃; ●工作频率范
[嵌入式]