Profile - CN058


CN058

基于Nios II 的先天性心脏病的心音心电信号分析系统

云南大学
信息学院




Advisor

Name: 王威廉

Members

No. Name English Name
1 贾伟伟 Jia Weiwei
2 吴小艳 Wu Xiaoyan
3 杜建和 Du Jianhe

Project Paper

1. 设计概述 (Preliminary Paper)

 设计概述

1    设计意图

       随着社会的发展,心脏疾病已成为多发病和常见病,严重危害着人们的健康。根据最新的资料统计,新生儿自然死亡的首要病因是先天性心脏病。我国每年出生的婴儿约有7‰至11‰为先天性心血管异常即“先天性心脏病”(先心病),给家庭和社会带来巨大的不幸和深重的负担。先心病的早期诊断对于先心病的治疗至关重要。我国现有先心病患者200万人,年龄大多在18岁以下,且每年以超过14 万人的速度递增。在北京地区先心病已成为5岁以下儿童的第一杀手,可见先心病已成为威胁我国儿童和青少年健康的主要疾病(《健康时报》 2003年03月28日)。目前中国的先天性心脏病患儿中约有1/3得不到及时治疗而死亡。国家民政部于2004年启动的“明天计划”(残疾孤儿手术康复明天计划),在3年时间内投入了6个亿为3万残疾孤儿实行手术康复,其中的主要任务之一,就是为患有先心病的孤儿进行康复治疗,可见国家对该疾病的重视。因此应用最新数字信号处理技术,对先心病的心音进行定量地分析研究,为先心病的基础研究与临床诊断提供有效的依据已迫在眉睫。

      患先心病的婴儿若不经治疗,到一岁时其死亡率达50%,到两岁时其死亡率达三分之二。并且畸形越复杂,病情越重死亡率越高。先心病最佳治疗期为5~12岁,早期诊断对先心病的治疗有着十分重要的意义。婴幼儿期病情进展快,如室间隔缺损等左向右分流的病例,易并发肺动脉高压。并发轻到中度肺动脉高压时,尚可争取手术治疗,但当发展到重度肺动脉高压时,则失去了手术机会,不能进行手术治疗。有些先天性心脏病必须早期手术,否则失掉良好的手术机会,如大的室间隔缺损、动脉导管未闭,由于大量左向右分流,婴儿期反复肺部感染伴心力衰竭,单纯药物治疗难以控制,往往伴重度肺动脉高压,因此应及早进行手术治疗。

       心脏听诊是初步诊断先天性心脏病和其它心脏病最古老、最基本、最简单、最快速的方法,但这需要医生凭借个人积累的丰富的临床经验来进行判断。这对临床经验较少的医生来说,具有相当大的难度。目前,超声心动图及彩色多普勒的应用,加上医生体检及其它数据的综合分析,使先天性心脏病的诊断错误率大大降低,但这些设备由于资金、医院规模等原因在乡村医院甚至县级医院根本无法配备。

       本作品的设计意图即在NiosII处理器的平台上研发一种介于心脏听诊和大型诊断设备之间的基于心脏听诊并借助现代信号处理手段的先心病临床辅助诊断技术和设备,实时地对先心病的心音进行分析处理,使得对先心病的临床诊断更方便、快捷、有效和低成本。

   适用范围以及针对用户群 

      目前我国城市医疗保险开支费用居高不下,农村缺医少药还很严重,尤其是在云南这样的西部欠发达地区问题更为突出。因此基于NiosII处理器的平台上开发设计的先天性心脏病分析系统可以给一些乡级医院的医生使用,从而最大限度的检测出患者并及时地实施治疗。

  3    本设计采用Nios II 处理器的优势

 (1)Nios II处理器提供的创新的SOPC设计理念。Nios II软核系统的性能是可以根据应用来进行裁减的,定制用户自己的系统,与固定的处理器相比,在较低的时钟速率下具备更高的性能。具有丰富的IP核库,方便用户设计,有效的提高系统的运算能力。Nios II的用户逻辑功能和用户指令突现NiosII 处理器的技术亮点,提供了运算优化、加速的一个有效途径,将处理速度提高到一个相当的层次,易于实现算法的商用化。

