【雕爺學編程】Arduino動手做(137)---MT8870語音解碼

37款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來—小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一百三十七:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

知識點:MT8870芯片
音調(diào)譯碼器(Tone Decoder)是 MITEL 公司所開發(fā)生產(chǎn)為一顆常用復頻譯碼 IC,這個電路可以接收 DTMF 信號,是一個完整的 DTMF 接收器。它接收了 DTMF 信號后,內(nèi)部將信號分成高頻帶和低頻帶,并將此信號送至數(shù)字譯碼器,然后將訊號送至數(shù)字譯碼器以解出按鍵值,接著將解出的按鍵值以二進制的方式以四條線(Q1、Q2、Q3、Q4)輸出到外部共享 Bus 上,其MT8870 接腳說明如表 1 及內(nèi)部結(jié)構(gòu)如圖 2。值得一提的是,當 MT8870 解出一個按鍵值且輸出到外部時,其 STD 接腳會由低態(tài)升為高態(tài),經(jīng)一段時間后再降為低態(tài),我們便可利用此特點偵測到此腳有訊號時便馬上將 Q1-Q4 接腳所產(chǎn)生的值讀入 CPU,然后解出電話的按鍵值。




DTMF
雙音多頻 DTMF(Dual Tone Multi Frequency),雙音多頻,由高頻群和低頻群組成,高低頻群各包含4個頻率。一個高頻信號和一個低頻信號疊加組成一個組合信號,代表一個數(shù)字。DTMF信號有16個編碼。利用DTMF信令可選擇呼叫相應(yīng)的對講機。
在編碼時將擊鍵或數(shù)字信息轉(zhuǎn)換成雙音信號并發(fā)送,解碼時在收到的DTMF信號中檢測擊鍵或數(shù)字信息的存在性。一個DTMF信號由兩個頻率的音頻信號疊加構(gòu)成。這兩個音頻信號的頻率來自兩組預分配的頻率組:行頻組或列頻組。每一對這樣的音頻信號唯一表示一個數(shù)字或符號。電話機中通常有16個按鍵,其中有10個數(shù)字鍵0~9和6個功能鍵*、#、A、B、C、D。由于按照組合原理,一般應(yīng)有8種不同的單音頻信號。因此可采用的頻率也有8種,故稱之為多頻,又因它采用分別從高低頻中任意抽出1種進行組合來進行編碼,所以又稱之為“8中取2”的編碼技術(shù)。根據(jù)CCITT的建議,國際上采用的多種頻率為697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8種。用這8種頻率可形成16種不同的組合,從而代表16種不同的數(shù)字或功能鍵。

MT8870語音解碼模塊
1、板載MT8870復頻譯碼芯片
2、板載語音輸入接口
3、板載5個LED指示燈,方便查看輸出狀態(tài)
4、芯片主要管腳基本都已經(jīng)引出
5、PCB尺寸:26.5(mm)x24.5(mm)

模塊參考電原理圖

雙音多頻信號(DTMF)
電話系統(tǒng)中電話機與交換機之間的一種用戶信令,通常用于發(fā)送被叫號碼。
在使用雙音多頻信號之前,電話系統(tǒng)中使用一連串的斷續(xù)脈沖來傳送被叫號碼,稱為脈沖撥號。脈沖撥號需要電信局中的操作員手工完成長途接續(xù)(早期方法,很老很古董)。
雙音多頻信號是貝爾實驗室發(fā)明的,其目的是為了自動完成長途呼叫。
雙音多頻的撥號鍵盤是4×4的矩陣,每一行代表一個低頻,每一列代表一個高頻。每按一個鍵就發(fā)送一個高頻和低頻的正弦信號組合,比如'1'相當于697和1209赫茲(Hz)。交換機可以解碼這些頻率組合并確定所對應(yīng)的按鍵。
雙音多頻(DTMF)是由貝爾實驗室開發(fā)的信令方式,通過承載語音的模擬電話線傳送電話撥號信息。每個數(shù)字利用兩個不同頻率突發(fā)模式的正弦波編碼,選擇雙音方式是由于它能夠可靠地將撥號信息從語音中區(qū)分出來。一般情況下,聲音信號很難造成對DTMF接收器的錯誤觸發(fā)。DTMF是“TouchTone” (早期AT&T的商標)的基礎(chǔ), 替代機械式撥號轉(zhuǎn)盤的按鍵。

