技术中心
 
 

基于物联网的实时语音通信研究及其应用

   日期:2014-08-15    
核心提示:物联网是新一代信息技术的重要组成部分,语音的实时通话在物联网时代中更加体现出科技的不断应用与创新。文章主要介绍了物联网下的音频实时通信技术。具体阐述了系统方案的分析与技术,以及系统平台的搭建和实现方法,同时结合病房信息管理系统项目的实例,分析了语音通话的设计和实现方法。

0 引 言

在物联网的时代中信息技术和网络技术发展迅速,多媒体的应用越来越广泛,随着物联网的概念不断深入人心,可寻址、可通信、可控制、泛在化与开放模式正逐渐成为物联网发展的演进目标。对物联网的多媒体的通信的要求越来越高,需求越来越多,就急需针对物联网下的应用及其开发,以达到良好的实时通话的性能。

1 系统方案的分析与设计

在物联网中系统方案有很多,不同的系统体系使设计难易程度也不同。随着技术的不断发展,对系统整体的设计越来越看重。使得选取系统方案成为整个设计与实现的重点。

1.1 Linux 系统

嵌入式系统一般指非PC 系统,把微处理器(CPU)或者微控制器(MCU)的系统电路与专用软件相互结合,以应用为中心、计算机为基础、软硬件可裁剪、适用于应用系统,对功能、性能等特殊处理的专用系统。

嵌入式系统是将先进的电子技术应用相结合后的产物,决定了该行业是一个技术密集型、资金密集型、不断创新的集成电路系统。例如风河的Vxworks 之所以在火星车上得以应用,则是因为其高实时性和高可靠性。

嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,建立类似的软硬件基础,然后在此基础上开发出各种应用需要的系统。目前的嵌入式系统的核心往往是一个只有几KB 到几十KB 的微内核,需要根据实际的应用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。

为此本文选用的是Linux 系统。

Linux 系统的前身基于Unix 操作系统, 是一个基于POSIX 和Unix 的多用户、多任务、支持多线程和多CPU 的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32 位和64 位硬件。

Linux 的基本思想:所有的都是文件;每个文件都有特定的功能。包括命令、硬软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特点的文件。

Linux 是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux 的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux 吸收了无数程序员的精华,不断壮大。

完全兼容POSIX 1.0 标准使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows 的程序。是用户从Windows 转到Linux 奠定了基础。

Linux 支持多用户性,各个用户对于自己的文件设备有自己特殊的权限,保证了各用户之间互不影响。

Linux 可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha 等处理器的平台。此外Linux 还是一种嵌入式操作系统,可以运行在电脑、手机等上。

1.2 ARM处理器

作为一种嵌入式处理器,ARM 处理器以低成本、高性能。得到了广大公司及个人的喜爱。目前,ARM 处理器已广泛应用于工业控制、消费电子产品、通信等领域。

ARM 处理器的主要特点如下:

(1)体积小、低功耗、低成本、高性能;

(2)支持Thumb(16)/ARM(32 位) 双指令集,能很好地处理兼容性;

(3)大量使用寄存器,指令执行速度更快;

(4)大多数数据操作都在寄存器中完成;

(5)寻址方式灵活简单,执行效率高;

(6)指令长度固定。

ARM 提供一系列内核、体系扩展、微处理器和系统芯片方案。目前非常流行的ARM 芯核有ARM7 TDMI,ARM720T,ARM9 TDMI,ARM9 22T,ARM9 4 0T,ARM946T,ARM966T,ARM10 TDMI 等。本文所选用是ARM11 系列,其内核时钟频率为350 ~ 500 MHZ,ARM11处理器的功耗可以低至0.4 mW/MHz。ARM11 处理器采用了易于综合的流水线结构,并和常用的综合工具以及ARMcompiler 良好结合,多媒体处理扩展使MPEG4 编码/ 解码加快一倍,音频处理加快一倍,增强的异常和中断处理使实时任务的处理更加迅速。

1.3 OSS 与CSS

