用SP061A实现心电数据的FFT与压缩
发布时间:2008/5/27 0:00:00 访问次数:463
    
    
     摘要:在sp061a单片机上实现对ecc信号的fft、滤波和压缩。合理组织sp061a的硬件资源,并采取数据分段长度可选、避开高频分量的计算和简易的数据压缩算法,使存储开销、运算速度和精度满足实用要求。
     关键词:ecc数据 sp061a fft 滤波 压缩 在远程心电监护系统中,心电信号采集器是实现心电信号的现场采集、存储和传输的重要终端设备。对采集器的基本要求之一是:及时对采集到的心电信号进行滤波和压缩等预处理,以减少存储器占用量和数据远程传输到头端服务器的开销。为降低成本,这些任务一般采用单片机完成。然而,限于单片机的资源、运算能力和运行速度,许多压缩算法,如周期压缩法、小波变换压缩法和神经网络方法等无法使用,一些缺乏快速算法的频域变换法也很难达到实用的程度[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×2=1024字;n=10时,段长为1024个数据,全部加载将占用1024×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
    
    
     摘要:在sp061a单片机上实现对ecc信号的fft、滤波和压缩。合理组织sp061a的硬件资源,并采取数据分段长度可选、避开高频分量的计算和简易的数据压缩算法,使存储开销、运算速度和精度满足实用要求。
     关键词:ecc数据 sp061a fft 滤波 压缩 在远程心电监护系统中,心电信号采集器是实现心电信号的现场采集、存储和传输的重要终端设备。对采集器的基本要求之一是:及时对采集到的心电信号进行滤波和压缩等预处理,以减少存储器占用量和数据远程传输到头端服务器的开销。为降低成本,这些任务一般采用单片机完成。然而,限于单片机的资源、运算能力和运行速度,许多压缩算法,如周期压缩法、小波变换压缩法和神经网络方法等无法使用,一些缺乏快速算法的频域变换法也很难达到实用的程度[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×2=1024字;n=10时,段长为1024个数据,全部加载将占用1024×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
上一篇:新一代Mifare射频基站IC
上一篇:单片机C语言