DTMF編碼器
基于兩個二階數(shù)字正弦波振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻。向DSP裝入相應(yīng)的系數(shù)和初始條件,就可以只用兩個振蕩器產(chǎn)生所需的八個音頻信號。典型的DTMF信號頻率范圍是700~1700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。DTMF雙音頻信號由兩個二階數(shù)字正弦振蕩器產(chǎn)生,一個用來產(chǎn)生行音頻信號,另一個產(chǎn)生列音頻信號。
CCITT規(guī)定每秒最多按10個鍵,即每個鍵時隙最短為100MS,其中音頻實際持續(xù)時間至少為45MS,不大于55MS,時隙的其他時間內(nèi)保持靜默,因此按鍵產(chǎn)生雙音頻信號時,相繼的兩個信號間隔一段時間;解碼器利用這個時間識別出雙音頻信號,并轉(zhuǎn)換成對應(yīng)的數(shù)字信息,而且要識別出間隙信息。因此流程包含音頻任務(wù)和靜默任務(wù),前者是產(chǎn)生雙音頻采樣值,后者產(chǎn)生靜默樣值,每個任務(wù)結(jié)束時,要重置定時器和下一個任務(wù)。其中靜默任務(wù)還要加上一個任務(wù):從數(shù)字緩沖區(qū)取出數(shù)字并解包。解包就是將數(shù)字映射為對應(yīng)的行列音頻特性,裝載指針指向振蕩器特征表對應(yīng)的正確位置。兩個任務(wù)輪流執(zhí)行。由CCITT(國際電報電話咨詢委員會)的規(guī)定,數(shù)字之間必須有適當長度的靜音,因此編碼器有兩個任務(wù),其一是音頻信號任務(wù),產(chǎn)生雙音樣本,其二是靜音任務(wù),產(chǎn)生靜音樣本。每個任務(wù)結(jié)束后,啟動下一個任務(wù)前(音頻信號任務(wù)或靜音任務(wù)),都必須復位決定其持續(xù)時間的定時器變量。在靜音任務(wù)結(jié)束后,DSP從數(shù)字緩存中調(diào)出下一個數(shù)字,判決該數(shù)字。信號所對應(yīng)的行頻和列頻信號,并根據(jù)不同頻率確定其初始化參數(shù)。
DTMF信號包含兩組音頻信號,解碼器的任務(wù)是通過數(shù)學變換把它從時域轉(zhuǎn)化到頻域,然后得出對應(yīng)的數(shù)字信息。由于芯片處理的是數(shù)字信號,所以必須把輸入信號數(shù)字化,再用DSP芯片處理。頻率檢測時,檢測出DTMF信號的基波及二次諧波,DTMF信號只在基波上有較高的能量,而話音信號則是在基波上疊加有較強的二次諧波,檢測二次諧波的作用是用來區(qū)分DTMF信號與語言和音樂信號。

DTMF特性
DTMF是由低頻組(fb)和高頻組(fa)兩組頻率信號構(gòu)成,每個數(shù)字信號由低頻組和高頻組的任意一個疊加而成。根據(jù)CCITT的建議,DTMF的編譯碼定義可用下式表示 f(t)=A_{a}sin(2f_{a}t)+A_sin(2f_t) 式中兩項分別表示低、高音頻的值,Ab和Aa分別表示低音群合高音群的樣值量化基線,而且兩者幅值比為K=Ab/Aa(0.7<K<0.9)。同時規(guī)定,對應(yīng)于DTMF編譯碼中的標稱頻率在發(fā)送時,DTMF信號的頻率偏差不應(yīng)當超過1.5%,每位數(shù)字的信號極限時長應(yīng)該大于40ms,而接收設(shè)備對2%的偏差應(yīng)能可靠地接收,對30ms~40ms時長的信號可以正常地接收。
與單音編碼不同,DTMF信號是采用8中取2的方式,從高低兩個音組中各取一個音頻復合而成來代表0-9十個號碼和其他功能碼,再加上這8個音頻信號的各頻率間不存在諧波關(guān)系,大大減少了虛假信號的干擾,因而DTMF信號工作可靠性特別是抗干擾能力很強。
DTMF應(yīng)用
DTMF信號即雙音頻信號,最先用于程控電話交換系統(tǒng)來代替號盤脈沖信號,主叫用戶摘機按鍵撥號后,電話號碼所對應(yīng)的DTMF信號通過電話線傳到程控交換機中的DTMF接受電路,交換機中的微機識別被叫電話號碼后,接通主被叫用戶實現(xiàn)雙方通話。
DTMF信號還用于自動控制系統(tǒng),如果把DTMF的發(fā)送電路用于主控系統(tǒng),接收電路用于被控系統(tǒng),就可以方便地組成有線或無線通信系統(tǒng),其通道數(shù)視需要而定,16通道以內(nèi)每通道只需編一位號碼即可,若需要更多通道,則可像電話號碼編號一樣編為兩位或兩位以上的號碼。DTMF信號還被用于部分型號的車載導航終端,用于遠程下發(fā)目的地坐標信息。比如警情自動拔號、DTMF遠程控制系統(tǒng),基于DTMF編解碼的智能家居電話遠程控制系統(tǒng)等。

