基于Speex的电梯环境下多方通话系统设计

2017-03-31 01:23单雷陈小平王凯华
单片机与嵌入式系统应用 2017年3期
关键词:轮询状态机轿厢

单雷,陈小平,王凯华

(苏州大学 电子信息学院,苏州 215006)

基于Speex的电梯环境下多方通话系统设计

单雷,陈小平,王凯华

(苏州大学 电子信息学院,苏州 215006)

采用STM32F429微处理器为控制核心,通过移植Speex语音库和LwIP轻量级TCP/IP协议栈,采用回声消除、编码解码等语音处理技术,实现了电梯轿厢、机房、物业端、网络远程端的多方实时通话。对于轿厢内的任何突发状况与呼救请求,系统能作到实时响应与监控。以并发状态机的思路进行了软件设计,实时性好、功能性强、易于理解。整个系统结构清晰,基本满足应用需求。

Speex;LwIP;回声消除;并发状态机;多方通话

引 言

电梯作为一种以电动机为动力的垂直升降设备,大大地方便了人们的日常生活,近年来,其安全性也渐渐被人们重视。由于电磁屏蔽现象,大多数通信设备在轿厢内都会暂时失去与外界联络的功能,在发生意外状况时,难免会存在受困人员无法及时联络外界人员的困境。传统的安置于轿厢和机房之间的有线通信设备需要有人长期值守,且多为双方对讲形式,既不能满足紧急状况下多方通话的需求,又大大增加了人力成本。VOIP是近年来快速发展起来的一项新的网络通信技术,但对于电梯环境来说成本较高[1]。本文针对这一现状,设计了一种以32位高性能处理器STM32F429为主控制器,移植Speex语音处理库[2]与LwIP协议栈,结合状态机编程思想,实现轿厢、机房、物业人员、网络远程端的多方通话,达到无间断实时实现轿厢内与外界的通信与低成本的VOIP,不受环境因素干扰。

1 多方通话系统整体设计

电梯多方通话系统主要由GSM通信模块、以太网通信模块、语音处理模块、主控模块、供电模块等部分构成,系统构成如图1所示。轿厢内的语音信号通过语音采集传送到机房的主控模块,一方面,主控模块控制GSM通信模块进行相关操作,实现物业端与机房、轿厢的语音交流;另一方面,主控模块将采集到的语音信号进行编码、回声消除等处理,使用以太网通信模块进行远程传输,实现与远程端的实时通信。

图1 电梯多方通话系统框图

可以在轿厢内安装视频采集设备,远程端上位机软件依托主控模块强大的处理能力,实现视频与语音数据的实时传输;也可以加装存储模块,通过主控模块的USB外设,实现低成本的闭路监控系统。

2 硬件电路设计

2.1 主控模块

主控模块采用STM32F429为控制核心,总体组成如图2所示。此芯片为意法半导体推出的32位Cortex-M4内核处理器,其最高工作频率可达180 MHz,完全满足系统所需的语音数据处理和传输需求,也能应对后续视频处理传输的需要。相对于传统的针对工业控制的处理器而言,这款芯片用来取代当前的结合微处理器和独立数字信号处理器两种处理设备的双片解决方案。内置自适应实时加速技术,在工业标准测试上取得225 DIPS和606 Coremark的成绩,具有低功耗、丰富片上外设(包括各类接口、高分辨A/D、D/A、以太网控制器、LCD控制器、浮点运算模块等)、超强性能等特征。

图2 主控模块框图

图4 语音功放电路图

主控模块是整个系统的核心,通过移植Speex语音处理库和LwIP实现语音数据的处理和传输。同时,通过串口以AT指令的方式控制GSM模块完成与移动设备的连接和通信。片上的ROM还存储了包括系统的版本号在内的各种信息,方便调试查看。板载的A/D和D/A端口用于语音数据的采集和输出,SPI端口则用于控制ENC28J60以太网模块。调试端口则可以查看设备在初始化阶段的运行状况,以及日常的运行日志和运行时间等重要信息。