(2 )通过SoPC Builder,配置好Nios II 可以在其上面移植uclinux操作系统,方便我们直接利用操作系统完成系统的功能设计及功能行扩展。

(3)DSP Builder丰富的功能模块和IP核。
      有了在DSP Builder,使得我们能在Simulink下进行算法级的系统开发。并且可以将算法设计成自定义用户指令,利用SoPC Builder和QuartusII软件集成至Nios II嵌入式系统处理器中,通过软件调用该自定义指令完成DSP算法。这是本设计的主要部分。算法可以很好的实现。
 
(4)C2H对设计的有力支持
      Nios II提供的C2H编译器能够将对性能要求较高的C语言程序自动转换为硬件加速器,集成到基于FPGA的Nios II子系统中。这样,分担了Nios II处理器的数据计算和存储器访问功能,使处理器能够更好的处理其他任务。由于Avalon互联架构并没有限制主机和从机的数量,因此,Nios II C2H编译器可以根据转换目标代码的要求,产生多个存储器自治硬件加速器。帮助嵌入式系统开发人员提高效率,实现设计。

 

     

 

(Revision: 12 / 2008-06-14 21:52:04)

2. 功能描述 (Final Project Paper)

 

二   功能描述

      本系统通过对出生婴儿的心音、心电信号进行采集并分析,从而判断是不是患有先天性心脏病,可以直观地分析采集到的信号,弥补了听诊器人为的误差,从而为患有病的婴儿的早治疗提供了方便,具有好的应用前景。

本系统由心音、心电传感器,模拟信号处理部分,数字信号处理部分,VGA显示,网络传输等五个部分组成。
 
      2.1心音心电传感器
      由于人体自身产生的心音、心电信号十分微弱,采集需要专用传感器。本系统中心音信号的采集器采用合肥华科电子技术研究所HKY-06系列心音传感器。该传感器采用新型高分子聚合材料微音传感组件采集心脏搏动和其它体表动脉搏动信号,再经过高度集成化信号处理电路处理,具有高保真输出,稳定性、一致性良好等特性。心电信号采用电极片、导联进行采集。   
 
      2.2前端模拟信号处理电路
      模拟信号的处理由自行设计的电路板完成,由于人体自身产生的心音心电信号十分微(直接采集只有1~4毫伏),经传感器采集放大至1~4V,而且在进入AD采样前还需要进行预处理,包括信号滤波和信号调理。模拟部分接收从传感器送过来的心音心电信号,进行滤波,放大和A/D采样处理。该部分电路我们自行设计并制作pcb板。该部分电路原理图如下所示:
                    
 
 
           2.3 数字信号处理部分
数字信号处理部分通过SPI总线接受从模拟板传输过来的经转换后的心电、心音的数字信号,经过相应的算法对其分析后,数据存贮在SD卡中,并将结果通过VGA接口送到显示器上显示。通过DSP Builder,我们在Simulink下进行算法级的系统开发。并且将算法设计成自定义用户指令,利用SoPC Builder和QuartusII软件集成至Nios II嵌入式系统处理器中,通过软件调用该自定义指令完成DSP算法。这部分是我们设计的关键。我们采用差分阈值法对心电信号QRS波群进行检测,因为只有在QRS波群确定后,我们才能对心电信号其他波进行分析。该方法处理速度快,易于工程实现。在我们确定了QRS波群后,再通过多点差分滤波器,结合非线性变换,选择合适的阈值来确定P波和T波,从而分析出是不是心率异常,从而得出判断。该部分的差值阈值算法我们已经用c语言实现,并通过Matlab仿真通过。
 
