您的位置 首页 厂商

根据SP061A完成心电数据的FFT与紧缩

在SP061A 单片机上实现对ECG信号的FFT、滤波和压缩。合理组织SP061A的硬件资源,并采取数据分段长度可选、避开高频分量的计算和简易的数据压缩算法,使存储开销、运算速度和精度满足实用要求。

SP061A 单片机上完结对ECG信号的FFT、滤波和紧缩。合理安排SP061A的硬件资源,并采纳数据分段长度可选、避开高频重量的核算和简易的数据紧缩算法,使存储开支、运算速度和精度满意有用要求。

在长途心电监护体系中,心电信号收集器是完结心电信号的现场收集、存储和传输的重要终端设备。对收集器的基本要求之一是:及时对收集到的心电信号进行滤波和紧缩等预处理,以削减存储器占用量和数据长途传输到头端服务器的开支。为降低成本,这些使命一般选用单片机完结。可是,限于单片机的资源、运算才能和运转速度,许多紧缩算法,如周期紧缩法、小波改换紧缩法和神经网络办法等无法运用,一些缺少快速算法的频域改换法也很难到达有用的程度[3]。高性价比的心电信号收集器的研制一直是一个热点问题。

通过研讨FFT(快速傅立叶改换)的算法结构和心电信号的特色发现,选用分段FFT,保存剖析心电波形需求的谐波成分,奇妙地安排单片机的片内RAM资源,可使数据运算量和RAM开支大大削减,能完结数据滤波和紧缩,且能到达实时收集与处理所需的运算速度。

SP061A 是凌阳科技公司研制的一款16位超低功耗单片机[1],片内有2K字RAM、10位A/D转化器,CPU时钟高达49.152MHz,且价格低廉,还特别具有一套精简、高效的指令体系和类似于DSP的硬件内积运算功用。这些特色很适合心电信号的收集和处理。图1是作者研制的心电信号收集器中有关硬件的组成框图:多路ECG模拟信号送SP061A进行A/D转化,转化数据送NVRAM DS1265W暂存;待收集完结后,由SP061A进行FFT和滤波、紧缩;紧缩成果送回DS1265W,再当令通过电话线或核算机网络送到监护中心处理、确诊。

本文仅评论用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=0…2N-1;Rd为指向片内RAM的、待写入数据的偏移地址,如图2。将RS按N位二进制逐位凹凸交换就得到Rd。例如,当N=9时,若RS为011001011B,则Rd为110100110B。为加速核算速度,将N=9时Rd的值制表存于FLASH ROM,供整序时查询。当N=10时,取RS的B0~B9位查表取得Rd,再将RS的B10位传送到Rd的B15位,终究将Rd循环左移1位。

FFT改换是复数运算。在将原始数据加载到片内RAM的一起,应把实数转化为复数,即令虚部为0。所以,一个原始数据加载到RAM中要占用2个字。复数的存储格局为:实部字存于低地址,虚部字存于相邻的高地址。现在调查RAM需求量。N=9时,段长为512个数据,加载到RAM中要占用 512×2=1024字;N=10时,段长为1024个数据,悉数加载将占用 1024×2=2048字,超越片内RAM的可用容量。此刻,将数据分为两部分,先将榜首部分加载到RAM作FFT,得到中心成果,再将第二部分加载、改换,终究相加组成。

3 FFT改换及低通滤波

FFT将时域序列{x[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所示。

kN=0…2N-1。将W[k]的实部和虚部都乘214,取整后制成表,存于FLASH ROM中,供程序查表取得其值;而W[k]与某数相乘,将32位运算成果右移14位作为积。这就使悉数运算为整数运算,习惯SP061A的硬件乘法功用。由图3知,榜首层的核算仅触及实部加减,虚部坚持为0,可独自进行。从第二层开端有复数乘,可是,当只需核算{F[i]}中的低频重量时,许多中心成果可不核算。例如,假如需核算出F[0]和F[1](即保存原始信号的直流重量和1次谐波),则仅需核算x[0]3、x[4]3和x[1]3、x[5]3。核算层数N越多,削减的运算也越多。

复数乘可利用SP061A的内积功用完结。例如,要核算x[i]×W[j],设x[i]×W[j]=(a+jb)×(c+jd)=ac+(-bd)+j(bc+ad)。明显,成果的实部和虚部均为内积方式,仅仅设置操作数时须留意符号和摆放次第。

上述办法使核算量明显削减。以512点FFT为例,核算出悉数频率重量需求512×log2512=4608次运算,其间含有2048次复数乘。若核算77个低频重量,则只要3611次运算,其间含有1767次复数乘。

当N=10时,核算点数达1024,片内RAM不够用。此刻,应按1024点的整序次第取数,先对x[0]1~x[511]1进行FFT,算出F1[0]~F1[153],暂存于片内RAM中的一个缓冲区;再对x[512]1~x[1023]1进行FFT,算出F2[0]~F2[153];则终究成果为:F[i]=F1[i]+F2[i],i=0…153。

为防止核算中发生数据溢出,从第三层开端,对x[i]4~x[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为相关系数,核算公式为:

数据系列及其平均值,平均值。

处理时刻为SP061A完结FFT与紧缩花费的时刻, CPU时钟设置为49.152MHz。

试验标明,本办法用价格低廉的单片机完结了杂乱的FFT与数据紧缩,核算耗时少,所得成果满意有用要求。由图4可见,重建后的波形在段间结合点无畸变。噪声较弱时PRD和CC参数较为抱负;而当噪声很强时,如图4(a)、4(b),因滤除了高频噪声而使得重建波形与原始波形距离较大,PRD和CC参数已不能阐明问题。紧缩算法简洁,CR约为4。趁便阐明,本办法未完结50Hz搅扰滤波、肌电搅扰滤波和基线漂移,这些处理可在头端PC上进行。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/190361.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部