第一項實驗:用arduino的PWM腳(11、12)合成DTMF雙音多頻編碼信號
??1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
??2、項目測試 :將喇叭貼近電話機話筒,然后發(fā)送要撥的電話號碼到串口,比如10000,即可撥通電話10000
??3、需要材料:喇叭1個,68Ω電阻兩個
??4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
? ???68Ω電阻另一端接喇叭,然后喇叭另一端接地。

通過串口,嘗試輸入10000號碼,手機11位號碼和一個28位的號碼

視頻——第一項實驗:用arduino的PWM腳(11、12)合成DTMF雙音多頻編碼信號
https://v.youku.com/v_show/id_XNDU3MzExODkzMg==.html
Arduino實驗開源代碼
第二項實驗:重復播放合成DTMF雙音多頻8675309撥號音
??1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
??2、項目測試 :發(fā)送電話號碼8675309到串口
??3、需要材料:喇叭1個,68Ω電阻兩個
??4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
? ???68Ω電阻另一端接喇叭,然后喇叭另一端接地。

Arduino實驗場景圖

Arduino實驗開源代碼
DTMF解碼識別模塊實驗視頻
https://v.youku.com/v_show/id_XNDU3OTkzOTA4OA==.html
打開"dtmf.h"庫文件查看,發(fā)現(xiàn)是針對不同硬件模塊的(板上芯片都是MT8870),由于接腳對不上號,故串口輸出的解碼不對的

不同的硬件模塊(板上芯片都是MT8870),名稱為?Arduino DTMF語音識別擴展板 V1.0

Arduino實驗開源代碼
從MT8870 DTMF語音解碼板模塊上,5只解碼LED燈看,是在正常工作,只是串口輸出的數(shù)字,依舊好像不對......

附錄:基于DTMF編解碼的智能家居電話遠程控制系統(tǒng)
本著“環(huán)保與創(chuàng)新”的主題,系統(tǒng)集本地家電控制和監(jiān)控模塊,DTMF編解碼的電話遠程控制和監(jiān)控模塊以及以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊三大模塊為一體,實現(xiàn)智能家居控制。電話遠程控制和以太網(wǎng)遠程控制,不需進行專門的布線,不占用無線電頻率資源,避免了電磁污染。且可以通過以太網(wǎng)實時監(jiān)控家用電器,避免了沒必要的電力資源浪費。
一、本地家電控制和監(jiān)控模塊
此模塊能夠?qū)崟r檢測溫濕度、一氧化碳、煙霧等的數(shù)值或者濃度,并在1602液晶上顯示相關(guān)參數(shù)。當超過一定的警戒線,它還會發(fā)出警報以及通知主系統(tǒng)(AVR 32)出現(xiàn)何種警情,讓主系統(tǒng)進行相關(guān)處理。
二、DTMF編解碼的電話遠程控制和監(jiān)控模塊
此模塊能夠受手機控制,通過手機撥打家里電話來遠程控制家里的電器的開閉,以及當家里出現(xiàn)盜賊或者出現(xiàn)險情(包括火災(zāi)、煤氣泄漏等)時固定電話能及時自動撥打電話通知用戶。
三、以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊
此模塊通過網(wǎng)線接入以太網(wǎng)后,用戶可以通過手機或PC機打開相應(yīng)瀏覽器來遠程控制家里的電器的開閉,以及監(jiān)控家里的溫濕度,煤氣傳感器和煙霧傳感器的數(shù)據(jù)。
2.2 性能要求
一、本地家電控制和監(jiān)控模塊
此模塊性能要求傳感器采集數(shù)據(jù)要實時,而且要快速,采集出來的數(shù)據(jù)經(jīng)過相應(yīng)轉(zhuǎn)換后得到的數(shù)值與實際數(shù)值相差不能超過5%,溫度的精度為0.1℃,濕度的精度為0.5%RH。
二、DTMF編解碼的電話遠程控制和監(jiān)控模塊
此模塊性能要求能響應(yīng)速度快,即有人撥打電話時,此模塊能夠在1S內(nèi)檢測到有電話打入,并記錄下?lián)艽蛉溯斎氲陌存I信息。此外,當要實現(xiàn)自動撥打電話時,要求此模塊模擬按下的電話號碼要準確無誤,確保準確性。
三、以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊
此模塊要求接入互聯(lián)網(wǎng),當用戶瀏覽網(wǎng)頁時,家用電器信息和傳感器數(shù)據(jù)每隔幾秒刷新一次,確保數(shù)據(jù)傳輸?shù)目焖傩院蜏蚀_性。