2.4 VGA显示
本系统通过在NiosII软核处理器的总线上挂载VGA控制器的IP核,从而可以实现VGA的显示,我们把信号通过VGA接口输出到显示器。它的主要作用是用于心音、心电信号波形实时显示,存贮于SD卡里的心电、心音信号的回放,心音信号时频图的实时显示,特征参数及辅助诊断信息的显示。
 
 
        2.   5网络传输模块
  本系统通过在NiosII处理器上移植uclinux操作系统,从而很方便的实现了其网络功能,既可以作为服务器访问,也可以接入内部局域网进行访问,通过采用以太网方式,实现数据的交互。通过以太网方便用户远程控制并处理和分析心音心电信号。由于网络功能的引入使得系统具有更好的扩展性。该部分已经通过DE2上验证。能够稳定的工作。

 

(Revision: 17 / 2008-09-14 17:06:16)

3. 性能参数 (Final Project Paper)

性     性能参数:

 

 

 心音心电的分析对于诊断先天性心脏病的疾病方面扮演着非常重要的角色,尽早的发现   对于提高患有先天性心脏病生命质量是非常重要的。通过对病因的分析可以帮助医生做出判断,并对手术的治疗方案进行合理安排。对于本系统而言主要的是及时发现病情,可以节省时间和花费。在保证正确率的基础上,提高实时性。我们通过优化代码、使用C2H工具及自定义用户外设等方法加块运算速度
下图一是系统工程编译之后各种资源在DE2占用情况:

  

 

                                   图一

(Revision: 6 / 2008-09-14 09:19:53)

4. 设计结构 (Preliminary Paper)

四   设计结构

           

                            基于NiosII的先天性心脏病的心音心电信号分析系统硬件结构图

 

                           基于Nios II 的先天性心脏病的心音心电信号分析系统软件流程图

 

 

 

 

 

 

 

 

 

(Revision: 7 / 2008-06-14 22:01:22)

5. 设计方法 (Final Project Paper)

 .设计方法:

1. 系统硬件设计

SOPC Builder设置如图一所示: 

 

 

                                                                                  图一  SOPC Builder设置

 

quartusII下模块示意图二如下:

 

                                      图二 quartusII下模块示意图

2. 实现步骤及实现方法

1 信号采集部分。通过我们自制的模拟板采集心音心电信号。心电信号输入到一个差分放大器中,抑制共模信号的干扰,在通过一个放大电路输入到A/D转换通过spi接口输入到系统中进行信号处理,存贮,显示。通过传感器采集的心音信号通过一个放大电路放大后也输入到A/D中通过Spi接口输入到系统处理并显示。

如图所示:

                     图三(a)  模拟采集电路板

 

                                  图三(b)数模转换后的波形

2  控制部分 。我们通过Altera公司DE1 开发平台。集成了软核的Nios2 及其他一些组件构成一个嵌入式系统。采用us/os操作系统进行系统管理。基于Nios II处理器的uC/OS操作系统的引入,uC/OS在世界范围内得到广泛的应用、包括诸多领域,如手机,路由器,集线器、飞行器、 医疗设备等等。uC/OS适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。Nios II的开发环境IDE下已经集成了该操作系统,免去了移植工作,非常方便,在使用过程中发现,在Nios II运行基于ucosII及任务时非常稳定。本系统的软件开发均在Nios II集成的μc/os-II操作系统上面完成。

通过引入操作系统后,减低了系统的复杂性。通过通用接口GPIO把采集到的心音和心电信号通过spi串口读入系统。Spi接口是采用的SOPC中的组件 ,信号处理部分我们对采集到的信号缓冲后进行FFT处理。

3 算法部分

1)我们已经在dsp builder上仿真通过FFT再通过自定制FFT的算法指令使用用户自定制指令,用户能够向NiosIIALU和指令系统增加用户自定制功能,完整的用户自定制指令用户自定制逻辑和软件宏两部分。

