当前位置:首页 期刊杂志

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

时间:2024-05-04

陈先财+孙俊杰+张久鹏+张伟

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

关键词:物联网;嵌入式;实时;语音;病房信息管理系统

中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2014)02-0075-03

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,ARM922T,ARM940T,ARM946T,ARM966T,ARM10 TDMI等。本文所选用是ARM11系列,其内核时钟频率为350~500 MHZ,ARM11处理器的功耗可以低至0.4 mW/MHz。ARM11处理器采用了易于综合的流水线结构,并和常用的综合工具以及ARM compiler良好结合,多媒体处理扩展使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-none-linux-gnueabi

最后保存并退出。重新启动系统,在终端里面执行arm-linux-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 —>

然后选中“Dont 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所示是嵌入式系统的硬件示意图。

图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和多种NAND FLASH。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 的嵌入式系统应用医院病房管理系统,能满足医院病房、护士站系统提出的语音通信的要求,保证任务完成的实时性、可靠性、实现护士与病人的即时通信。相对于传统的系统更容易实现系统集成和维护。在语音实时通信领域有很好的应用前景。

参 考 文 献

[1]司永卫.实时语言传输系统的设计与软件实现[D].成都:成都理工大学,2011.

[2]飞凌嵌入式.OK6410开发板硬件手册[R].2012.

[3]程昌南.ARM Cortex-A8硬件设计DIY[M].北京:北京航空航天大学出版社.2012.

[4]杨黎明.基于RTP协议的实时语音传输研究与实现[D].武汉:华中科技大学,2007.

[5]史蒂文斯,拉戈,尤晋元,张亚英.UNIX环境高级编程[M].北京:人民邮电出版社,2006.

[6]WALL K.GNU/Linux编程指南(第二版)[M].张辉,译. 北京:清华大学出版社,2002.

[7]刘华,李军红,阳武娇.基于PXA255的VOIP语音传输系统研究[J]. 电子技术,2011(9):79-81.

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

参 考 文 献

[1]司永卫.实时语言传输系统的设计与软件实现[D].成都:成都理工大学,2011.

[2]飞凌嵌入式.OK6410开发板硬件手册[R].2012.

[3]程昌南.ARM Cortex-A8硬件设计DIY[M].北京:北京航空航天大学出版社.2012.

[4]杨黎明.基于RTP协议的实时语音传输研究与实现[D].武汉:华中科技大学,2007.

[5]史蒂文斯,拉戈,尤晋元,张亚英.UNIX环境高级编程[M].北京:人民邮电出版社,2006.

[6]WALL K.GNU/Linux编程指南(第二版)[M].张辉,译. 北京:清华大学出版社,2002.

[7]刘华,李军红,阳武娇.基于PXA255的VOIP语音传输系统研究[J]. 电子技术,2011(9):79-81.

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

参 考 文 献

[1]司永卫.实时语言传输系统的设计与软件实现[D].成都:成都理工大学,2011.

[2]飞凌嵌入式.OK6410开发板硬件手册[R].2012.

[3]程昌南.ARM Cortex-A8硬件设计DIY[M].北京:北京航空航天大学出版社.2012.

[4]杨黎明.基于RTP协议的实时语音传输研究与实现[D].武汉:华中科技大学,2007.

[5]史蒂文斯,拉戈,尤晋元,张亚英.UNIX环境高级编程[M].北京:人民邮电出版社,2006.

[6]WALL K.GNU/Linux编程指南(第二版)[M].张辉,译. 北京:清华大学出版社,2002.

[7]刘华,李军红,阳武娇.基于PXA255的VOIP语音传输系统研究[J]. 电子技术,2011(9):79-81.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!