基于物聯(lián)網(wǎng)的實(shí)時(shí)語(yǔ)音通信研究及其應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
在物聯(lián)網(wǎng)的時(shí)代中信息技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展迅速,多媒體的應(yīng)用越來(lái)越廣泛,隨著物聯(lián)網(wǎng)的概念不斷深入人心,可尋址、可通信、可控制、泛在化與開(kāi)放模式正逐漸成為物聯(lián)網(wǎng)發(fā)展的演進(jìn)目標(biāo)。對(duì)物聯(lián)網(wǎng)的多媒體的通信的要求越來(lái)越高,需求越來(lái)越多,就急需針對(duì)物聯(lián)網(wǎng)下的應(yīng)用及其開(kāi)發(fā),以達(dá)到良好的實(shí)時(shí)通話的性能。
1系統(tǒng)方案的分析與設(shè)計(jì)
在物聯(lián)網(wǎng)中系統(tǒng)方案有很多,不同的系統(tǒng)體系使設(shè)計(jì)難易程度也不同。隨著技術(shù)的不斷發(fā)展,對(duì)系統(tǒng)整體的設(shè)計(jì)越來(lái)越看重。使得選取系統(tǒng)方案成為整個(gè)設(shè)計(jì)與實(shí)現(xiàn)的重點(diǎn)。
Linux系統(tǒng)
嵌入式系統(tǒng)一般指非PC系統(tǒng),把微處理器(CPU)或者微控制器(MCU)的系統(tǒng)電路與專用軟件相互結(jié)合,以應(yīng)用為中心、計(jì)算機(jī)為基礎(chǔ)、軟硬件可裁剪、適用于應(yīng)用系統(tǒng),對(duì)功能、性能等特殊處理的專用系統(tǒng)。
嵌入式系統(tǒng)是將先進(jìn)的電子技術(shù)應(yīng)用相結(jié)合后的產(chǎn)物,決定了該行業(yè)是一個(gè)技術(shù)密集型、資金密集型、不斷創(chuàng)新的集成電路系統(tǒng)。例如風(fēng)河的Vxworks之所以在火星車上得以應(yīng)用,則是因?yàn)槠涓邔?shí)時(shí)性和高可靠性。
嵌入式系統(tǒng)必須根據(jù)應(yīng)用需求對(duì)軟硬件進(jìn)行裁剪,滿足應(yīng)用系統(tǒng)的功能、可靠性、成本、體積等要求。所以,建立類似的軟硬件基礎(chǔ),然后在此基礎(chǔ)上開(kāi)發(fā)出各種應(yīng)用需要的系統(tǒng)。目前的嵌入式系統(tǒng)的核心往往是一個(gè)只有幾KB到幾十KB的微內(nèi)核,需要根據(jù)實(shí)際的應(yīng)用進(jìn)行功能擴(kuò)展或者裁減,但是由于微內(nèi)核的存在,使得這種擴(kuò)展能夠非常順利的進(jìn)行。為此本文選用的是Linux系統(tǒng)。
Linux系統(tǒng)的前身基于Unix操作系統(tǒng),是一個(gè)基于POSIX和Unix的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。
Linux的基本思想:所有的都是文件;每個(gè)文件都有特定的功能。包括命令、硬軟件設(shè)備、操作系統(tǒng)、進(jìn)程等等對(duì)于操作系統(tǒng)內(nèi)核而言,都被視為擁有各自特點(diǎn)的文件。
Linux是一款免費(fèi)的操作系統(tǒng),用戶可以通過(guò)網(wǎng)絡(luò)或其他途徑免費(fèi)獲得,并可以任意修改其源代碼。這是其他操作系統(tǒng)所做不到的。正是由于這一點(diǎn),來(lái)自全世界的無(wú)數(shù)程序員參與了Linux的修改、編寫工作,程序員可以根據(jù)自己的興趣和靈感對(duì)其進(jìn)行改變,這讓Linux吸收了無(wú)數(shù)程序員的精華,不斷壯大。
完全兼容POSIX1.0標(biāo)準(zhǔn)使得可以在Linux下通過(guò)相應(yīng)的模擬器運(yùn)行常見(jiàn)的DOS、Windows的程序。是用戶從Windows轉(zhuǎn)到Linux奠定了基礎(chǔ)。
Linux支持多用戶性,各個(gè)用戶對(duì)于自己的文件設(shè)備有自己特殊的權(quán)限,保證了各用戶之間互不影響。
Linux可以運(yùn)行在多種硬件平臺(tái)上,如具有x86、680x0、SPARC、Alpha等處理器的平臺(tái)。此外Linux還是一種嵌入式操作系統(tǒng),可以運(yùn)行在電腦、手機(jī)等上。
ARM處理器
作為一種嵌入式處理器,ARM處理器以低成本、高性能。得到了廣大公司及個(gè)人的喜愛(ài)。目前,ARM處理器已廣泛應(yīng)用于工業(yè)控制、消費(fèi)電子產(chǎn)品、通信等領(lǐng)域。
ARM處理器的主要特點(diǎn)如下:
體積小、低功耗、低成本、高性能;
支持Thumb(16)/ARM(32位)雙指令集,能很好地處理兼容性;
大量使用寄存器,指令執(zhí)行速度更快;
大多數(shù)數(shù)據(jù)操作都在寄存器中完成;
尋址方式靈活簡(jiǎn)單,執(zhí)行效率高;
指令長(zhǎng)度固定。
ARM提供一系列內(nèi)核、體系擴(kuò)展、微處理器和系統(tǒng)芯片方案。目前非常流行的ARM芯核有ARM7TDMI,ARM720T,ARM9TDMI,ARM922T,ARM940T,ARM946T,ARM966T,ARM10TDMI等。本文所選用是ARM11系列,其內(nèi)核時(shí)鐘頻率為350?500MHZ,ARM11處理器的功耗可以低至0.4mW/MHz。ARM11處理器采用了易于綜合的流水線結(jié)構(gòu),并和常用的綜合工具以及ARMcompiler良好結(jié)合,多媒體處理擴(kuò)展使MPEG4編碼/解碼加快一倍,音頻處理加快一倍,增強(qiáng)的異常和中斷處理使實(shí)時(shí)任務(wù)的處理更加迅速。
OSS與CSS
在聲卡的驅(qū)動(dòng)有兩種;OSS(開(kāi)放聲音系統(tǒng));ALSA(先進(jìn)Linux聲音架構(gòu))Kernel2.6內(nèi)核支持ALSA了,但是OSS編程是比較容易上手的,也比較符合Linux的編程框架,而且ALSA配置的時(shí)候也可選擇OSS支持,這樣OSS應(yīng)用程序無(wú)需更改就可使用ALSA驅(qū)動(dòng)。為此本文選用OSS類型。2系統(tǒng)實(shí)現(xiàn)平臺(tái)的搭建
2.1軟件搭建
2.1.1Linux環(huán)境的配置
首先是要安裝Ubuntu10.04.04。Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng)。其次是應(yīng)當(dāng)設(shè)置Ubuntu網(wǎng)絡(luò)參數(shù),以實(shí)現(xiàn)PC機(jī)與開(kāi)發(fā)板通信。然后就是安裝交叉編譯器:
cd/forlinx(進(jìn)入/forlinx目錄)
mkdri/usr/local/arm
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
把交叉編譯器路徑添加到系統(tǒng)環(huán)境變量中,以后就可以直接在終端窗口中輸入arm-linux-gcc命令來(lái)編譯程序。接著是在終端中執(zhí)行:vi/etc/profie
再就是添加以下4行到該文件中:
exportPATH=/usr/local/arm/4.3.2/bin:SPATH
exportTOOLCHAIN=/usr/local/arm/4.3.2exportTB_CC_PREFIX=arm-linuxexportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
最后保存并退出。重新啟動(dòng)系統(tǒng),在終端里面執(zhí)行arm-linux-gcc并回車。
2.1.2內(nèi)核移植及根文件系統(tǒng)的制作
內(nèi)核移植的方法如下:
編譯Linux-3.0.1
即將壓縮包‘FORLINX_linux-3.0.1.tar.gz'拷貝到工作目錄下,然后解壓縮:
#tarzxfFORLINX_linux-3.0.1.tar.gz
(2)配置內(nèi)核
配置內(nèi)核需要先安裝‘libncurses5\以方便使用‘makemenuconfig'命令:
#sudoapt-getinstalllibncurses5-dev
如果執(zhí)行命令后無(wú)法找到libncurses5-dev安裝包,那就需要先執(zhí)行#sudoapt-getupdate,再執(zhí)行#sudoapt-getinstalllibncurses5-dev
(3)編譯內(nèi)核
編譯內(nèi)核的命令如下:
#makezImage
編譯結(jié)束后,將在內(nèi)核源碼目錄的arch/arm/boot中得到Linux內(nèi)核映像文件:zImage
根文件制作可以分為如下步驟:
創(chuàng)建根文件系統(tǒng)的目錄;
創(chuàng)建設(shè)備文件;
安裝./etc;
編譯內(nèi)核模塊;即進(jìn)入Linux內(nèi)核目錄makemodulesAPCH=arm
CROSS_COMPILE=arm-linux-
安裝內(nèi)核模塊;
配置busybox;即進(jìn)入busybox目錄執(zhí)行makemenuconfig,選中“Bulidboxasastaticbinary”,靜態(tài)鏈接。
Crosscompileprefix(arm-linux-)
InstallationOptions—>
然后選中“Don'tuse/usr”,再選中該項(xiàng)可以避免busybox被安裝到宿主系統(tǒng)的/usr目錄下,破壞宿主系統(tǒng)。
編譯、安裝busybox;
MakeARCH=armCROSS_COMPILE=arm-linux-Makeinstall
2.1.3音瘢區(qū)動(dòng)移植
音頻驅(qū)動(dòng)移植的程序代碼如下:
$makemenuconfig
DeviceDrivers--->
<*>Soundcardsupport--->
<*>AdvancedLinuxSoundArchitecture--->
<*>OSSMixerAPI
<*>OSSPCM(digitalaudio)API
[*]OSSPCM(digitalaudio)API-Includepuginsystem
<*>ALSAforSoCaudiosupport--->
<*>ASoCsupportforSamsung
<*>SoCAC97AudiosupportforSMDKC100-WM97132.2硬件搭建
嵌入式系統(tǒng)的硬件一般包括處理器/微處理器、存儲(chǔ)器及外設(shè)器件和輸入輸出端口等。圖1所示是嵌入式系統(tǒng)的硬件示意圖。
2.3 Ok6410開(kāi)發(fā)板
S3C6410是由三星公司推出的一款低功耗、高性價(jià)比的處理器,它基于ARM11的內(nèi)核,可應(yīng)用于移動(dòng)電話和通用處理等領(lǐng)域;S3C6410為2.5G和3G通信服務(wù)提供了優(yōu)化的硬件性能,內(nèi)置強(qiáng)大的硬件加速器:包括運(yùn)動(dòng)視頻處理、音頻處理、2D加速、顯示處理和縮放等;集成了一個(gè)MFC(Multi-FormatvideoCodec)支持MPEG4/H.263/H.264編解碼和VC1的解碼,可以提供實(shí)時(shí)的視頻會(huì)議以及NRSC和PAL制式的TV輸出;除此之外,該處理器內(nèi)置一個(gè)采用最先進(jìn)技術(shù)的3D加速器,支持OpenGLES1.1/2.0和D3DMAPI,能實(shí)現(xiàn)4Mtriangles/s的3D加速;同時(shí),S3C6410包含了優(yōu)化的外部存儲(chǔ)器接口,該接口能滿足在高端通信服務(wù)中的數(shù)據(jù)帶寬要求。由于以上突出的性能表現(xiàn),著名的蘋果公司手機(jī)Iphone就是基于S3C6410處理器。
OK6410開(kāi)發(fā)板基于三星公司最新的ARM11處理器S3C6410,擁有強(qiáng)大的內(nèi)部資源和視頻處理能力,可穩(wěn)定運(yùn)行在667MHz主頻以上,支持MobileDDR和多種NANDFLASH。OK6410開(kāi)發(fā)板上集成了多種高端接口,如復(fù)合視頻信號(hào)、攝像頭、USB、SD卡、液晶屏、以太網(wǎng),并配備溫度傳感器和紅外接收頭等。
3實(shí)時(shí)語(yǔ)言程序的設(shè)計(jì)
本系統(tǒng)的實(shí)時(shí)語(yǔ)言程序的設(shè)計(jì)代碼如下:
//初始化聲卡
intinit_soundcard(intoflag)
{/*打開(kāi)聲音設(shè)備*/
fd=open("/dev/dsp",oflag);
/*設(shè)置采樣時(shí)的量化位數(shù)*/
status=ioctl(fd,SOUND_PCM_WRITE_BITS,&arg);
/*設(shè)置采樣時(shí)的聲道數(shù)目*/
status二ioctl(fd,SOUND_PCM_WRITE_CHANNELS,&arg);/*設(shè)置采樣時(shí)的采樣頻率*/
status=ioctl(fd,SOUND_PCM_WRITE_RATE,&arg);
//錄音函數(shù)
intrecorddata(intsoundfdr,unsignedchar*buf)
{...
status二read(soundfdr,buf,(LENGTH*RATE*SIZE*CHANNELS/8000));//錄音
〃close(soundfd);
}
//聲音播放程序
intplaysound(intsoundfdw,unsignedchar*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結(jié)語(yǔ)
本文開(kāi)發(fā)的基于Linux的嵌入式系統(tǒng)應(yīng)用醫(yī)院病房管理系統(tǒng),能滿足醫(yī)院病房、護(hù)士站系統(tǒng)提出的語(yǔ)音通信的要求,保證任務(wù)完成的實(shí)時(shí)性、可靠性、實(shí)現(xiàn)護(hù)士與病人的即時(shí)通信。相對(duì)于傳統(tǒng)的系統(tǒng)更容易實(shí)現(xiàn)系統(tǒng)集成和維護(hù)。在語(yǔ)音實(shí)時(shí)通信領(lǐng)域有很好的應(yīng)用前景。
20211119_61979b018a7d0__基于物聯(lián)網(wǎng)的實(shí)時(shí)語(yǔ)音通信研究及其應(yīng)用