2.2 语音处理模块

本模块用于语音模拟信号的采集与播放。语音通过驻极体麦克风拾入,配合MAX9812作为语音采集电路,如图3所示。由于人耳能识别、辩听的声音频率范围为30~3 400 Hz,故而设计了通带在300~3 000 Hz之间的二阶有源滤波器,实现对带外噪音的消除,提供给GSM模块和主控模块作为语音输入。

由主控模块和GSM通信模块返回的语音信号经过一个功率放大模块来推动扬声器,功放模块以LM386为核心,输出信号驱动喇叭发声,如图4所示。

2.3 GSM通信模块

GSM通信模块采用普众通信SIM900A无线通信模块,该模块以极低的尺寸和功耗实现语音、SMS、数据和传真信息的高速传输,其支持的电压范围为3.4~4.5 V,休眠状态功耗1.5 mA,物理尺寸为24 mm×24 mm×3 mm。

图3 语音采集电路图

通过其提供的硬件设计手册完成硬件电路的设计,模块提供了两组音频输入与输出接口,为了减少噪声对通话的干扰,都为其配备了滤波电容。

2.4 以太网通信模块

以太网通信模块采用Microchip的ENC28J60以太网控制器,通过SPI总线完成与主控模块数据的传输与控制,速度可达10 Mb/s。移植瑞典计算机科学院开发的轻量级嵌入式TCP/IP协议栈LwIP协议栈,通过UDP协议实现话音数据的网络传输。

3 CELP编码与Speex库语音处理

Speex是一套免费、开源的语音处理库,对于其他编解码器,Speex很适合网络应用,在网络应用上有着自己独特的优势[2]。由于其采用的是CELP编码技术,下面就其原理作简单分析。

3.1 CELP编码技术

CELP的中文含义是码激励线性预测编码(Code Excited Linear Prediction), CELP技术主要包含以下三个部分:

① 建立一个线性预测模型(Linear Prediction Model,LPM)来模拟人的发声器官——声道。

② 通过使用(自适应和固定的)码本作为LP模型的输入(激励)。

③ 在“感知加权领域”中进行闭环搜索。

3.1.1 声源滤波器模型的建立

声源滤波器模型用来模拟声带和声道,它以声带作为音源(激励信号),以声道作为形成最终不同语音的滤波器。声源滤波器模型通常与线性预测技术一起使用,CELP模型就是基于声源滤波器模型的。不同的音素可以由其激励(音源)和频谱(滤波器)来区别:浊音(如元音)是一种类似于周期性信号的激励信号,可以用时域上一段的脉冲周期序列或者频域上一段固定间隔的谐波来表示;类似地,摩擦音(如“s”、“sh”、“f”音)是一种类似于高斯白噪声的激励信号。这两类音素(如“z”、“v”)可以结合成带有浊音性质的摩擦音。

3.1.2 线性预测的原理

线性预测是很多语音编码技术的基础,包括CELP。线性预测的本质是使用信号序列x(n)的过去样本的组合来预测其以后的序列值[3],见式(1)。

这里y(n)预测值就是x(n)的过去的n个样本值的加权求和,预测误差以下式给出:

对LPC分析的目的是寻找最佳系数ai,以此来使得均方误差最小,即寻找满足使得下式最小的ai,见式(3):

通过E对ai求导求最小值,即可解出满足条件的ai。

3.1.3 基音预测

在浊音段,语音信号都是周期性的,因此,在这里通过使用激励和过去的激励的乘积来近似激励信号e(n)的值[3],见式(4):

e(n)≅

式中,T代表基音周期,β代表基音增益。因为激励是在T≫n的情况下由e(n-T)预测得到的,因此称为长时预测。

3.1.4 自适应码本

最终的激励e(n)是由基音预测信号和混合码本中的创新信号叠加而成,因此,将之命名为码激励线性预测(CELP),这里e(n)如下式(5):

