【作 者】陸 強(qiáng),李文鋒,張西學(xué),李俊民, 劉龍清
泰山醫(yī)學(xué)院信息工程學(xué)院,山東,泰安,271016
肺音是呼吸系統(tǒng)在換氣過程中產(chǎn)生的聲音的總稱,蘊(yùn)含著呼吸系統(tǒng)的病理學(xué)、生理學(xué)信息。自發(fā)明聽診器后,肺音聽診一直是呼吸系統(tǒng)疾病診斷的基本方法。
如何實(shí)時(shí)有效地采集肺音,并進(jìn)行顯示與存儲(chǔ),是這種診斷方法實(shí)現(xiàn)的前提。針對(duì)這個(gè)問題,在分析當(dāng)前國內(nèi)外先進(jìn)的肺音信號(hào)采集技術(shù)的基礎(chǔ)上,開發(fā)了基于ARM和Linux的肺音采集器。
肺音采集器整體結(jié)構(gòu)如圖1所示。肺音采集模塊的硬件以ARM的S3C2440芯片為核心,以駐極體話筒為聲音信號(hào)傳感器,音頻芯片采用UDA1341TS。由于S3C2440和UDA1341TS都提供了IIS音頻解碼接口,在設(shè)計(jì)時(shí)將兩者的IIS信號(hào)引腳直接連接。
S3C2440微處理器是三星公司為手持設(shè)備而設(shè)計(jì)的一款處理器。它采用了發(fā)展的ARM920T內(nèi)核,0.13μm的CMOS標(biāo)準(zhǔn)宏單元和存儲(chǔ)單元。主要功能模塊有電源管理模塊、片上時(shí)鐘發(fā)生器、RTC、IIS數(shù)字音頻總線接口、4通道DMA、擴(kuò)展內(nèi)存控制器、3通道UART、USB模塊、定時(shí)器模塊和24路外部中斷源。
模數(shù)轉(zhuǎn)換芯片為Philip公司推出的UDA1341TS。它采用了先進(jìn)的Sigma-delta過采樣技術(shù),工作電壓范圍為2.4~3.6V。由于其功耗特別低,非常適合于MP3、MD播放器等低功耗場合的應(yīng)用。UDAl341TS芯片除了提供模數(shù)轉(zhuǎn)換功能外,還具有L3接口、IIS(Inter-IC Sound bus)接口和麥克風(fēng)揚(yáng)聲器接口。
在音頻信號(hào)采集系統(tǒng)中,L3接口分別連到S3C2440的3個(gè)通用數(shù)據(jù)輸出引腳上。S3C2440通過向這個(gè)通用端口發(fā)送數(shù)據(jù)來對(duì)UDA1341TS進(jìn)行初始化。圖2所示為S3C2440與UDA1341TS連接圖,圖中CDCLK、I2SSCLK、I2SLRCK、I2SSDI、I2SSDO、L3MODE、LSCLOCK和L3DATA引腳連接到S3C2440。
Flash存儲(chǔ)器是一種可在系統(tǒng)進(jìn)行電擦寫,掉電后信息不丟失的存儲(chǔ)器。Flash存儲(chǔ)器作為一種非易失性存儲(chǔ)器,是用于裝載系統(tǒng)的Bootloader程序、操作系統(tǒng)、數(shù)據(jù)和應(yīng)用程序的核心。
本系統(tǒng)NANDFlash芯片K9F1216,是SAMSUNG公司生產(chǎn)的采用NAND技術(shù)的大容量、高可靠的Flash存儲(chǔ)器。該器件采用三星公司的CMOS浮置門技術(shù)和與非存儲(chǔ)結(jié)構(gòu),工作電壓2.7-3.6V,存儲(chǔ)容量為32MX16位。圖3所示為S3C2440與Flash連接圖。
圖2 S3C2440與UDA1341TS連接圖Fig 2. Connection Between S3C2440 and UDA1341TS
圖3 S3C2440與Flash連接圖Fig 3. Connection Between S3C2440 and Flash
系統(tǒng)的軟件設(shè)計(jì)首先需要搭建軟件平臺(tái),即Bootloader、Linux內(nèi)核、文件系統(tǒng)配置;然后進(jìn)行驅(qū)動(dòng)程序的設(shè)計(jì)與加載;最后根據(jù)具體需要設(shè)計(jì)應(yīng)用軟件,完成所要求的功能。
交叉編譯是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。交叉編譯環(huán)境是一個(gè)由編譯器、鏈接器等組成的綜合開發(fā)環(huán)境。Linux環(huán)境下使用GNU工具完成編譯、鏈接等過程,包括針對(duì)目標(biāo)系統(tǒng)的編譯器gcc、針對(duì)目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫glibc、針對(duì)目標(biāo)系統(tǒng)的二進(jìn)制工具binutils和針對(duì)目標(biāo)系統(tǒng)的Linux內(nèi)核頭文件等。
在本系統(tǒng)中使用的是cross-3.3.2交叉編譯器工具鏈。在Linux下解壓后即生成編譯所需的工具,然后在環(huán)境變量PATH中添加路徑。
BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前的一段程序,相當(dāng)于PC上的BIOS。通過BootLoader,可以完成對(duì)硬件的初始化,包括初始化CPU、堆棧和存儲(chǔ)器等;把內(nèi)核從NANDFlash復(fù)制到SDRAM,然后啟動(dòng);下載映像文件并寫入Flash等。
本系統(tǒng)的BootLoader采用U-Boot,首先要下載源碼包u-boot-1.1.6,在Linux下解壓后即得到全部U-Boot源程序。U-Boot源碼通過GCC和Makefile組織編譯。Makefile從功能上分成兩部分,一部分用來編譯生成uboot.bin文件,另一部分用來執(zhí)行每種board相關(guān)的配置。編譯流程為執(zhí)行make smdk2440_config傳入ARCH,CPU,BOARD,SOC參數(shù),mkconfig根據(jù)參數(shù)將include頭文件夾相應(yīng)的頭文件夾連接好,生成config.h。然后執(zhí)行make分別調(diào)用各個(gè)子目錄的Makefile生成所有的obj文件和obj庫文件。最后連接所有目標(biāo)文件,生成鏡像文件。
Linux內(nèi)核是Linux操作系統(tǒng)的核心,也是整個(gè)Linux功能體現(xiàn)。它是用C語言編寫,符合POSIX標(biāo)準(zhǔn)。本系統(tǒng)采用的內(nèi)核為linux-2.6.30.4。其移植的具體步驟如下:
(1) 首先修改根目錄下的Make fi le文件。在根目錄下的Makefile文件中,首先要指定所移植的硬件平臺(tái)以及所使用的交叉編譯器。
(2) 使用“make menuconfig”菜單方式,來配置內(nèi)核。配置時(shí)盡量剪裁內(nèi)核,需要注意CPU的型號(hào)、串口的設(shè)置和肺音系統(tǒng)各個(gè)模塊的設(shè)置。
(3) 配置好后保存退出,執(zhí)行指令:make zImage。交叉編譯得到內(nèi)核映像名為zImage的文件,然后將其下載到目標(biāo)板上運(yùn)行。
文件系統(tǒng)指文件存在的物理空間。在Linux系統(tǒng)中,每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),都有自己的目錄層次結(jié)構(gòu)。主要內(nèi)容包括應(yīng)用程序,對(duì)應(yīng)目錄為/bin,/sbin,/usr/bin,/usr/sbin;設(shè)備文件,對(duì)應(yīng)目錄為/dev;腳本和配置文件,對(duì)應(yīng)目錄為/etc;庫文件,對(duì)應(yīng)目錄為/lib,/usr/lib,/usr/share。常見文件有cramfs,romfs,jffs和yaffs。本系統(tǒng)采用yaffs文件系統(tǒng)。其具體步驟為:
(1) 下載busybox,通過make menucon fi g修改并配置busybox;
(2) 執(zhí)行指令make install;
(3) 新建目錄root_2.6.30.4,把busybox下的bin、sbin、usr和linuxrc拷入新建目錄下,建立dev、etc、home、lib、opt和proc等文件目錄,并配置內(nèi)容;
(4) 制作映像文件,燒寫到主板中運(yùn)行。
這里重點(diǎn)介紹一下UDA1341驅(qū)動(dòng)程序。在Linux系統(tǒng)中,有兩類音頻設(shè)備驅(qū)動(dòng)框架;即OSS和ALSA。前者包括dsp和mixer字符設(shè)備接口,在用戶空間的編程中,完全使用文件操作;后者以card和組件為主線,在用戶的編程空間中使用alsalib。本系統(tǒng)選用OSS框架。
在本系統(tǒng)中,驅(qū)動(dòng)程序的主要任務(wù)是控制音頻數(shù)據(jù)在硬件中流動(dòng),并為音頻應(yīng)用程序提供標(biāo)準(zhǔn)接口,系統(tǒng)包括設(shè)備的注冊(cè)和卸載模塊、聲音的錄制和播放和mixer混音器設(shè)備接口模塊。
2.5.1 設(shè)備的注冊(cè)和卸載模塊
本模塊包括對(duì)與L3接口相連的I/O口和與IIS接口相連的GPIO口的設(shè)置,對(duì)UDA1341的初始化,對(duì)DMA通道的選擇和初始化,并且通過register_sound_dsp()和register_sound_mixer()函數(shù)注冊(cè)音頻設(shè)備和混音器設(shè)備。
2.5.2 聲音的錄制和播放模塊
聲音的錄制和播放主要通過dsp設(shè)備接口函數(shù)實(shí)現(xiàn),向該設(shè)備寫數(shù)據(jù),就是播放聲音,向該設(shè)備讀數(shù)據(jù),就是錄制聲音。對(duì)設(shè)備的打開、讀寫和控制函數(shù)在 fi le_operations結(jié)構(gòu)中進(jìn)行了定義,結(jié)構(gòu)體如下:
對(duì)設(shè)備的打開、讀寫、控制和關(guān)閉函數(shù)分別對(duì)應(yīng)open()、read()、write()、ioctl()和release()函數(shù)。2.5.3 混音器設(shè)備接口模塊
mixer混音器的功能是將多個(gè)信號(hào)組合或者疊加在一起?;煲羝鞯牟僮鞑环献x寫模式,因?yàn)榇蟛糠植僮魇峭ㄟ^ioctl()系統(tǒng)調(diào)用,來實(shí)現(xiàn)諸音量的調(diào)節(jié)、高低音的控制、FM合成器的控制和放音音量的控制。函數(shù)原形為static int sound_mixer_ioctl
本系統(tǒng)應(yīng)用程序主要實(shí)現(xiàn)肺音信號(hào)的采集、存儲(chǔ)和播放功能。程序流程圖如圖4所示。
圖4 程序流程圖Fig 4. Flow chart of Program
利用所構(gòu)建的系統(tǒng),進(jìn)行了肺音的采集實(shí)驗(yàn)。采集時(shí),要求環(huán)境安靜,正常人采用坐姿勢,將駐極體一端放在采集人身上,采集呼吸音信號(hào)。所采集到的肺音波形如圖5所示。
利用該信號(hào),可以得到肺音特征。通過算法,還可以很容易地得到肺音信號(hào)的時(shí)域和頻域參數(shù)。
圖5 肺音信號(hào)波形Fig 5. Waveform of Lung Sound
本研究利用ARM和Linux技術(shù),成功實(shí)現(xiàn)了對(duì)肺音信號(hào)的采集,并可以將信號(hào)進(jìn)行直觀地顯示。為醫(yī)生提供了一種有效的診斷工具。
[1] 范愛華,卞春華,寧新寶, 等. 基于ARM的無線心電監(jiān)測儀Flash存儲(chǔ)器[J]. 中國醫(yī)療器械雜志, 2008, 32(6): 416-418.
[2] 牛海軍, 萬明習(xí), 王素品. 不同種類肺音信號(hào)的雙譜分析[J]. 儀器儀表學(xué)報(bào), 2001, 22(5): 486-490.
[3] 呂萍, 閔一建, 錢鐵群. 運(yùn)動(dòng)前后肺音信號(hào)的提取與頻譜分析[J].陜西師范大學(xué)學(xué)報(bào), 2005, 33(3): 62-64.
[4] 劉志芳, 阮建雯, 劉志彥. 基于ARM_Linux的嵌入式數(shù)控系統(tǒng)設(shè)計(jì)[J]. 機(jī)床與液壓, 2009, 37(10): 188-190.
[5] 馬毓昭, 柴新禹, 任秋實(shí). 基于S3C2410的Q開關(guān)Nd_YAG激光器控制系統(tǒng)的研究與設(shè)計(jì)[J]. 中國醫(yī)療器械雜志, 2007, 31(6): 411-414.
[6] 趙倉明, 穆煜. 嵌入式Linux應(yīng)用開發(fā)教程[M]. 北京: 人民郵電出版社, 2009