摘要:各地電梯事故頻發(fā),電梯五方對(duì)講系統(tǒng)是乘客被困后用于緊急求援的重要手段。針對(duì)電梯實(shí)時(shí)通話系統(tǒng)的需求和穩(wěn)定性問(wèn)題,設(shè)計(jì)了一種基于物聯(lián)網(wǎng)的智能電梯監(jiān)控分布式系統(tǒng)的實(shí)現(xiàn)方案,在此基礎(chǔ)上詳細(xì)介紹了基于lwIP的實(shí)時(shí)網(wǎng)絡(luò)通話的軟件實(shí)現(xiàn),并使用Speex語(yǔ)音壓縮技術(shù)減少網(wǎng)絡(luò)帶寬占用,優(yōu)化了通話實(shí)時(shí)性,保證了電梯監(jiān)控中心服務(wù)器在多部電梯通話請(qǐng)求并發(fā)情況下的穩(wěn)定性。
關(guān)鍵詞:電梯監(jiān)控;實(shí)時(shí)通話;網(wǎng)絡(luò)協(xié)議;語(yǔ)音壓縮
0引言
電梯行業(yè)日益發(fā)展,不同小區(qū)的電梯在地域上分布廣,數(shù)量多,導(dǎo)致傳統(tǒng)人工維修和處理故障的方法效率低下,電梯的維修保養(yǎng)成本高昂。
現(xiàn)有的電梯智能監(jiān)控系統(tǒng)[12]中, 往往使用SIM卡作為監(jiān)控?cái)?shù)據(jù)傳輸或通話的載體,但是其通話及網(wǎng)絡(luò)均依賴井道里的信號(hào)強(qiáng)度。每個(gè)小區(qū)電梯需要SIM卡的數(shù)量比較多的情況下,隨著時(shí)間增加,產(chǎn)生了電梯維護(hù)成本高的問(wèn)題。為此,本文開(kāi)發(fā)了一種基于互聯(lián)網(wǎng)的分布式電梯智能監(jiān)控系統(tǒng),實(shí)現(xiàn)了電梯狀態(tài)監(jiān)控和緊急情況下五方實(shí)時(shí)網(wǎng)絡(luò)通話的功能,具有很強(qiáng)的應(yīng)用價(jià)值和前景。
1分布式智能電梯監(jiān)控系統(tǒng)
許多小區(qū)電梯維修或者緊急救援效率低,往往會(huì)影響到人們正常生活和生命安全。隨著智慧城市建設(shè)的展開(kāi),基于物聯(lián)網(wǎng)設(shè)計(jì)一種新型的大規(guī)模分布式電梯智能監(jiān)控系統(tǒng)是必然的趨勢(shì)。
整個(gè)分布式智能電梯監(jiān)控系統(tǒng)由底層監(jiān)控系統(tǒng)、小區(qū)網(wǎng)絡(luò)部分、電梯監(jiān)控服務(wù)中心三部分組成,如圖1所示。底層監(jiān)控系統(tǒng)主控芯片選用意法半導(dǎo)體公司生產(chǎn)的STM32F407,安裝在電梯轎廂頂部監(jiān)控電梯運(yùn)行狀態(tài),且獨(dú)立于電梯運(yùn)行控制系統(tǒng),通過(guò)網(wǎng)絡(luò)連接到單元交換機(jī)。小區(qū)網(wǎng)絡(luò)節(jié)點(diǎn)依托于小區(qū)電梯數(shù)量鋪設(shè),每個(gè)節(jié)點(diǎn)按照設(shè)置規(guī)則管理每部電梯網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)。電梯監(jiān)控服務(wù)中心的主要功能是與各個(gè)小區(qū)網(wǎng)關(guān)節(jié)點(diǎn)網(wǎng)絡(luò)通信,接收各小區(qū)電梯運(yùn)行狀態(tài)數(shù)據(jù)并建立數(shù)據(jù)庫(kù)。在緊急情況發(fā)生時(shí),電梯監(jiān)控服務(wù)中心需要通過(guò)網(wǎng)絡(luò)與轎廂內(nèi)人員實(shí)時(shí)通話。
在每部電梯頂部安裝的底層監(jiān)控系統(tǒng)采集電梯運(yùn)行狀態(tài)和參數(shù),并將其通過(guò)交換機(jī)經(jīng)小區(qū)光纖上傳到電梯監(jiān)控中心,如果出現(xiàn)電梯運(yùn)行異常,電梯監(jiān)控中心能夠及時(shí)收到報(bào)警信息[3]。監(jiān)控中心將電梯出錯(cuò)信息通過(guò)網(wǎng)絡(luò)或者短信推送到小區(qū)附近的維修人員[4],從而提高了電梯維修效率,降低了維修成本。維修人員通過(guò)監(jiān)控系統(tǒng)提供的電梯運(yùn)行狀態(tài)錯(cuò)誤代碼能準(zhǔn)確判斷出運(yùn)行故障,從而節(jié)約維修時(shí)間。
2通話系統(tǒng)技術(shù)實(shí)現(xiàn)
當(dāng)電梯轎廂里緊急按鈕按下時(shí),五方對(duì)講系統(tǒng)啟動(dòng),電梯轎廂與電梯監(jiān)控中心可實(shí)時(shí)進(jìn)行語(yǔ)音通話,底層監(jiān)控系統(tǒng)通過(guò)網(wǎng)絡(luò)發(fā)送與接收通話時(shí)的語(yǔ)音數(shù)據(jù)流。
在本電路系統(tǒng)中,采用LAN8720芯片作為物理層,傳輸協(xié)議采用輕量級(jí)開(kāi)源協(xié)議棧lwIP[5],移植語(yǔ)音壓縮Speex算法對(duì)音頻流進(jìn)行編解碼,從而實(shí)現(xiàn)了低帶寬占用的語(yǔ)音數(shù)據(jù)流的雙向?qū)崟r(shí)傳輸。
通話系統(tǒng)核心程序采用C語(yǔ)言編寫,為保證商業(yè)化使用方便及穩(wěn)定性,單片機(jī)STM32內(nèi)部并未移植類似于RTThread的操作系統(tǒng),采用基本定時(shí)器的中斷方式解決狀態(tài)跳轉(zhuǎn)等問(wèn)題,系統(tǒng)成本低,穩(wěn)定性高。
2.1數(shù)據(jù)流控制
單片機(jī)STM32的直接存儲(chǔ)訪問(wèn)(Direct Memory Access,DMA) 控制器基于總線矩陣與獨(dú)立先入先出隊(duì)列(First Input First Output, FIFO)的結(jié)合,比普通CPU內(nèi)存拷貝操作更加快速[6]。在通話系統(tǒng)中,音頻芯片WM8978音頻采樣的數(shù)據(jù)與STM32內(nèi)部數(shù)組的雙向傳遞通過(guò)DMA技術(shù)能大大減小CPU占用率,并解決了在全雙工對(duì)話時(shí)語(yǔ)音數(shù)據(jù)同步收發(fā)的問(wèn)題。
在移植的lwIP協(xié)議中,接收和發(fā)送以太網(wǎng)數(shù)據(jù)時(shí)STM32和內(nèi)存之間的數(shù)據(jù)交換使用DMA技術(shù)能夠減小每包間相對(duì)延遲,保證對(duì)話流暢度。
2.1.1音頻接收與發(fā)送
在通話系統(tǒng)程序中DMA技術(shù)用于音頻采樣的數(shù)據(jù)流與STM32內(nèi)部數(shù)組緩存空間的數(shù)據(jù)雙向傳遞,可以減少數(shù)據(jù)傳輸?shù)难舆t。
如圖2所示,音頻芯片WM8978與STM32交換數(shù)據(jù)的流程中, DMA總線每次將編碼與解碼需要的數(shù)組填充好后自動(dòng)切換數(shù)組進(jìn)行下一次填充,不涉及CPU操作,節(jié)省數(shù)據(jù)拷貝時(shí)間。每次填充時(shí)根據(jù)標(biāo)志位判定哪個(gè)數(shù)組為空,每幀填充耗時(shí)為20 ms,填充后更改標(biāo)志位并觸發(fā)中斷通知CPU對(duì)數(shù)組里數(shù)據(jù)進(jìn)行編解碼操作。
2.1.2網(wǎng)絡(luò)接收與發(fā)送
每幀語(yǔ)音數(shù)據(jù)經(jīng)過(guò)Speex壓縮算法編碼后,由lwIP協(xié)議循環(huán)發(fā)送到電梯安全監(jiān)控中心。安全監(jiān)控中心將每幀語(yǔ)音數(shù)據(jù)發(fā)送到STM32,STM32接收數(shù)據(jù)后進(jìn)行Speex解碼,再將數(shù)據(jù)發(fā)送至音頻芯片播放。
如圖3所示,通過(guò)lwIP協(xié)議接收時(shí),每幀數(shù)據(jù)(20 B)到達(dá)單片機(jī)時(shí)會(huì)觸發(fā)中斷,接收標(biāo)志位翻轉(zhuǎn)。單片機(jī)STM32檢測(cè)到接收標(biāo)志位后會(huì)進(jìn)行Speex解碼處理,并將標(biāo)志位清零。每幀數(shù)據(jù)解碼后的緩存數(shù)據(jù)大小為320 B,存儲(chǔ)于數(shù)組中并通過(guò)I2S接口發(fā)送到左右聲道播放,同時(shí)音頻芯片I2S接口錄音數(shù)據(jù)流也通過(guò)DMA技術(shù)傳輸?shù)絊TM32芯片。編碼時(shí),通過(guò)檢測(cè)音頻數(shù)據(jù)接收標(biāo)志位判斷DMA已填充數(shù)組(recbuf1[]或recbuf2[]),從而對(duì)錄音數(shù)組進(jìn)行編碼,更新發(fā)送標(biāo)志位,通知lwIP協(xié)議發(fā)送。
在STM32中以太網(wǎng)接收和發(fā)送FIFO緩存數(shù)據(jù),通過(guò)硬件DMA復(fù)制到內(nèi)存中,不需要經(jīng)過(guò)內(nèi)存拷貝memcpy函數(shù)。在無(wú)操作系統(tǒng)的程序框架中,該操作保證數(shù)據(jù)交換時(shí)不占用CPU,相比普通操作系統(tǒng)中雙線程交換數(shù)據(jù)穩(wěn)定性更高。
2.2系統(tǒng)優(yōu)化
實(shí)時(shí)通話時(shí),音頻數(shù)據(jù)需要與電梯監(jiān)控中心協(xié)同收發(fā),要盡量減少通話過(guò)程中因延時(shí)造成的溝通問(wèn)題。
2.2.1網(wǎng)絡(luò)協(xié)議lwIP優(yōu)化
lwIP協(xié)議棧中使用pbuf結(jié)構(gòu)體來(lái)描述以太網(wǎng)中緩存數(shù)據(jù)包,通過(guò)鏈表指針管理數(shù)據(jù)地址。
制約UDP協(xié)議性能的瓶頸之一是內(nèi)存數(shù)據(jù)的拷貝,接收1 KB數(shù)據(jù)包時(shí),內(nèi)存拷貝在底層驅(qū)動(dòng)讀入FIFO中的數(shù)據(jù)后會(huì)拷貝到lwIP協(xié)議棧中的pbuf緩存中,而在用戶需要數(shù)據(jù)包時(shí),協(xié)議棧中對(duì)應(yīng)的拷貝庫(kù)函數(shù)會(huì)將pbuf中數(shù)據(jù)拷貝到用戶開(kāi)辟的內(nèi)存數(shù)組中。整個(gè)數(shù)據(jù)流程約占用總接收時(shí)間的一半[7],導(dǎo)致數(shù)據(jù)包延遲和處理器低效。
單片機(jī)頻繁接收數(shù)據(jù)會(huì)太過(guò)占用內(nèi)存,同時(shí)因解碼時(shí)間相對(duì)長(zhǎng),會(huì)存在緩沖棧溢出的問(wèn)題。普通中斷方式接收對(duì)話數(shù)據(jù)時(shí),會(huì)導(dǎo)致CPU頻繁進(jìn)入中斷降低效率,造成對(duì)話較大延遲甚至丟包的現(xiàn)象。
在本系統(tǒng)中修改lwIP源代碼[8],對(duì)lwIP協(xié)議內(nèi)存占用率進(jìn)行了很大改進(jìn),協(xié)議棧中內(nèi)存拷貝不通過(guò)CPU,而是采用STM32 的DMA控制器接收和發(fā)送數(shù)據(jù)。
如圖4所示,STM32以太網(wǎng)DMA控制器描述符采用鏈?zhǔn)浇Y(jié)構(gòu),每個(gè)描述符都有相應(yīng)指針存儲(chǔ)緩沖區(qū)地址,當(dāng)以太網(wǎng)數(shù)據(jù)包比較大的時(shí)候會(huì)跨越多個(gè)描述符存儲(chǔ)。描述符列表的最后一個(gè)描述符會(huì)指向第一個(gè),形成鏈?zhǔn)浇Y(jié)構(gòu)[9]。
發(fā)送或接收時(shí),每個(gè)描述符緩沖區(qū)存儲(chǔ)設(shè)置為1 KB大小,STM32芯片中硬件DMA控制器直接參與以太網(wǎng)數(shù)據(jù)交換。CPU不用參與數(shù)據(jù)拷貝,相比于普通方式效率提高一倍,并且大幅減小了CPU與中斷線負(fù)擔(dān)。 如表1所示,若單片機(jī)工作頻率為100 MHz,那么CPU拷貝每幀數(shù)據(jù)需要花費(fèi)的時(shí)間約為3.3 μs。通過(guò)DMA總線操作能將這部分時(shí)間省略掉,提高效率,也能將CPU空閑出來(lái)用于表1優(yōu)化前后運(yùn)行時(shí)間比較拷貝時(shí)間/μs優(yōu)化前3.30優(yōu)化后0處理其他函數(shù)。
2.2.2語(yǔ)音壓縮與帶寬優(yōu)化
在大型分布式電梯管理系統(tǒng)中,并發(fā)情況下多部電梯請(qǐng)求五方對(duì)講通話時(shí)對(duì)電梯控制中心服務(wù)器的帶寬壓力非常大,會(huì)導(dǎo)致對(duì)話延時(shí)、服務(wù)器死機(jī)等諸多問(wèn)題,因此需要減少單部電梯占用的帶寬。
語(yǔ)音芯片采樣率為8 kHz,采樣位數(shù)為16位,每秒通過(guò)DMA控制器的錄音或放音數(shù)據(jù)大小為31.25 KB。在系統(tǒng)沒(méi)有移植Speex語(yǔ)音壓縮算法前,每秒由單片機(jī)傳輸?shù)奖O(jiān)控中心的錄放音數(shù)據(jù)大小都為31.25 KB,那么每部電梯所占上下行帶寬比較大,均為512 Kb/s。因此在多小區(qū)分布式電梯智能管理系統(tǒng)中,需要解決音頻流數(shù)據(jù)流太大的問(wèn)題。
Speex壓縮算法是一種基于碼激勵(lì)線性預(yù)測(cè)編碼(Code Excited Linear Prediction,CELP)技術(shù)的語(yǔ)音壓縮算法[910],在網(wǎng)絡(luò)通話中有著極強(qiáng)的應(yīng)用性[11]。
線性預(yù)測(cè)編碼(Linear Predictive Coding, LPC)使用過(guò)去樣值對(duì)新樣值進(jìn)行預(yù)測(cè),計(jì)算出最小誤差信號(hào)。設(shè)樣值序列為x1,x2…,xN,預(yù)測(cè)序列為y1,y2…,yN,則:
進(jìn)行線性預(yù)測(cè)分析得到一組線性預(yù)測(cè)系數(shù)a1,a2…,aN,使得在該幀語(yǔ)音波形中均方預(yù)測(cè)誤差E最小。
式中L為線性預(yù)測(cè)器階數(shù)。由于誤差信號(hào)動(dòng)態(tài)范圍比樣本值小,對(duì)誤差信號(hào)進(jìn)行量化編碼可以有效降低編碼比特位數(shù)。
如圖5所示,Speex算法解碼過(guò)程中,激勵(lì)信號(hào)e[n]是由基音尖峰預(yù)測(cè)信號(hào)與固定碼書(shū)激勵(lì)信號(hào)c[n]加權(quán)得到的。
e[n]=βe[n-T]+c[n](3)
式中T為尖峰周期,β為尖峰增益。e[n]通過(guò)感知加權(quán)合成濾波器,使得在該幀語(yǔ)音波形中均方預(yù)測(cè)誤差最小,從而合成出語(yǔ)音數(shù)據(jù)。
在窄帶模式(采樣率8 kHz)下,每幀數(shù)據(jù)信號(hào)長(zhǎng)度為20 ms,將其分為4個(gè)長(zhǎng)度為5 ms的子幀。對(duì)每個(gè)子幀確定基音預(yù)測(cè)系數(shù),并用固定碼本中某一激勵(lì)矢量經(jīng)過(guò)加權(quán)合成濾波器并求解最小均方誤差方程,從而選取到最佳激勵(lì)矢量計(jì)算誤差信號(hào)并進(jìn)行量化編碼。解碼時(shí)借助于合成濾波器,將最佳激勵(lì)信號(hào)通過(guò)濾波器產(chǎn)生近似合成語(yǔ)音。
如圖6所示,實(shí)時(shí)網(wǎng)絡(luò)通話時(shí),每部電梯與音頻芯片交換的音頻數(shù)據(jù)流速率為62.50 KB/s,單部電梯通話時(shí)所占網(wǎng)絡(luò)實(shí)際帶寬為512 Kb/s。經(jīng)單片機(jī)STM32移植的Speex算法處理后,與電梯控制中心交換的上下行數(shù)據(jù)流約為1.95 KB,所占網(wǎng)絡(luò)實(shí)際帶寬減少為15.625 Kb/s。
本系統(tǒng)中通過(guò)單片機(jī)移植Speex算法實(shí)現(xiàn)音頻流壓縮編解碼,使得每秒語(yǔ)音上下行占用帶寬大大減小,降低了智能電梯管理系統(tǒng)對(duì)服務(wù)器性能的要求,使得電梯智能監(jiān)控中心能夠同時(shí)管理幾千余部電梯。
3結(jié)論
本文提出了基于物聯(lián)網(wǎng)的分布式智能電梯監(jiān)控系統(tǒng)設(shè)計(jì)方案和電梯五方實(shí)時(shí)通話的技術(shù)實(shí)現(xiàn)流程。該系統(tǒng)為保證硬件工作的穩(wěn)定性,不移植操作系統(tǒng),而是修改移植網(wǎng)絡(luò)協(xié)議lwIP實(shí)現(xiàn)系統(tǒng)網(wǎng)絡(luò)連接,并通過(guò)STM32芯片DMA功能同步控制音頻流,實(shí)現(xiàn)了全雙工實(shí)時(shí)網(wǎng)絡(luò)通話,優(yōu)化了通話延時(shí)。在大型分布式電梯管理系統(tǒng)中,底層硬件通過(guò)移植Speex語(yǔ)音壓縮編解碼算法將網(wǎng)絡(luò)帶寬占用減少至原來(lái)的1/32,極大減少了單部電梯的帶寬占用,滿足了智能工業(yè)應(yīng)用的生產(chǎn)需求和大規(guī)模使用要求。
參考文獻(xiàn)
[1] 吳衛(wèi), 鄭建立, 孫佳新. 基于 RFID 電梯遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微型機(jī)與應(yīng)用,2011,30(3): 9294.
[2] 閆學(xué)勤, 謝麗蓉,程志江,等. ZigBee+ 3G 網(wǎng)絡(luò)在新型井道式電梯監(jiān)控系統(tǒng)中的應(yīng)用[J]. 自動(dòng)化儀表,2015,36(1):14.
[3] 李保禮. 電梯實(shí)時(shí)監(jiān)控與故障報(bào)警系統(tǒng)設(shè)計(jì)研究[J]. 中國(guó)機(jī)械,2014(15):10.
[4] 祝尊震, 蘇宇,張玉亮,等. 基于物聯(lián)網(wǎng)技術(shù)的電梯安全管理系統(tǒng)[J]. 微型機(jī)與應(yīng)用,2015,34(1):7274.
[5] DUNKELS A. Design and implementation of the lwIP TCP/IP stack[J]. Swedish Institute of Computer Science, 2001(27): 7792.
[6] ST Microelectronics. STM32F405xx and STM32F407xx advanced ARMbased 32bit MCUs reference manual[DB/OL].(2015xxxx)[20160228]http://www.st.com/stweb-ui/static/active/cn/resource/technical/document/reference_manual/DM00031020.pdf.
[7] 徐鑫,曹奇英. 基于 LwIP 協(xié)議棧的 UDP 協(xié)議分析與優(yōu)化[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2011, 28(3): 246249.
[8] DUNKELS A. LwIP source code[EB/OL].(2008323)[20160229] http://download.savannah.nongnu.org/release/lwip/lwip1.3.0.zip.
[9] 施純啟,吳景東.LwIP在LPC23/24XX以太網(wǎng)MAC控制器上的移植與應(yīng)用[J].微型機(jī)與應(yīng)用,2014,33(19):6770,75.
[10] VALIN J M. The Speex codec manual version 1.2 Beta 3[Z].Xiph.org Foundation,2007.
[11] 謝曉鋼,蔡駿,陳奇川,等.基于Speex語(yǔ)音引擎的VoIP系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2007,24(12):320323.