用户自定制逻辑是完成用户操作的硬件部分。软件宏提供软件接口,Nios将创建相应C/C++和汇编的宏代码,使得用户能够访问用户自定制逻辑。NiosII自定制指令支持多种设计主件。主要有Verilog HDLVHDL、等。

用户自定制指令逻辑需要直接连到ALU上,所以NiosII提供一套预先定义好名称和功能的接口如图四所示:                                                                

                         图四 NiosII功能接口图

    Nios配置向导会扫描用户自定久逻辑,搜索需要的端口,并把这些端口连到ALU上,这就要求用户自定制逻辑必须指定的端口类型,使用预先定义好的端口名称,保证自定制逻辑端口能正确地连到ALU

当然Nios也允许用户自定制指令与Nios系统外部的功能模块进行信息交流,如果配置向导没能识别用户逻辑模块的某个端口,它将该端口引出到系统模块的顶层,使得外部端口可以访问这些信号,这些端口用export标记。

当用户自定制逻辑被集成到Nios处理器的ALU后,可以通过软件访问自定制逻辑,Nios系统中包括5个用户操作码,用户可以通过C/C++或汇编写的宏来调用这些操作码,通过它们来访问用户自定制逻辑。

C/C++代码时,Nios寄存器的使用是透明的,编译器会自动选择寄存器,而在汇编中则必须指定寄存器。在增加了用户自定制指令后,Nios配置向导会自动创建相应的宏,支持宏进行手工命名,以提高软件代码的可读性.

C/C++通过一个函数用来访问用户自定义指令。SOPC Builder自动生成的Nios系统头文件(system.h)里包含了C/C++的宏定义,有两种不同的C/C++宏可供使用,其中前一个使用了prefix端口,后一个没有使用prefix端口。
    2
FFT算法实现:

FFT算法由AlteraFFT IPFFT V8.0实现,FFT V8.0是一个高性能、参数化快速傅立叶变换(FFT)处理器IP,Altera Stratix 以及Cyclone II系列器件进行了设计优化,可以完成变化长度为2m次方(6m14)的基-2/4按频率抽取(DIF)的复数FFT算法,IP核使用模块浮点结构可在数据处理过程中保持最大数据动态范围,以获得最大信噪比SNR与最少逻辑需求之间的平衡。

此处FFT V8.0相关参数设置为:变换长度选择1024点,数据精度选择16位,I/O数据流选择Stream-ing形式,复数乘法结构(Structure)3个乘法器、5个加法器完成。

图五给出了FFT算法模块的外部端口,I/O接口协议采用Atlantic接口,输入接口为主设备汇端,输出接口为主设备源端。

                                    

                          图五 FFT算法模块外部端口

3)FFT模块的防真:

本次仿真通过DSP Builder对信号进行分析与验证,通过Dsp Builder的组件和FFT IP核组成的mdl文件如图六所示:

 

                                   图六 FFT IP核组成的mdl文件

通过对输出的实部与虚部进行取模得到一个正弦波的FFT的输出波形图(图七)为:

                                

                          图七 FFT的输出波形图

最后通过Signal CompilerSimulink的模型文件转化为后面的硬件描述语

,转换获得的文件是基于RTL寄存器的VHDL的描述。转化成功的Signal Compiler如图八所示:

                                                

                     图八 FFT模块转化成功的Signal Compiler

3.定制Nios核的FFT指令

应用SOPC Builder系统开发工具建立一个嵌入Nios软核的SOPC系统,系统组件如图九所示:

              

                                     图九 系统组件图

用户还可以根据实际应用的需要增加其它SOPC系统组件。通过自定制指令“Custom Instruction”界面中Im-port按钮导入设计好的FF.v文件,定制用户指令FFT如下图所示

              

                       

                             图十  定制用户指令FFT                          

其中ff.v文件为系统的顶层文件,用来例化fft.v

