基于物联网的实时语音通信研究及其应用
扫描二维码
随时随地手机看文章
引言
在物联网的时代中信息技术和网络技术发展迅速,多媒体的应用越来越广泛,随着物联网的概念不断深入人心,可寻址、可通信、可控制、泛在化与开放模式正逐渐成为物联网发展的演进目标。对物联网的多媒体的通信的要求越来越高,需求越来越多,就急需针对物联网下的应用及其开发,以达到良好的实时通话的性能。
1系统方案的分析与设计
在物联网中系统方案有很多,不同的系统体系使设计难易程度也不同。随着技术的不断发展,对系统整体的设计越来越看重。使得选取系统方案成为整个设计与实现的重点。
Linux系统
嵌入式系统一般指非PC系统,把微处理器(CPU)或者微控制器(MCU)的系统电路与专用软件相互结合,以应用为中心、计算机为基础、软硬件可裁剪、适用于应用系统,对功能、性能等特殊处理的专用系统。
嵌入式系统是将先进的电子技术应用相结合后的产物,决定了该行业是一个技术密集型、资金密集型、不断创新的集成电路系统。例如风河的Vxworks之所以在火星车上得以应用,则是因为其高实时性和高可靠性。
嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,建立类似的软硬件基础,然后在此基础上开发出各种应用需要的系统。目前的嵌入式系统的核心往往是一个只有几KB到几十KB的微内核,需要根据实际的应用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。为此本文选用的是Linux系统。
Linux系统的前身基于Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。
Linux的基本思想:所有的都是文件;每个文件都有特定的功能。包括命令、硬软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特点的文件。
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
完全兼容POSIX1.0标准使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。是用户从Windows转到Linux奠定了基础。
Linux支持多用户性,各个用户对于自己的文件设备有自己特殊的权限,保证了各用户之间互不影响。
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在电脑、手机等上。
ARM处理器
作为一种嵌入式处理器,ARM处理器以低成本、高性能。得到了广大公司及个人的喜爱。目前,ARM处理器已广泛应用于工业控制、消费电子产品、通信等领域。
ARM处理器的主要特点如下:
体积小、低功耗、低成本、高性能;
支持Thumb(16)/ARM(32位)双指令集,能很好地处理兼容性;
大量使用寄存器,指令执行速度更快;
大多数数据操作都在寄存器中完成;
寻址方式灵活简单,执行效率高;
指令长度固定。
ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。目前非常流行的ARM芯核有ARM7TDMI,ARM720T,ARM9TDMI,ARM922T,ARM940T,ARM946T,ARM966T,ARM10TDMI等。本文所选用是ARM11系列,其内核时钟频率为350〜500MHZ,ARM11处理器的功耗可以低至0.4mW/MHz。ARM11处理器采用了易于综合的流水线结构,并和常用的综合工具以及ARMcompiler良好结合,多媒体处理扩展使MPEG4编码/解码加快一倍,音频处理加快一倍,增强的异常和中断处理使实时任务的处理更加迅速。
OSS与CSS
在声卡的驱动有两种;OSS(开放声音系统);ALSA(先进Linux声音架构)Kernel2.6内核支持ALSA了,但是OSS编程是比较容易上手的,也比较符合Linux的编程框架,而且ALSA配置的时候也可选择OSS支持,这样OSS应用程序无需更改就可使用ALSA驱动。为此本文选用OSS类型。2系统实现平台的搭建
2.1软件搭建
2.1.1Linux环境的配置
首先是要安装Ubuntu10.04.04。Ubuntu是一个以桌面应用为主的Linux操作系统。其次是应当设置Ubuntu网络参数,以实现PC机与开发板通信。然后就是安装交叉编译器:
cd/forlinx(进入/forlinx目录)
mkdri/usr/local/arm
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
把交叉编译器路径添加到系统环境变量中,以后就可以直接在终端窗口中输入arm-linux-gcc命令来编译程序。接着是在终端中执行: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
最后保存并退出。重新启动系统,在终端里面执行arm-linux-gcc并回车。
2.1.2内核移植及根文件系统的制作
内核移植的方法如下:
编译Linux-3.0.1
即将压缩包‘FORLINX_linux-3.0.1.tar.gz'拷贝到工作目录下,然后解压缩:
#tarzxfFORLINX_linux-3.0.1.tar.gz
(2)配置内核
配置内核需要先安装‘libncurses5\以方便使用‘makemenuconfig'命令:
#sudoapt-getinstalllibncurses5-dev
如果执行命令后无法找到libncurses5-dev安装包,那就需要先执行#sudoapt-getupdate,再执行#sudoapt-getinstalllibncurses5-dev
(3)编译内核
编译内核的命令如下:
#makezImage
编译结束后,将在内核源码目录的arch/arm/boot中得到Linux内核映像文件:zImage
根文件制作可以分为如下步骤:
创建根文件系统的目录;
创建设备文件;
安装./etc;
编译内核模块;即进入Linux内核目录makemodulesAPCH=arm
CROSS_COMPILE=arm-linux-
安装内核模块;
配置busybox;即进入busybox目录执行makemenuconfig,选中“Bulidboxasastaticbinary”,静态链接。
Crosscompileprefix(arm-linux-)
InstallationOptions—>
然后选中“Don'tuse/usr”,再选中该项可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统。
编译、安装busybox;
MakeARCH=armCROSS_COMPILE=arm-linux-Makeinstall
2.1.3音瘢区动移植
音频驱动移植的程序代码如下:
$makemenuconfig
DeviceDrivers--->
<*>Soundcardsupport--->
<*>AdvancedLinuxSoundArchitecture--->
<*>OSSMixerAPI
<*>OSSPCM(digitalaudio)API
[*]OSSPCM(digitalaudio)API-Includepuginsystem
<*>ALSAforSoCaudiosupport--->
<*>ASoCsupportforSamsung
<*>SoCAC97AudiosupportforSMDKC100-WM97132.2硬件搭建
嵌入式系统的硬件一般包括处理器/微处理器、存储器及外设器件和输入输出端口等。图1所示是嵌入式系统的硬件示意图。
2.3 Ok6410开发板
S3C6410是由三星公司推出的一款低功耗、高性价比的处理器,它基于ARM11的内核,可应用于移动电话和通用处理等领域;S3C6410为2.5G和3G通信服务提供了优化的硬件性能,内置强大的硬件加速器:包括运动视频处理、音频处理、2D加速、显示处理和缩放等;集成了一个MFC(Multi-FormatvideoCodec)支持MPEG4/H.263/H.264编解码和VC1的解码,可以提供实时的视频会议以及NRSC和PAL制式的TV输出;除此之外,该处理器内置一个采用最先进技术的3D加速器,支持OpenGLES1.1/2.0和D3DMAPI,能实现4Mtriangles/s的3D加速;同时,S3C6410包含了优化的外部存储器接口,该接口能满足在高端通信服务中的数据带宽要求。由于以上突出的性能表现,著名的苹果公司手机Iphone就是基于S3C6410处理器。
OK6410开发板基于三星公司最新的ARM11处理器S3C6410,拥有强大的内部资源和视频处理能力,可稳定运行在667MHz主频以上,支持MobileDDR和多种NANDFLASH。OK6410开发板上集成了多种高端接口,如复合视频信号、摄像头、USB、SD卡、液晶屏、以太网,并配备温度传感器和红外接收头等。
3实时语言程序的设计
本系统的实时语言程序的设计代码如下:
//初始化声卡
intinit_soundcard(intoflag)
{/*打开声音设备*/
fd=open("/dev/dsp",oflag);
/*设置采样时的量化位数*/
status=ioctl(fd,SOUND_PCM_WRITE_BITS,&arg);
/*设置采样时的声道数目*/
status二ioctl(fd,SOUND_PCM_WRITE_CHANNELS,&arg);/*设置采样时的采样频率*/
status=ioctl(fd,SOUND_PCM_WRITE_RATE,&arg);
//录音函数
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结语
本文开发的基于Linux的嵌入式系统应用医院病房管理系统,能满足医院病房、护士站系统提出的语音通信的要求,保证任务完成的实时性、可靠性、实现护士与病人的即时通信。相对于传统的系统更容易实现系统集成和维护。在语音实时通信领域有很好的应用前景。
20211119_61979b018a7d0__基于物联网的实时语音通信研究及其应用