在声卡的驱动有两种;OSS(开放声音系统);ALSA(先进Linux 声音架构)。Kernel 2.6 内核支持ALSA了, 但是OSS 编程是比较容易上手的,也比较符合Linux 的编程框架,而且ALSA 配置的时候也可选择OSS 支持,这样OSS 应用程序无需更改就可使用ALSA 驱动。为此本文选用OSS 类型。

2 系统实现平台的搭建

2.1 软件搭建

2.1.1 Linux 环境的配置

首先是要安装Ubuntu 10.04.04 。Ubuntu 是一个以桌面应用为主的Linux 操作系统。其次是应当设置Ubuntu 网络参数,以实现PC 机与开发板通信。然后就是安装交叉编译器:

# cd /forlinx ( 进入/forlinx 目录)

# mkdri /usr/local/arm

#tar zxvf arm-linux-gcc-4.3.2.tgz -C /

把交叉编译器路径添加到系统环境变量中,以后就可以直接在终端窗口中输入arm-linux-gcc 命令来编译程序。接着是在终端中执行: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-nonelinux-gnueabi

最后保存并退出。重新启动系统,在终端里面执行armlinux-armlinux-gcc 并回车。

2.1.2 内核移植及根文件系统的制作

内核移植的方法如下:

(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

如果执行命令后无法找到libncurses5-dev 安装包,那就需要先执行#sudo apt-get update,再执行#sudo apt-get install libncurses5-dev

(3) 编译内核

编译内核的命令如下:

#make zImage

编译结束后,将在内核源码目录的arch/arm/boot 中得到Linux 内核映像文件:zImage

根文件制作可以分为如下步骤:

(1)创建根文件系统的目录;

(2)创建设备文件;

(3)安装./etc ;

(4) 编译内核模块; 即进入Linux 内核目录 make modules APCH = arm

CROSS_COMPILE = arm-linux-

(5)安装内核模块;

(6) 配置busybox ; 即进入busybox 目录执行 make menuconfig,选中“Bulidbox as a static binary ”,静态链接。

Cross compile prefix(arm-linux-)

Installation Options —>

然后选中“Don’t use/usr”, 再选中该项可以避免busybox 被安装到宿主系统的/usr 目录下,破坏宿主系统。

(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 硬件搭建

嵌入式系统的硬件一般包括处理器/ 微处理器、存储器及外设器件和输入输出端口等。图1 所示是嵌入式系统的硬件示意图。

 

 

2.3 Ok6410 开发板

S3C6410 是由三星公司推出的一款低功耗、高性价比的处理器,它基于ARM11 的内核,可应用于移动电话和通用处理等领域;S3C6410 为2.5G 和3G 通信服务提供了优化的硬件性能,内置强大的硬件加速器:包括运动视频处理、音频处理、2D 加速、显示处理和缩放等;集成了一个MFC(Multi-Format video Codec) 支持MPEG4 /H.263/H.264 编解码和VC1的解码,可以提供实时的视频会议以及NRSC 和PAL 制式的TV 输出;除此之外,该处理器内置一个采用最先进技术的3D 加速器,支持OpenGL ES 1.1/ 2.0 和D3DMAPI, 能实现4M triangles/s 的3D 加速;同时,S3C6410 包含了优化的外部存储器接口,该接口能满足在高端通信服务中的数据带宽要求。由于以上突出的性能表现,著名的苹果公司手机Iphone 就是基于S3C6410 处理器。

OK6410 开发板基于三星公司最新的ARM11 处理器S3C6410,拥有强大的内部资源和视频处理能力,可稳定运行在667 MHz 主频以上,支持Mobile DDR 和多种NANDFLASH。OK6410 开发板上集成了多种高端接口,如复合视频信号、摄像头、USB、SD 卡、液晶屏、以太网,并配备温度传感器和红外接收头等。

3 实时语言程序的设计

本系统的实时语言程序的设计代码如下:

// 初始化声卡

int init_soundcard (int oflag)

{ /* 打开声音设备 */

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) ;

...

// 录音函数

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 结 语

本文开发的基于Linux 的嵌入式系统应用医院病房管理系统,能满足医院病房、护士站系统提出的语音通信的要求,保证任务完成的实时性、可靠性、实现护士与病人的即时通信。相对于传统的系统更容易实现系统集成和维护。在语音实时通信领域有很好的应用前景。

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