單雷,陳小平,王凱華
(蘇州大學 電子信息學院,蘇州 215006)
基于Speex的電梯環境下多方通話系統設計
單雷,陳小平,王凱華
(蘇州大學 電子信息學院,蘇州 215006)
采用STM32F429微處理器為控制核心,通過移植Speex語音庫和LwIP輕量級TCP/IP協議棧,采用回聲消除、編碼解碼等語音處理技術,實現了電梯轎廂、機房、物業端、網絡遠程端的多方實時通話。對于轎廂內的任何突發狀況與呼救請求,系統能作到實時響應與監控。以并發狀態機的思路進行了軟件設計,實時性好、功能性強、易于理解。整個系統結構清晰,基本滿足應用需求。
Speex;LwIP;回聲消除;并發狀態機;多方通話
電梯作為一種以電動機為動力的垂直升降設備,大大地方便了人們的日常生活,近年來,其安全性也漸漸被人們重視。由于電磁屏蔽現象,大多數通信設備在轎廂內都會暫時失去與外界聯絡的功能,在發生意外狀況時,難免會存在受困人員無法及時聯絡外界人員的困境。傳統的安置于轎廂和機房之間的有線通信設備需要有人長期值守,且多為雙方對講形式,既不能滿足緊急狀況下多方通話的需求,又大大增加了人力成本。VOIP是近年來快速發展起來的一項新的網絡通信技術,但對于電梯環境來說成本較高[1]。本文針對這一現狀,設計了一種以32位高性能處理器STM32F429為主控制器,移植Speex語音處理庫[2]與LwIP協議棧,結合狀態機編程思想,實現轎廂、機房、物業人員、網絡遠程端的多方通話,達到無間斷實時實現轎廂內與外界的通信與低成本的VOIP,不受環境因素干擾。
電梯多方通話系統主要由GSM通信模塊、以太網通信模塊、語音處理模塊、主控模塊、供電模塊等部分構成,系統構成如圖1所示。轎廂內的語音信號通過語音采集傳送到機房的主控模塊,一方面,主控模塊控制GSM通信模塊進行相關操作,實現物業端與機房、轎廂的語音交流;另一方面,主控模塊將采集到的語音信號進行編碼、回聲消除等處理,使用以太網通信模塊進行遠程傳輸,實現與遠程端的實時通信。

圖1 電梯多方通話系統框圖
可以在轎廂內安裝視頻采集設備,遠程端上位機軟件依托主控模塊強大的處理能力,實現視頻與語音數據的實時傳輸;也可以加裝存儲模塊,通過主控模塊的USB外設,實現低成本的閉路監控系統。
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協議實現話音數據的網絡傳輸。
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.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)