在CELP编码中,c(n)是大多数量化值被分配到的地方,它代表了不能从线性预测或者基音预测获得的信息。在z域,将最终信号X(z)表示为式(6):

3.1.5 噪声加权与合成分析

为了最大限度地调节语音质量,CELP编解码器在感知加权域调整以使得噪音误差的均方差最小化,即通过在编码中使用感应噪声的加权滤波器W(z)来对编码器中的误差信号进行处理。

W(z)是一个使用带宽扩展的衍生于线性预测系数(LPC)的零极点加权滤波器,这里可以用合成滤波器1/A(z)来表示频谱的包络线,那么CELP编解码导出的噪音加权滤波器的一般形式表现为式(7)[2]:

在CELP中,合成分析是非常主要的一个原则,即编码(分析)是由在闭环中通过对解码(合成)进行感知分析来完成的。为了使用有限的计算资源来实现实时的编解码,CELP算法被分解成许多小的、更易于管理的模块,并且使用感知加权功能来实现序列搜索。

3.2 Speex库处理过程

3.2.1 预处理

Speex库的预处理被设计在音频编码之前运行,预处理提供了以下三个主要功能[2]:噪声抑制、自动增益控制(AGC)、语音活动检测(VAD)。

降噪指的是用来降低输入信号中的背景噪音量,可以提供更高的语音质量。

自动增益控制(AGC)是一种功能,用来应对在不同阶段输入信号音量差别很大的情况,消除了人工调节麦克风增益的需求,对于VoIP非常有益。

预处理中的语音活动检测(VAD)提供比编解码器中进行的相应步骤要起到更好的效果。

3.2.2 自适应抖动缓冲器

当通过UDP或者RTP协议传输语音(或者其他信息)的时候,可能会丢失包,到达信宿的时候也可能有延迟甚至乱码。抖动缓冲器的目的是对包重新排序,并提供足够长的缓冲(但绝不会有冗余),再将包送去解码。

3.2.3 声学回声消除器

在免提通信系统中,语音从远端传输到本地扬声器播放,这一声音可以被相同空间内的麦克风捕获。如果麦克风捕获的音频被直接传送到远端,那么用户就可以听到自己声音的回声。声学回声消除器被用来在麦克风的声音发回远端之前来消除回声[2]。

4 软件设计

4.1 GSM模块轮询流程设计

GSM模块的轮询程序是本文的要点,在系统完成MCU外设、Speex库、内存管理、LwIP等部分初始化后,需要完成对GSM模块的配置,然后按照程序设计思路进行长时间工作。

程序思路如下:系统工作时,先完成GSM模块的配置,包括联系人读取、Echo消除的配置等,同时串口打印一系列消息(包括信号强度、各功能配置状况等)。在联系人读取部分,系统按照指定格式读取SIM卡内存储的联系人作为系统默认远程联系人,如果读取失败达到一定次数,则会打印错误与LED提示。配置完成后,进入工作轮询流程,同时,每隔10分钟会检测模块是否死机,如果发生死机,会软件重启模块,如果重启失败达到一定次数,会硬件重启模块。在工作轮询流程中,系统会轮询是否有呼出请求或者接入请求,如果有,会进行相应操作,并根据相应结果进行相应的处理。

程序设计时,采用并发状态机的思路[4],分别设置了4个状态机,分别是:AT指令处理状态28个、模块上电状态4个、模块初始化状态14个、工作轮询状态9个,充分保证了系统的实时性与应用性。这其中,AT指令处理状态和工作轮询状态必被主循环调用。工作轮询指引了系统在工作轮询阶段所可能达到的各类不同的阶段,比如空白状态、等待请求状态、呼出状态、呼入接通判断状态、呼出接通判断状态、等待挂断状态、主动挂断状态等;而AT指令处理状态的设置则是为了判断处于模块上电、模块初始化、工作轮询这三个层次中不同状态下AT指令发送成功与否,与GSM模块相应的响应内容是什么,从而指引其余三个层次状态机的走向。

