陳先財+孫俊杰+張久鵬+張偉
摘 要:物聯(lián)網(wǎng)是新一代信息技術的重要組成部分,語音的實時通話在物聯(lián)網(wǎng)時代中更加體現(xiàn)出科技的不斷應用與創(chuàng)新。文章主要介紹了物聯(lián)網(wǎng)下的音頻實時通信技術。具體闡述了系統(tǒng)方案的分析與技術,以及系統(tǒng)平臺的搭建和實現(xiàn)方法,同時結合病房信息管理系統(tǒng)項目的實例,分析了語音通話的設計和實現(xiàn)方法。
關鍵詞:物聯(lián)網(wǎng);嵌入式;實時;語音;病房信息管理系統(tǒng)
中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2014)02-0075-03
0 引 言
在物聯(lián)網(wǎng)的時代中信息技術和網(wǎng)絡技術發(fā)展迅速,多媒體的應用越來越廣泛,隨著物聯(lián)網(wǎng)的概念不斷深入人心,可尋址、可通信、可控制、泛在化與開放模式正逐漸成為物聯(lián)網(wǎng)發(fā)展的演進目標。對物聯(lián)網(wǎng)的多媒體的通信的要求越來越高,需求越來越多,就急需針對物聯(lián)網(wǎng)下的應用及其開發(fā),以達到良好的實時通話的性能。
1 系統(tǒng)方案的分析與設計
在物聯(lián)網(wǎng)中系統(tǒng)方案有很多,不同的系統(tǒng)體系使設計難易程度也不同。隨著技術的不斷發(fā)展,對系統(tǒng)整體的設計越來越看重。使得選取系統(tǒng)方案成為整個設計與實現(xiàn)的重點。
1.1 Linux系統(tǒng)
嵌入式系統(tǒng)一般指非PC系統(tǒng),把微處理器(CPU)或者微控制器(MCU)的系統(tǒng)電路與專用軟件相互結合,以應用為中心、計算機為基礎、軟硬件可裁剪、適用于應用系統(tǒng),對功能、性能等特殊處理的專用系統(tǒng)。
嵌入式系統(tǒng)是將先進的電子技術應用相結合后的產物,決定了該行業(yè)是一個技術密集型、資金密集型、不斷創(chuàng)新的集成電路系統(tǒng)。例如風河的Vxworks之所以在火星車上得以應用,則是因為其高實時性和高可靠性。
嵌入式系統(tǒng)必須根據(jù)應用需求對軟硬件進行裁剪,滿足應用系統(tǒng)的功能、可靠性、成本、體積等要求。所以,建立類似的軟硬件基礎,然后在此基礎上開發(fā)出各種應用需要的系統(tǒng)。目前的嵌入式系統(tǒng)的核心往往是一個只有幾KB到幾十KB的微內核,需要根據(jù)實際的應用進行功能擴展或者裁減,但是由于微內核的存在,使得這種擴展能夠非常順利的進行。為此本文選用的是Linux系統(tǒng)。
Linux系統(tǒng)的前身基于Unix操作系統(tǒng),是一個基于POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。它能運行主要的Unix工具軟件、應用程序和網(wǎng)絡協(xié)議。它支持32位和64位硬件。
Linux的基本思想:所有的都是文件;每個文件都有特定的功能。包括命令、硬軟件設備、操作系統(tǒng)、進程等等對于操作系統(tǒng)內核而言,都被視為擁有各自特點的文件。
Linux是一款免費的操作系統(tǒng),用戶可以通過網(wǎng)絡或其他途徑免費獲得,并可以任意修改其源代碼。這是其他操作系統(tǒng)所做不到的。正是由于這一點,來自全世界的無數(shù)程序員參與了Linux的修改、編寫工作,程序員可以根據(jù)自己的興趣和靈感對其進行改變,這讓Linux吸收了無數(shù)程序員的精華,不斷壯大。
完全兼容POSIX 1.0標準使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。是用戶從Windows轉到Linux奠定了基礎。
Linux支持多用戶性,各個用戶對于自己的文件設備有自己特殊的權限,保證了各用戶之間互不影響。
Linux可以運行在多種硬件平臺上,如具有x86、680x0、SPARC、Alpha等處理器的平臺。此外Linux還是一種嵌入式操作系統(tǒng),可以運行在電腦、手機等上。
1.2 ARM處理器
作為一種嵌入式處理器,ARM處理器以低成本、高性能。得到了廣大公司及個人的喜愛。目前,ARM處理器已廣泛應用于工業(yè)控制、消費電子產品、通信等領域。
ARM處理器的主要特點如下:
(1)體積小、低功耗、低成本、高性能;
(2)支持Thumb(16)/ARM(32位)雙指令集,能很好地處理兼容性;
(3)大量使用寄存器,指令執(zhí)行速度更快;
(4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成;
(5)尋址方式靈活簡單,執(zhí)行效率高;
(6)指令長度固定。
ARM提供一系列內核、體系擴展、微處理器和系統(tǒng)芯片方案。目前非常流行的ARM芯核有ARM7 TDMI,ARM720T,ARM9 TDMI,ARM922T,ARM940T,ARM946T,ARM966T,ARM10 TDMI等。本文所選用是ARM11系列,其內核時鐘頻率為350~500 MHZ,ARM11處理器的功耗可以低至0.4 mW/MHz。ARM11處理器采用了易于綜合的流水線結構,并和常用的綜合工具以及ARM compiler良好結合,多媒體處理擴展使MPEG4編碼/解碼加快一倍,音頻處理加快一倍,增強的異常和中斷處理使實時任務的處理更加迅速。
1.3 OSS與CSS
在聲卡的驅動有兩種;OSS(開放聲音系統(tǒng));ALSA(先進Linux聲音架構)。Kernel 2.6內核支持ALSA了,但是OSS編程是比較容易上手的,也比較符合Linux的編程框架,而且ALSA配置的時候也可選擇OSS支持,這樣OSS應用程序無需更改就可使用ALSA驅動。為此本文選用OSS類型。
2 系統(tǒng)實現(xiàn)平臺的搭建
2.1 軟件搭建
2.1.1 Linux環(huán)境的配置
首先是要安裝Ubuntu 10.04.04 。Ubuntu是一個以桌面應用為主的Linux操作系統(tǒng)。其次是應當設置Ubuntu網(wǎng)絡參數(shù),以實現(xiàn)PC機與開發(fā)板通信。然后就是安裝交叉編譯器:
# cd /forlinx (進入/forlinx目錄)
# mkdri /usr/local/arm
#tar zxvf arm-linux-gcc-4.3.2.tgz -C /
把交叉編譯器路徑添加到系統(tǒng)環(huán)境變量中,以后就可以直接在終端窗口中輸入arm-linux-gcc命令來編譯程序。接著是在終端中執(zhí)行:vi /etc/profie
再就是添加以下4行到該文件中:
export PATH=/usr/local/arm/4.3.2/bin:$PATH
export TOOLCHAIN=/usr/local/arm/4.3.2
export TB_CC_PREFIX=arm-linuxexport
PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
最后保存并退出。重新啟動系統(tǒng),在終端里面執(zhí)行arm-linux-gcc 并回車。
2.1.2 內核移植及根文件系統(tǒng)的制作
內核移植的方法如下:
(1) 編譯 Linux-3.0.1
即將壓縮包‘FORLINX_linux-3.0.1.tar.gz 拷貝到工作目錄下,然后解壓縮:
#tar zxf FORLINX_linux-3.0.1.tar.gz
(2) 配置內核
配置內核需要先安裝‘libncurses5,以方便使用‘make menuconfig 命令:
#sudo apt-get install libncurses5-dev
如果執(zhí)行命令后無法找到libncurses5-dev 安裝包,那就需要先執(zhí)行#sudo apt-get update,再執(zhí)行#sudo apt-get install libncurses5-dev
(3) 編譯內核
編譯內核的命令如下:
#make zImage
編譯結束后,將在內核源碼目錄的arch/arm/boot 中得到Linux 內核映像文件:zImage
根文件制作可以分為如下步驟:
(1)創(chuàng)建根文件系統(tǒng)的目錄;
(2)創(chuàng)建設備文件;
(3)安裝./etc;
(4)編譯內核模塊; 即進入Linux內核目錄 make modules APCH = arm
CROSS_COMPILE = arm-linux-
(5)安裝內核模塊;
(6)配置busybox; 即進入busybox目錄執(zhí)行 make menuconfig,選中“Bulidbox as a static binary ”,靜態(tài)鏈接。
Cross compile prefix(arm-linux-)
Installation Options —>
然后選中“Dont use/usr”,再選中該項可以避免busybox被安裝到宿主系統(tǒng)的/usr目錄下,破壞宿主系統(tǒng)。
(7)編譯、安裝busybox;
Make ARCH = arm CROSS_COMPILE = arm-linux- Make install
2.1.3 音頻驅動移植
音頻驅動移植的程序代碼如下:
$ make menuconfig
Device Drivers --->
<*> Sound card support --->
<*> Advanced Linux Sound Architecture --->
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include pugin system
<*> ALSA for SoC audio support --->
<*> ASoC support for Samsung
<*> SoC AC97 Audio support for SMDKC100 - WM9713
2.2 硬件搭建
嵌入式系統(tǒng)的硬件一般包括處理器/微處理器、存儲器及外設器件和輸入輸出端口等。圖1所示是嵌入式系統(tǒng)的硬件示意圖。
圖1 嵌入式系統(tǒng)硬件示意圖
2.3 Ok6410開發(fā)板
S3C6410是由三星公司推出的一款低功耗、高性價比的處理器,它基于ARM11的內核,可應用于移動電話和通用處理等領域;S3C6410為2.5G和3G通信服務提供了優(yōu)化的硬件性能,內置強大的硬件加速器:包括運動視頻處理、音頻處理、2D加速、顯示處理和縮放等;集成了一個MFC(Multi-Format video Codec)支持MPEG4 /H.263/H.264編解碼和VC1的解碼,可以提供實時的視頻會議以及NRSC和PAL制式的TV輸出;除此之外,該處理器內置一個采用最先進技術的3D加速器,支持OpenGL ES 1.1/ 2.0和D3DMAPI, 能實現(xiàn)4M triangles/s的3D加速;同時,S3C6410包含了優(yōu)化的外部存儲器接口,該接口能滿足在高端通信服務中的數(shù)據(jù)帶寬要求。由于以上突出的性能表現(xiàn),著名的蘋果公司手機Iphone就是基于S3C6410處理器。
OK6410開發(fā)板基于三星公司最新的ARM11處理器S3C6410,擁有強大的內部資源和視頻處理能力,可穩(wěn)定運行在667 MHz主頻以上,支持Mobile DDR和多種NAND FLASH。OK6410開發(fā)板上集成了多種高端接口,如復合視頻信號、攝像頭、USB、SD卡、液晶屏、以太網(wǎng),并配備溫度傳感器和紅外接收頭等。
3 實時語言程序的設計
本系統(tǒng)的實時語言程序的設計代碼如下:
//初始化聲卡
int init_soundcard (int oflag)
{ /* 打開聲音設備 */
fd = open("/dev/dsp", oflag);
/* 設置采樣時的量化位數(shù) */
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
/* 設置采樣時的聲道數(shù)目 */
status=ioctl(fd,SOUND_PCM_WRITE_CHANNELS, &arg); /* 設置采樣時的采樣頻率 */
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
...
//錄音函數(shù)
int recorddata(int soundfdr, unsigned char *buf)
{ ...
status=read(soundfdr,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); // 錄音
//close (soundfd);
}
//聲音播放程序
int playsound(int soundfdw, unsigned char *buf)
{
status=write(soundfdw,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); /* 回放 */
}
While(1)
{
...
playsound (soundfdw, buf1);
recorddata (soundfdr , buf1);
playsound (soundfdw, buf2);
recorddata (soundfdr , buf2);
...
}
4 結 語
本文開發(fā)的基于Linux 的嵌入式系統(tǒng)應用醫(yī)院病房管理系統(tǒng),能滿足醫(yī)院病房、護士站系統(tǒng)提出的語音通信的要求,保證任務完成的實時性、可靠性、實現(xiàn)護士與病人的即時通信。相對于傳統(tǒng)的系統(tǒng)更容易實現(xiàn)系統(tǒng)集成和維護。在語音實時通信領域有很好的應用前景。
參 考 文 獻
[1]司永衛(wèi).實時語言傳輸系統(tǒng)的設計與軟件實現(xiàn)[D].成都:成都理工大學,2011.
[2]飛凌嵌入式.OK6410開發(fā)板硬件手冊[R].2012.
[3]程昌南.ARM Cortex-A8硬件設計DIY[M].北京:北京航空航天大學出版社.2012.
[4]楊黎明.基于RTP協(xié)議的實時語音傳輸研究與實現(xiàn)[D].武漢:華中科技大學,2007.
[5]史蒂文斯,拉戈,尤晉元,張亞英.UNIX環(huán)境高級編程[M].北京:人民郵電出版社,2006.
[6]WALL K.GNU/Linux編程指南(第二版)[M].張輝,譯. 北京:清華大學出版社,2002.
[7]劉華,李軍紅,陽武嬌.基于PXA255的VOIP語音傳輸系統(tǒng)研究[J]. 電子技術,2011(9):79-81.
3 實時語言程序的設計
本系統(tǒng)的實時語言程序的設計代碼如下:
//初始化聲卡
int init_soundcard (int oflag)
{ /* 打開聲音設備 */
fd = open("/dev/dsp", oflag);
/* 設置采樣時的量化位數(shù) */
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
/* 設置采樣時的聲道數(shù)目 */
status=ioctl(fd,SOUND_PCM_WRITE_CHANNELS, &arg); /* 設置采樣時的采樣頻率 */
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
...
//錄音函數(shù)
int recorddata(int soundfdr, unsigned char *buf)
{ ...
status=read(soundfdr,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); // 錄音
//close (soundfd);
}
//聲音播放程序
int playsound(int soundfdw, unsigned char *buf)
{
status=write(soundfdw,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); /* 回放 */
}
While(1)
{
...
playsound (soundfdw, buf1);
recorddata (soundfdr , buf1);
playsound (soundfdw, buf2);
recorddata (soundfdr , buf2);
...
}
4 結 語
本文開發(fā)的基于Linux 的嵌入式系統(tǒng)應用醫(yī)院病房管理系統(tǒng),能滿足醫(yī)院病房、護士站系統(tǒng)提出的語音通信的要求,保證任務完成的實時性、可靠性、實現(xiàn)護士與病人的即時通信。相對于傳統(tǒng)的系統(tǒng)更容易實現(xiàn)系統(tǒng)集成和維護。在語音實時通信領域有很好的應用前景。
參 考 文 獻
[1]司永衛(wèi).實時語言傳輸系統(tǒng)的設計與軟件實現(xiàn)[D].成都:成都理工大學,2011.
[2]飛凌嵌入式.OK6410開發(fā)板硬件手冊[R].2012.
[3]程昌南.ARM Cortex-A8硬件設計DIY[M].北京:北京航空航天大學出版社.2012.
[4]楊黎明.基于RTP協(xié)議的實時語音傳輸研究與實現(xiàn)[D].武漢:華中科技大學,2007.
[5]史蒂文斯,拉戈,尤晉元,張亞英.UNIX環(huán)境高級編程[M].北京:人民郵電出版社,2006.
[6]WALL K.GNU/Linux編程指南(第二版)[M].張輝,譯. 北京:清華大學出版社,2002.
[7]劉華,李軍紅,陽武嬌.基于PXA255的VOIP語音傳輸系統(tǒng)研究[J]. 電子技術,2011(9):79-81.
3 實時語言程序的設計
本系統(tǒng)的實時語言程序的設計代碼如下:
//初始化聲卡
int init_soundcard (int oflag)
{ /* 打開聲音設備 */
fd = open("/dev/dsp", oflag);
/* 設置采樣時的量化位數(shù) */
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
/* 設置采樣時的聲道數(shù)目 */
status=ioctl(fd,SOUND_PCM_WRITE_CHANNELS, &arg); /* 設置采樣時的采樣頻率 */
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
...
//錄音函數(shù)
int recorddata(int soundfdr, unsigned char *buf)
{ ...
status=read(soundfdr,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); // 錄音
//close (soundfd);
}
//聲音播放程序
int playsound(int soundfdw, unsigned char *buf)
{
status=write(soundfdw,buf, (LENGTH*RATE*SIZE*CHANNELS/8000)); /* 回放 */
}
While(1)
{
...
playsound (soundfdw, buf1);
recorddata (soundfdr , buf1);
playsound (soundfdw, buf2);
recorddata (soundfdr , buf2);
...
}
4 結 語
本文開發(fā)的基于Linux 的嵌入式系統(tǒng)應用醫(yī)院病房管理系統(tǒng),能滿足醫(yī)院病房、護士站系統(tǒng)提出的語音通信的要求,保證任務完成的實時性、可靠性、實現(xiàn)護士與病人的即時通信。相對于傳統(tǒng)的系統(tǒng)更容易實現(xiàn)系統(tǒng)集成和維護。在語音實時通信領域有很好的應用前景。
參 考 文 獻
[1]司永衛(wèi).實時語言傳輸系統(tǒng)的設計與軟件實現(xiàn)[D].成都:成都理工大學,2011.
[2]飛凌嵌入式.OK6410開發(fā)板硬件手冊[R].2012.
[3]程昌南.ARM Cortex-A8硬件設計DIY[M].北京:北京航空航天大學出版社.2012.
[4]楊黎明.基于RTP協(xié)議的實時語音傳輸研究與實現(xiàn)[D].武漢:華中科技大學,2007.
[5]史蒂文斯,拉戈,尤晉元,張亞英.UNIX環(huán)境高級編程[M].北京:人民郵電出版社,2006.
[6]WALL K.GNU/Linux編程指南(第二版)[M].張輝,譯. 北京:清華大學出版社,2002.
[7]劉華,李軍紅,陽武嬌.基于PXA255的VOIP語音傳輸系統(tǒng)研究[J]. 電子技術,2011(9):79-81.