Nios系统中用户自定制逻辑必须与指定的端口类型匹配,对于fft来说,其输入和输出都是实部和虚部为16位的复数,正好可以用一个32位的值来表表示,另外,还必须加上startclk_en两个输入端口,虽然这两个端口信号在程序中没有作用。端口例化时再与原有端口对应,设计的ff.v例化程序如下所示:

module ff(

clk,        

reset,        

clk_en,

start,     

dataa,        

result,

inverse,

sink_valid,

sink_sop,

sink_eop,

sink_error,

source_ready,

sink_ready,

source_error,

source_sop,

source_eop,

source_valid,

source_exp,

);

input clk;

input reset;

input clk_en;

input start;

input   inverse;

input   sink_valid;

input   sink_sop;

input   sink_eop;

input   [1:0]   sink_error;

input       source_ready;

output      sink_ready;

output  [1:0]   source_error;

output  source_sop;

output  source_eop;

output  source_valid;

output  [5:0]   source_exp;

input [31:0] dataa;

output[31:0] result;

fft   fft_inst(

clk,            source_ready,

reset,          sink_ready,

inverse,        source_error,

sink_valid,     source_sop,

sink_sop,       source_eop,

sink_eop,       source_valid,

dataa[31:16],   result[31:16],

dataa[15:0],    result[15:0]);

sink_error,             endmodule

FFT其余Altantic接口信号用export标记,这些端口引出到系统模块的顶层,外部逻辑可以访问这些信号。生成SOPC系统编译成功时如图十一所示:

                            

                                图十一  编译成功提示                                       

图十二为加入自定制FFT算法指令的Nios处理器,将其全程编译并下载到相当的FPGA后,结合Atlantic接口逻辑、FIFO存储器电路,用户即可在CC++中调用FFT指令来完成1024的点的高速FFT算法。

                    图十二 加入自定制FFT算法指令的Nios处理器

Nios2上集成了自定义指令fft。通过我们仿真后,其基本实现所需功能。通过自定义指令,我们能极大的提高系统执行速度,而平常的实现fft都是通过软件实现的 ,速度受到系统时钟的限制。

4. 系统的显示。充分利用DE2的板子资源,我们采用VGA显示实现。Vga的实现是通过流模式实现的。通过DMA中断进行数据的传输。其VGA通过自定义外设生成原理图(图十三)如下:

            

                          图十三 自定义VGA外设生成原理图

 

5.图像数据的存贮。

SD卡是Secure Digital Card卡的简称,直译成汉语就是“安全数字卡”,是由日本松下公司、东芝公司和美国SANDISK公司共同开发研制的全新的存储卡产品。SD存储卡是一个完全开放的标准(系统),多用于MP3、数码摄像机、数码相机、电子图书、AV器材等等,尤其是被广泛应用在超薄数码相机上。SD卡在外形上同MultiMedia Card卡保持一致,大小尺寸比MMC卡略厚,容量也大很多。并且兼容MMC卡接口规范。另外,SD卡为9引脚,目的是通过把传输方式由串行变成并行,以提高传输速度。它的读写速度比MMC卡要快一些,同时,安全性也更高。我们为了使系统更具有广泛的应用性、兼容性,我们决定使用SD卡作为设备的主要存储介质,用于存放采集到的心音心电数据及分析结果。 

(Revision: 29 / 2008-09-14 16:18:24)

6. 设计特点 (Preliminary Paper)

 

六  设计特点

  
         基于NiosII的先天性心脏病心音心电分析系统具有实时性强、运算速度快、体积小、操作简单。
        
(1) 基于Nios II处理器的uclinux操作系统的引入,uclinux出现以后得到广泛的应用、包括诸多领域。 uclinux在网络方面的应用很方便,使我们能方便的进行远程处理及访问。通过在Nios II的开发环境IDE下移植该操作系统,运行在Nios II的uclinux下可以方便的实现本系统需要的功能。本系统的软件开发均在Nios II移植的uclinux操作系统上面完成。
 