这里给出工作轮询的流程图,如图5所示。

图5 工作轮询流程图

4.2 双缓冲区数据交替编解码设计

为了满足采样定理,将语言信号的采样率定为8 kHz,通过配置相应的ADC、DAC以及定时器完成此工作。

为了实现在Speex编解码的同时使得CPU能实时地通过以太网模块发送和接收语音数据,在Speex库和语音数据的交互之间设立了两个缓冲区[5]。当编解码器在第一个缓冲区工作时,语音I/O级则使用第二个缓冲区。当I/O达到缓冲区的末端,编解码器和I/O级交换缓冲区,编解码器利用第二个缓冲区而I/O级使用第一个缓冲区,反之亦然。

4.3 其他部分

在本文中,ENC28J60是通过单片机的SPI总线来控制的,模块自带外部中断,在中断中可以调用数据读取的相关函数。

在程序中,完成了单片机SPI的初始化,以及对于模块寄存器的读写操作,这一部分,如果想作进一步了解的话,可以阅读ENC28J60的芯片手册。

除此之外,还完成了Systick定时器、串口和DMA、ADC和DMA、DAC、中断分组和各自优先级、Debug窗口等部分的配置。

本文的软件部分完全由自己设计并编写的部分总计有接近三千余行,配合LwIP、Speex库、F4系列标准外设库,基本能够满足本文的要求。

结 语

[1] 杨召青,黄冰,宋钦梅.用于VOIP的G.729A算法的优化改进[J].电子技术应用,2007,33(7):104-106.

[2] Jean-Marc Valin.The Speex Codec Manual Version 1.2 Beta 3,2007.

[3] Vaillancourt T,Salami R,Jelinek M. New post-processing techniques for low bit rate celp codecs[C]//International Conference on Acoustic,Speech and Signal Processing,2015.

[4] 杨刚.基于状态机的嵌入式系统开发[M].北京:清华大学出版社,2010.

[5] ST.AN2812:Vocoder demonstration using a Speex audio codec on STM32F101xx and STM32F103xx microcontrollers,2008.

[6] 张立文,吴迪,宋占伟.基于Speex的嵌入式无线数字音频交互系统[J].吉林大学学报:信息科学版,2013,31(4):353-358.

单雷,主要研究方向为嵌入式开发、数字信号处理;陈小平(教授),主要研究方向为嵌入式系统应用、智能信息处理、虚拟仪器技术;王凯华(工程师),主要研究方向为网络通信。

Multiparty Call System in Elevator Environment Based on Speex

Shan Lei,Chen Xiaoping,Wang Kaihua

(School of Electronic Information,Soochow University,Suzhou 215006,China)

The system transplants Speex speech library and LwIP light-weight TCP/IP protocol stack,and takes the STM32F429 as the control core.Some technologies are applied such as the echo cancellation,coding and decoding of speech processing.The goal of the car,engine room,the property side,network remote terminal of multiparty real-time communication is reached.The system can respond and monitor in real-time for any unexpected situation and request for help in the car.The system software part is designed with the idea of hierarchical state machine.It has good real-time performance,strong function and easy to understand.The whole system has a clear structure and completely meets the design requirements.

Speex;LwIP;echo cancellation;hierarchical state machine;multiparty calls

TN916.34

A

�士然

2016-09-22)

猜你喜欢
轮询状态机轿厢
基于有限状态机的交会对接飞行任务规划方法
轿厢式垂直升降立体车库的研制及应用
安全检查表法在轿厢意外移动风险控制中的应用
基于等概率的ASON业务授权设计∗
电梯轿厢报警装置失效如何处理
一种轿厢在门区意外移动的有效制停原理
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
FPGA设计中状态机安全性研究
基于反熔丝FPGA的有限状态机加固设计