王 勉, 郭永剛, 趙高院
(陜西烽火通信技術(shù)有限公司,西安 710075)
雙音多頻信號(Double Tone Multi Frequency)是指電話撥號中脈沖信號和音頻信號中音頻信號的撥號方式。也就是電話撥號時,每按一個鍵,有兩個音頻頻率疊加成一個雙音信號。雙音多頻信號(DTMF)檢測與識別在市場上有著很多成熟的芯片,能夠可靠地完成這一功能;但是隨著設(shè)備體積的縮小,以及對設(shè)備功耗的進一步要求。我們越來越傾向于使用軟件來代替這個芯片。STM32系列屬于ARM CortexTM-M3,是一款高性能、低成本、低功耗的32位RISC處理器?,F(xiàn)如今被廣泛地用于移動設(shè)備的主控制器系統(tǒng)。使用這款芯片來完成DTMF檢測的功能,可以不增加任何成本和功耗。
隨著集成度的不斷提高,MCU的功能在不斷增強,如圖1所示。單片STM32F1系列芯片可以完成諸如液晶顯示、鍵盤掃描、與系統(tǒng)信道通訊,通過USB或者 USART與PC交互數(shù)據(jù),甚至通過以太網(wǎng)物理層PHY芯片,接入Internet。
圖1 中為典型主控示意圖
現(xiàn)如今大多數(shù)主控芯片都集成 ADC,DAC這樣的外設(shè),這使得我們在不用增加任何外圍電路情況下,就能很方便地進行數(shù)據(jù)采集。STM32的AD分辨率是12位的,在CPU主頻56 MHz時。轉(zhuǎn)換時間為1 μs,也就是1MHz的采樣率。
為了減少連線的數(shù)目,MIC和DTMF信號線是復用,兩者的復用是非常合理的,因為音頻信號也要經(jīng)過采樣,然后音頻編碼(俗稱聲碼化)。兩個信號也不會同時有效。這樣一來,也節(jié)省了AD的數(shù)目。但是 MIC產(chǎn)生的音頻信號,有可能會干擾DTMF,造成誤判斷。
圖2 DTMF手柄引腳定義圖
人的語音可以分為清音、濁音兩種。清音的頻譜接近白噪聲,不會對我們的檢測造成影響;濁音從發(fā)聲過程來講是聲帶的震動,通過鼻腔和口腔的共鳴腔形成,有明顯的周期性,在頻譜上有明顯的雙音特性,影響我們的判斷;與DTMF明顯的區(qū)別在于,濁音有明顯的二次諧波分量,因此對二次諧波的判斷,可以幫我區(qū)分話音和DTMF信號。
采樣電路如圖3所示。
圖3 低通濾波器硬件電路
A:因為STM32的引腳的最小電壓輸入為 VSS-0.3 V,音頻信號輸入均值為零,必須為這個信號疊加直流信號,以免造成信號的失真和芯片的損壞;
B:電容C221, C220,電阻 R147, R148組成了簡單的抗混疊濾波器。濾波器只有信號頻率超過了500 kHz時,才能起到很好的抗混疊作用。因為產(chǎn)品中的發(fā)射頻率工作在800 MHz,對發(fā)射主頻能起到很好的抗混疊作用。對于500 kHz以下的干擾信號,和發(fā)射頻率交叉調(diào)制帶來的干擾就無能為力。為了進一步提高可靠性, DTMF手柄與機器的連線必須使用屏蔽線,手柄的地線采用獨立接地來減少ADC采樣前端的干擾。
采樣的語音信號帶寬為300 Hz-3 kHz,為了滿足奈奎斯特采樣法則,我們選擇采樣頻率Fs =8 kHz。這個頻率在u_PCM編碼中也被廣泛采用。
系統(tǒng)采樣率Fs =8kHz,我們要求它的頻率穩(wěn)定度一般為100ppm;而程序運行時間的長短不容易控制,產(chǎn)品中我們采用定時器TIM2,ADC1,DMA1三個外設(shè)協(xié)同工作來完成,從而保證頻率穩(wěn)定度。數(shù)據(jù)采樣流程圖如圖4所示。
圖4 數(shù)據(jù)采樣流程圖
在連續(xù)采樣中,使用這種方法的好處是,不需要CPU的參與,所有的采樣工作都是在硬件上實現(xiàn)了,可靠性好,能夠準確的保證8 kHz的采樣率。缺點是程序移植困難。有些芯片上不支持DMA,就無法實現(xiàn)了;好在現(xiàn)在芯片大多數(shù)都支持這些外設(shè)。
Goertzel算法俗稱戈澤爾算法。它的原理是利用2個極點的IIR濾波器計算離散傅里葉變換,能夠高效地提取頻譜信息。戈澤爾算法描述如下:
(a)從n= 0,…,N遞歸計算
Min(Fr -Fc)= 73Hz
所以Δf<73;
當 Fs=8 kHz;
N>110。
在戈澤爾算法中,雖然N必須取整數(shù),但是對 k的取值沒有限制,而且我們所需要的是:
我們在MATLAB上計算得到 8個頻率所對應(yīng)的CONSTAT_VALUE,因為CPU支持定點運算,存儲類型為 INT16,歸一化處理如下:
在程序計算過程中,N為每次運算的采樣點數(shù)。N值的選擇決定了最小頻率關(guān)系。從上一節(jié)中我們得出:
N>110。
根據(jù)人們的按鍵習慣,每次按鍵的時間大約在60-200 ms左右,機械操作抖動是不可避免的,所以需要去抖動。如果以每采到2次相同按鍵來去抖動,每次的檢測時間不應(yīng)該大于30 ms。
在實際應(yīng)用中,因為使用的是定點運算,所以N 的選擇還要考慮到計算過程中的精度和溢出。戈澤爾算法是DFT的一種快速實現(xiàn),所以DFT的溢出問題在戈澤爾算法中同樣存在。根據(jù)帕塞瓦爾定理:
X(k)2的均方值是x(n)2均方值的N倍,因此如果不采取有效措施,溢出是不可避免的;不僅如此,因為我們要選取的是單音信號,所以有如下公式成立:
這個公式對工程運算十分重要,它直接決定了我們的運算結(jié)果會不會溢出。給我們提供了自動增益控制穩(wěn)態(tài)值的選擇范圍。具體用法如下。
(a) 輸入信號x(t)=A*cos(t); A=3 V, AD的最大動態(tài)范圍
(b) Fs = 8000;
(c) 采樣信號為x(n)= B*cos(n/Fs);
(d) ADC采樣精度為12 bit,考慮到符號位所以B = 210;
(e) CPU的 加 法 器 為32bit,所 以MAX(X(K0)2) =231
利用公式 (13)得到
所以N=64,不滿足 N>110的要求。
為了滿足頻率分辨率的要求,我們只有通過自動增益控制來實現(xiàn)。
我們使用的參考電壓VREF+為3 V。在輸入信號Vpp大于這個動態(tài)范圍時,就會產(chǎn)生溢出。經(jīng)過戈澤爾算法后出現(xiàn)諧波成分,造成誤判斷;當信號幅度過小,沒有足夠的信噪比時,會造成漏判斷。
在AD采樣前,通過硬件電路進行壓縮放大,防止信號超過最大動態(tài)范圍,造成AD溢出。
(1)硬件音頻放大Ssm2167 進行壓縮放大;
圖5 音頻壓縮放大硬件電路
ssm2167的輸入動態(tài)范圍可以達到50 dB,提高了設(shè)備的兼容性。
(2)軟件音頻壓縮,保證DFT運算不溢出。
上一節(jié)中已經(jīng)仔細論證了軟件壓縮的重要性,在此給出程序流圖如圖6所示。
圖6 音頻壓放時序圖
工程測試中,采用 cr-cooledit軟件生成測試音頻文件。通PC耳機插孔接入目標板。測試文件包括:
(1) 標準DTMF測試文件 600 s,每組雙音持續(xù)時間為25 ms。相當于24000個DTMF信號。
(2) 非標準測試文件600 s,每組雙音持續(xù)時間為25ms。
(3) 音樂文件 600 s。
(4) 語音文件 600 s。
輸入動態(tài)范圍測試,音頻輸入1mvRMS—1VRMS,60dB動態(tài)范圍的情況下,標準測試文件能夠準確識別,識別率 100%。在同樣的動態(tài)范圍下,非標準文件,音樂文件,和語音文件的全部拒識,拒識率 100%。
[1] 陳亮,楊吉斌,張雄偉.信號處理算法的實時DSP實現(xiàn)[M].北京:電子工業(yè)出版社,2008.
[2] 金鑫春,旺一鳴.Goertzel 算法下DTMF信號檢測及參數(shù)優(yōu)化[J].現(xiàn)代電子技術(shù),2010(06):152-155.
[3] 弋今朝,張祿林,錢玉美.一種新的基于Goertzel算法的DTMF信號檢測方法[J].通信技術(shù),2002(9):16-18.
[4] International Telecommunication Union . ITU-T Recommendation Q23. Technical Features Of Push - Button Telephone Sets[R]. Switzerland:ITU-T. November 1988.
[5] 丁玉美,高西全.數(shù)字信號處理[M].2版.西安:西安電子科技大學出版社,1994.
[6] 胡廣書.數(shù)字信號處理理論、算法與實現(xiàn)[M].北京:清華大學出版社,2003.
[7] 傅豐林.電子線路基礎(chǔ)[M].西安:西安電子科技大學出版社,2001.
[8] Jean J.Labrosse.嵌入式實時操作系統(tǒng)μC/OS-Ⅱ[M].邵貝貝 譯.北京:北京航空航天大學出版社,2001.