(2)  本系统的显示部分采用VGA显示,通过在Nios 软核处理器中加入VGA控制器尽可能的利用开发板资源实现心音、心电信号显示。
 
(3) 系统设计时考虑到大量信号存储的问题,通过采用容量比较大的SD卡解决了这方面的问题,得益于Nios 软核处理器的优势,我们非常方便的加入了sd卡控制器。同时我们移植了对应于sd卡的文件系统,大大方便了对文件访问操作。
 
(4) 基于uclinux操作系统的强大的网络功能,使得我们的系统可以远程进行信号分析和系统的算法升级。
 
(5)Nios II提供一系列的处理器成员,用户可以针对本身系统的需求,创建一个在处理器、外设、存储器和I/O接口方面的的方案,这样,既能提供最优的性能组合,也能节省系统开发成本。
 
(6)  NiosⅡ提供的C2H编译器能够将对性能要求较高的C语言程序自动转换为硬件加速器,集成到基于FPGA的NiosⅡ子系统中,对我们提高系统运行速度提供了有利的支持。
 
(7) 基于Altera的DSP技术 使我们能方便的生成我们需要的算法处理模型,并转化为硬件语言,生成用户自定义指令,通过软件调用,提高了我们的开发进程。
(8) 模拟板的设计采用了Linear Technology公司性能优良的仪器放大器LT1789,作为心音、心电信号的前级放大器,用LT6013作为后级放大、滤波、及信号调理,使信号心音,心电的采集获得了较高的SNR。

 (9)  本系统通过magafunction生成傅里叶变换,并通过dspbuilder仿真后,通过自定义指令集成到NiosII中,转化为硬件实现,极大的提高了系统处理数据的速度,比dsp中采用软件实现具有更高的实时性。

(Revision: 11 / 2008-09-14 20:58:41)

7. 总结 (Final Project Paper)

通过这次参加贵公司的比赛,我们学到了许多东西。

1 我们明白一个团队的合作的重要性。我们的这个系统涉及内容太多,比如 PCB板的设计调试,软件的调试,硬件的配置,自定义外设的实现,自定义指令的实现等等,对于我们而言,每个人都有自己的不足之处,所以要在两个多月的时间里很好的完成我们的比赛,那小组的合理分工和合作是我们能顺利完成工作的前提条件。通过这个合作,我们也学到了在一个团体里面如何跟相互沟通。

2 经过我们小组两个多月的努力,“基于Nios II的先天性心脏病的心音心电信号分析系统”正在按照我们的预定任务进行中,基本符合我们的计划,接下来的时间就是系统整体的调试,     

3 Nios Ⅱ软核系统的性能是可以根据应用来进行裁减的,定制用户自己的系统,与固定的处理器相比,具有更大的灵活性。Nios II的用户逻辑功能和用户指令突出体现Nios II处理器的技术亮点,提供了系统实现的可定制性。提供给我们一个全新的嵌入式开发过程。与其它嵌入式系统相比,更加灵活和透明,在设计中,要实现一个系统我们要从最低层的实现到应用层的设计,完全的透明化,使我们对系统架构的理解更加深刻,这是其他嵌入式系统所不能比拟的。给设计者提供充分的自由度,能极大的提高发挥的空间,不过这也意味这系统设计的难度增加。

 虽然到目前为止我们的还没有完全完成我们的比赛,但是我们从中已经学到了很多知识,对FPGA的理解更深刻。这是一门新的前沿学科。可以说代表这电子行业的最新发展方向。好多理念深深吸引我们投入这个新的学科。在这次比赛中我们也发现了好多不足之处,对系统的架构,对cpu的理解,对软件和硬件的可配置导致问题的调试等,都需要我们在以后的学习中好好理解。

  4 对altera公司和组委会在这次比赛中提供给我们的支持,我们表示由衷的感谢。

 

(Revision: 10 / 2008-09-14 09:45:20)