




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告DTMF信號(hào)的產(chǎn)生與檢測(cè)1設(shè)計(jì)任務(wù)書(shū)雙音多頻DTMF(DualToneMultiFreque指導(dǎo)老師: 申艷老師ncy)信時(shí)間:2014年7月18日 號(hào)是在 PAC.1-1-按鍵式電話機(jī)上得到廣泛應(yīng)用的音頻撥號(hào)信令,一個(gè)DTMF信號(hào)由兩個(gè)頻率的音頻信號(hào)疊加構(gòu)成。這兩個(gè)音頻信號(hào)的頻率分別來(lái)自兩組預(yù)定義的頻率組:行頻組和列頻組。每組分別包括4個(gè)頻率,據(jù)CCITT的建議,國(guó)際上采用的這些頻率為697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8種。在每組頻率中分別抽出一個(gè)頻率進(jìn)行組合就可以組成16種DTMF編碼,從而代表16種不同的數(shù)字或功能鍵,分別記作0?9、*、#、A、B、C、D。如下圖所示。圖1-1雙音多頻信號(hào)編碼示意圖要用DSP產(chǎn)生DTMF信號(hào),只要產(chǎn)生兩個(gè)正弦波疊加在一起即可;DTMF檢測(cè)時(shí)采用改進(jìn)的Goertzel算法,從頻域搜索兩個(gè)正弦波的存在。實(shí)驗(yàn)?zāi)康恼莆誅TMF信號(hào)的產(chǎn)生和檢測(cè)的DSP設(shè)計(jì)可使學(xué)生更加透徹的理解和應(yīng)用奈奎斯特采樣定理,與實(shí)際應(yīng)用相結(jié)合,提高學(xué)生系統(tǒng)地思考問(wèn)題和解決實(shí)際問(wèn)題的能力。通過(guò)對(duì)DSP信號(hào)處理器及D/A和A/D轉(zhuǎn)換器的編程,可以培養(yǎng)學(xué)生C語(yǔ)言編程能力以及使用DSP硬件平臺(tái)實(shí)現(xiàn)數(shù)字信號(hào)處理算法的能力。技術(shù)指標(biāo)及設(shè)計(jì)要求基本部分1)使用C語(yǔ)言編寫DSP下DTMF信號(hào)的產(chǎn)生程序,要求循環(huán)產(chǎn)生0?9、*、#、A、B、C、D對(duì)應(yīng)的DTMF信號(hào),并且符合CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)。2)使用C語(yǔ)言編寫DSP下DTMF信號(hào)的檢測(cè)程序,檢測(cè)到的DTMF編碼在CCS調(diào)試窗口中顯示,要求既不能漏檢,也不能重復(fù)檢出。DTMF信號(hào)的發(fā)送與接收分別使用不同的實(shí)驗(yàn)板完成。發(fā)揮部分1)使用一個(gè)DSP工程同時(shí)實(shí)現(xiàn)DTMF信號(hào)的發(fā)送和檢測(cè)功能。2)改進(jìn)DTMF信號(hào)的規(guī)定指標(biāo),使每秒內(nèi)可傳送的DTMF編碼加倍。3)發(fā)送的DTMF信號(hào)的幅度在一定范圍內(nèi)可調(diào),此時(shí)仍能完成DTMF信號(hào)的正常檢測(cè)。方案完成情況在實(shí)現(xiàn)基本要求的基礎(chǔ)上,我們又完成了發(fā)揮部分的全部要求:能夠?qū)崿F(xiàn)在一個(gè)DSP實(shí)驗(yàn)箱上同時(shí)實(shí)現(xiàn)自發(fā)自收,基本能實(shí)現(xiàn)無(wú)差錯(cuò)傳輸。通過(guò)改變處理信號(hào)的點(diǎn)數(shù)N的數(shù)值實(shí)現(xiàn)了DTMF信號(hào)編碼加倍,能夠在一秒內(nèi)傳送夠多的數(shù)據(jù)。通過(guò)gel添加滑動(dòng)條的方法實(shí)現(xiàn)輸入信號(hào)幅度可調(diào),并實(shí)現(xiàn)判決門限的自適應(yīng)處理,能隨著幅度的變化自動(dòng)調(diào)整門限的值,進(jìn)而了判決傳輸信號(hào)的正確性。2設(shè)計(jì)內(nèi)容DTMF信號(hào)的的定義雙音多頻(DTMF)信號(hào)是由兩個(gè)不同頻率的信號(hào)疊加而成,設(shè)V(t)為DTMF信號(hào)、V(t)和HV(t)分別為構(gòu)成V(t)的兩個(gè)信號(hào),則它們應(yīng)滿足關(guān)系式(1)。LV(t)=V(t)+V(t) (1)HL根據(jù)CCITT建議,國(guó)際上采用697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz、1633Hz8個(gè)頻率,并將其分成兩個(gè)群,即低頻群和高頻群。從低頻群和高頻群中任意抽出一個(gè)頻率進(jìn)行疊加組合,具有16種組合形式,讓其代表數(shù)字和功率,如表3-1所列,則有關(guān)系式(2)。V(t)=Asin3t+Bsin①t (2)HL其中Asin3t為低頻群的值,Bsin3t為高頻組的值,A、B分別為低頻群和高頻群樣值HL的量化基線,具體見(jiàn)表2-1。X1209133614771633697123A770456B852789C941*0#D表2-1DTMF頻率及其對(duì)應(yīng)的鍵值DTMF信號(hào)生成方法利用math.h采用數(shù)學(xué)方法產(chǎn)生DTMF信號(hào)buffer[k]=sin(2*pi*k*f0/fs)+sin(2*pi*k*f1/fs) (式2-1)f0為行頻頻率,f1為列頻頻率,fs為8000采樣頻率,k為對(duì)信號(hào)的采樣。利用兩個(gè)二階數(shù)字正弦波振蕩器產(chǎn)生DTMF信號(hào)(本課程設(shè)計(jì)實(shí)際采用方法)DTMF編碼器基于兩個(gè)二階數(shù)字正弦波振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。向DSP裝入相應(yīng)的系數(shù)和初始條件,就可以只用兩個(gè)振蕩器產(chǎn)生所需的八個(gè)音頻信號(hào)。典型的DTMF信號(hào)頻率范圍是700?1700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。由數(shù)字振蕩器對(duì)的框圖,可以得到該二階系統(tǒng)函數(shù)的差分方程:二二(式2-2)其中a1=-2cos30,a2=1,30=2nf0/fs,fs為采樣頻率,f0為輸出正弦波的頻率,A為輸出正弦波的幅度。該式初值為y(-1)=0,y(-2)=-Asin30。CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)是,傳送/接收率為每秒10個(gè)數(shù)字,即每個(gè)數(shù)字100ms。代表數(shù)字的音頻信號(hào)必須持續(xù)至少45ms,但不超過(guò)55ms。100ms內(nèi)其他時(shí)間為靜音,以便區(qū)別連續(xù)的兩個(gè)按鍵信號(hào)。編程的流程如圖1所示,由CCITT的規(guī)定,數(shù)字之間必須有適當(dāng)長(zhǎng)度的靜音,因此編碼器有兩個(gè)任務(wù),其一是音頻信號(hào)任務(wù),產(chǎn)生雙音樣本,其二是靜音任務(wù),產(chǎn)生靜音樣本。每個(gè)任務(wù)結(jié)束后,啟動(dòng)下一個(gè)任務(wù)前(音頻信號(hào)任務(wù)或靜音任務(wù)),都必須復(fù)位決定其持續(xù)時(shí)間的定時(shí)器變量。在靜音任務(wù)結(jié)束后,DSP從數(shù)字緩存中調(diào)出下一個(gè)數(shù)字,判決該數(shù)字信號(hào)所對(duì)應(yīng)的行頻和列頻信號(hào),并根據(jù)不同頻率確定其初始化參數(shù)a1=-2cos30與y(-2)=-Asin30。該流程圖可采用C語(yǔ)言實(shí)現(xiàn),雙音信號(hào)的產(chǎn)生則由54x匯編代碼實(shí)現(xiàn)。整個(gè)程序作為C54x的多通道緩沖串口(McBsp)的發(fā)射串口中斷服務(wù)子程序,由外部送入的16000Hz串口時(shí)鐘觸發(fā)中斷,可實(shí)時(shí)處理并通過(guò)D/A轉(zhuǎn)換器輸出DTMF信令信號(hào)。圖2-1DTMF編碼流程DTMF信號(hào)的檢測(cè)方法DTMF信號(hào)的檢測(cè)方法可以有多種。主要分為從信號(hào)時(shí)間域處理和從信號(hào)頻率域處理兩大類。前一種方法包括:過(guò)零點(diǎn)位置檢測(cè)法、信號(hào)峰值位置檢測(cè)法、過(guò)零點(diǎn)位置及信號(hào)幅值檢測(cè)法。其特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,可以通過(guò)MT8880等芯片加上外圍電路實(shí)現(xiàn),易于集成化。缺點(diǎn)是易受干擾,對(duì)信噪比要求高?,F(xiàn)在廣泛應(yīng)用于一般的脈沖撥號(hào)電話機(jī)。通過(guò)神經(jīng)網(wǎng)絡(luò)等輔助判別方法可以大大提高信號(hào)的識(shí)別率。后一種方法包括:頻率判斷、能量判斷兩類。頻率判斷主要通過(guò)濾波器提取DTMF相應(yīng)的頻率信號(hào)進(jìn)行比較判斷,濾波器可以用窄帶、低通、高通濾波器,應(yīng)用方式可以有并聯(lián)、級(jí)聯(lián)、混合聯(lián)接等方式。能量判斷是直接對(duì)DTMF信號(hào)相應(yīng)的能量進(jìn)行計(jì)算,找出高、低頻率群中最強(qiáng)的信號(hào),進(jìn)行判斷,包括有DFT法(DiscreteFourierTransform)、FFT(FastFourierTransform)、Goertzel法等。本次實(shí)驗(yàn)我們采用的是能量判斷法,并采用了Goertzel算法。3設(shè)計(jì)方案、算法原理說(shuō)明Goertzel算法原理Goertzel算法信號(hào)解碼是將兩個(gè)音頻信號(hào)提取出來(lái),并通過(guò)他們的頻率,確定所接受的DTMF數(shù)字。原來(lái)使用模擬技術(shù)音頻信號(hào)頻率進(jìn)行檢測(cè),一般通過(guò)模擬電路進(jìn)行過(guò)零點(diǎn)檢測(cè),通過(guò)零點(diǎn)計(jì)數(shù)完成對(duì)輸入信號(hào)的頻率檢測(cè)。在數(shù)字信號(hào)檢測(cè)電路中,一般使用頻域計(jì)算技術(shù)代替時(shí)域信號(hào)處理。我們可以直接通過(guò)付立葉變換,直接得到輸入的信號(hào)頻率。信號(hào)各個(gè)頻率分量的幅值直接計(jì)算可以使用DFT。對(duì)于N點(diǎn)數(shù)據(jù)序列{x(n)}的DFT為:X(k)=2x(n:Wnk,k=0,1,...,N-1 (式3-1)Nn=0如果用FFT算法來(lái)實(shí)現(xiàn)DFT計(jì)算,計(jì)算將涉及復(fù)數(shù)乘法和加法,并且計(jì)算量為NlogN。2雖然我們可以得到DFT的所有N個(gè)值,然而,如果希望計(jì)算DFT的M個(gè)點(diǎn),并且M<logN時(shí),2可以看到,直接計(jì)算DFT則更加有效。下面我們用到Goertzel法,是一種直接計(jì)算DFT有效
的方法。我們應(yīng)用Goertzel算法對(duì)DTMF信號(hào)的檢測(cè),并且對(duì)其進(jìn)行改進(jìn)。Goertzel算法,從根本上說(shuō),是計(jì)算DFT的一種線性濾波算法,它可以通過(guò)調(diào)整濾波器的中心頻率和帶寬,直接計(jì)算出DFT的系數(shù)。Goertzel算法利用相位因子8k}的周期性。我們可以同時(shí)將DFT運(yùn)算表示為線性濾波得到:(式3-2)(式得到:(式3-2)(式3-3)運(yùn)算,由于W-kN=1,我們可以用該因子對(duì)公式(4)(DFT表達(dá)式)兩邊相乘,NW-kNX&)=X&)=NE1x(n)Wnk*W-kN=NE1X(m)W-k(N-m)N NN Nn=0 m=0我們注意到,上式就是卷積形式??梢远x序列Y(n)為:KY(n)=^x(m:W-k(n-m)
kNm=0顯然,Yk(n)就是長(zhǎng)度為N的有限長(zhǎng)輸入序列Y(n)與具有如下單位脈沖響應(yīng)的濾波器K的卷積:h(n)=W-knu(n) (式3-4)kN2冗可以看到,當(dāng)n=N時(shí),該濾波器的輸出就是DFT在頻點(diǎn)3=竺k值kN即X(k)=Y(n) (式3-5)Kn=N我們可以通過(guò)比較式⑹和式(7)來(lái)驗(yàn)證上式。對(duì)于單位脈沖響應(yīng)為hk(n)的濾波器來(lái)說(shuō),其系統(tǒng)函數(shù)為:H(z)= (式3-6)k 1-W-kz-iN2萬(wàn)這個(gè)濾波器只有一個(gè)位于單位圓上的極點(diǎn),其頻率為3=竺k。因此,可以使用輸入KN數(shù)據(jù)塊通過(guò)N個(gè)并行的單極點(diǎn)濾波器或者諧振器組來(lái)計(jì)算全部的DFT,其中每個(gè)濾波器有一個(gè)位于DFT響應(yīng)頻率的極點(diǎn)。因此,對(duì)于式(7)的卷積計(jì)算,我們可以使用差分方程形式來(lái)表示用式(9)給出的濾波器,通過(guò)迭代的方法計(jì)算Y(n),從而得出DFT的計(jì)算結(jié)果:Ky(n)=W-ky(n-1)+x(n)y(-1)二0 (式3-7)k Nk k計(jì)算涉及復(fù)數(shù)加法和復(fù)數(shù)乘法,計(jì)算量大。由于我們只需要計(jì)算幅值信息,而不關(guān)心相位信息。我們?cè)趩挝粓A上另外引入一個(gè)極點(diǎn),與原有的極點(diǎn)形成一對(duì)共扼極點(diǎn)。將兩個(gè)濾波器組成一對(duì)復(fù)數(shù)共軛極點(diǎn)的諧振器。原有的單極點(diǎn)濾波器計(jì)算方式變成形如式(10)的方式。其系統(tǒng)函數(shù)為:(式3-8)H(z)= 1-WNZ;(式3-8)z 1-2cos(2兀kN)z-i+z-2上式中:Wk=ejMk/N,為差分方程的系數(shù)。由于引入了復(fù)數(shù)共扼極點(diǎn),避免了(式N中復(fù)雜的復(fù)數(shù)加法和復(fù)數(shù)乘法。顯然,對(duì)式(10)無(wú)法進(jìn)行直接計(jì)算。為了便于計(jì)算實(shí)現(xiàn),我們引入中間變量Q<n),將k式(9)表示為差分方程形式:Q(n)=2*cos 義Q(n-1)-Q(n-2)+x(n) (式3-9)k IN)kk式中,初始條件為:Q(—1)=Q(—2)=0,n=0,1,...,NkkX(k)=Y(N)=Q(N)-WkxQ(N-1) (式3-10)k k Nk2口k其中,Wk=enNGoertzel算法改進(jìn)與實(shí)現(xiàn)Goertzel算法是計(jì)算離散傅立葉變換的方法,需要計(jì)算的頻率點(diǎn)數(shù)不超過(guò)21092N時(shí)Goertzel算法將比FFT(FastFourierTransform)更為有效。Goertzel算法相當(dāng)于一個(gè)二階IIR濾波器,(10)式是它的轉(zhuǎn)移函數(shù)我們可以根據(jù)(10)式畫出改進(jìn)Goertzel算法的模擬框圖,如圖3-1所示x(nx(n)y(n)k-1圖3-1Goertzel算法的模擬框圖圖2中可看到,整個(gè)計(jì)算過(guò)程分為兩部分:前向通路式(11)和反饋通路式(12)。顯然,對(duì)于式(11)的遞推關(guān)系計(jì)算需要重復(fù)N=1,?,N重復(fù)N+1次,但是式(12)中的反向計(jì)算只需要在n=N時(shí)計(jì)算一淡。每次計(jì)算只需要計(jì)算一次實(shí)數(shù)乘法和兩次實(shí)數(shù)加法。所以,對(duì)實(shí)數(shù)序列x(n),由于對(duì)稱性,用這種算法求出X(k)和X(N-k)的值需要N+1次實(shí)數(shù)乘法運(yùn)算。
我們現(xiàn)在可應(yīng)用Goertzel算法完成實(shí)現(xiàn)DTMF解碼器了。由于有8種可能的音頻信號(hào)需要檢測(cè)。所以需要至少8個(gè)由式(9)給出的濾波器,將每個(gè)濾波器調(diào)諧到這8個(gè)頻率值上。在完成信號(hào)判決時(shí),我們并不需要相位信息,只需要幅值信息|X(k)|。因此,對(duì)式(12)兩邊進(jìn)行平方,計(jì)算幅度的平方值|X(k)|2。我們將遞推方程式(9,11,12)進(jìn)一步簡(jiǎn)化,得到濾波器計(jì)算的前向部分的簡(jiǎn)化表達(dá)方式,即濾波表達(dá)式的分子項(xiàng)部分:由于我們只需要幅值信息,不需要相位信息,因此,對(duì)前向部分進(jìn)行改進(jìn),輸出幅度平方值。|X(k)2=y(N)y*(N)=Q2(N)+Q2(N—1)2cos至Q(N)Q(N—1)(式3-1)11kk k k Nkk改進(jìn)Goertzel算法原理小結(jié)在式(12)中可以使用A,B分別代替遞歸項(xiàng),令A(yù)=Q(N-1),B=Q(N-2)將離散付kk里葉變換DFT的改進(jìn)計(jì)算過(guò)程總結(jié)寫為:|y(N)2=A2+B2—ABcoef (式3-2)1kl k其中coef=其中coef=2cos—k,|y(N)2二|X(k)2
1kli1可以看到,由于上面兩式中:忽略相位信息,使用實(shí)數(shù)運(yùn)算,無(wú)復(fù)數(shù)運(yùn)算。等式右邊全部是實(shí)數(shù)運(yùn)算,大大提高了運(yùn)算速度,降低計(jì)算量。實(shí)際實(shí)現(xiàn)中誤差分析舍入誤差問(wèn)題我們?cè)俅位氐焦?-1進(jìn)行分析:X(k)2=y(N)y*(N)=Q2(N-1)-2cos過(guò)Q(N)Q(N—1)(式3-1)kk K NKK簡(jiǎn)單地說(shuō),在實(shí)際的)SP實(shí)現(xiàn)中將使用(4)式和(6)式來(lái)得到DTMF信號(hào)的頻譜信息,(4)式實(shí)際就是一個(gè)遞歸線性濾波器的表達(dá)式,它在n=0???N之間進(jìn)行循環(huán)。每個(gè)樣點(diǎn)對(duì)公式(6)進(jìn)行了一次計(jì)算。在這個(gè)算法中,DTMF頻率(fi)變換成了離散傅立葉系數(shù)(k),它們之間存在如下關(guān)系:fk二=£,這里,N是濾波器的長(zhǎng)度,f是采樣頻率。在給定的采樣頻率下,我們可以fN ss通過(guò)調(diào)整N和K值,得到相應(yīng)的DTMF頻率(f)上的能量幅值。i但是,由于k和N是整數(shù),有可能不能取到合適的DTMF頻率(fi)。實(shí)際上,計(jì)算時(shí)如果采用FFT變換,計(jì)算字長(zhǎng)N將被限定為2得n次方,每次計(jì)算可以同時(shí)得到N/2個(gè)頻率點(diǎn)的幅度值。而對(duì)于DFT或Goertzel算法來(lái)說(shuō),對(duì)于N長(zhǎng)度的算法,其可以分辨的最高頻率為采樣頻率的一半。其輸出序列為{X(0)、X(1)……,X(N)}對(duì)應(yīng)的信號(hào)計(jì)算頻率為fi,i=0,1,…,N。所以,我們可以知道,可計(jì)算的信號(hào)頻率存在一定的限制。式(4-12)給出了Goertzel算法的頻率分辨率。對(duì)于不是正好在輸出序列計(jì)算點(diǎn)上的信號(hào)頻率,其計(jì)算結(jié)果分布在相近的頻率值上,將會(huì)出現(xiàn)泄漏,這不是我們所期望的。計(jì)算字長(zhǎng)N的問(wèn)題提出N和k的選擇不同,計(jì)算的誤差會(huì)有很大不同??s小N值,將顯著減少計(jì)算量,所以N值的選取,是完成實(shí)時(shí)計(jì)算的核心。在相關(guān)文獻(xiàn)中,N值的選取也有很大的不同。有使用16個(gè)106字長(zhǎng)計(jì)算完成信號(hào)監(jiān)測(cè)及語(yǔ)音檢測(cè)的,也有使用105字長(zhǎng)或205字長(zhǎng)完成Goertzel算法完成檢測(cè)的,由此我們提出這樣一個(gè)問(wèn)題,在文所利用的Goertzel算法中,進(jìn)行DTMF信號(hào)檢測(cè)的最佳字長(zhǎng)是多少?由采樣頻率公式可知,在采樣率一定的情況下,N值的取值同時(shí)決定Goertzel算法計(jì)算時(shí)對(duì)應(yīng)的頻率,即Goertzel濾波器的中心頻率。通過(guò)改變N值,計(jì)算出我們感興趣的對(duì)應(yīng)一組k值,即完成DTMF頻率檢測(cè)。但是,由式(14)可知k取整數(shù),計(jì)算中心頻率的位置與實(shí)際的DTMF頻率必然會(huì)產(chǎn)生一定的舍入誤差。我們將Goertzel算法中的中心頻率與實(shí)際的DTMF頻率的差值定義為D??梢杂?jì)算出D的最大值為ffDmax=二,當(dāng)k的誤差A(yù)k=0.5時(shí),對(duì)應(yīng)的頻率百分比為:,f,為所需計(jì)算的2N 2NfdtmfdtmfDTMF頻率。這實(shí)際上是DTMF頻率位于“所計(jì)算的信號(hào)窗口的邊緣”。當(dāng)N值取較大值時(shí),同時(shí)采取較高的采樣頻率可以取得較準(zhǔn)確的檢測(cè)結(jié)果,但是也加大了計(jì)算量。由于N的取值,影響了計(jì)算時(shí)的Goertzel濾波器的中心頻率的位置。實(shí)際應(yīng)用中,首先需要確定N,同時(shí)對(duì)應(yīng)不同的DTMF頻率,取相應(yīng)的k值,通過(guò)Goertzel算法,得到相應(yīng)的X(k)??梢钥吹?,N的取值是Goertzel算法設(shè)計(jì)DTMF信號(hào)檢測(cè)器的關(guān)鍵,它直接決定了檢測(cè)器的性能及對(duì)ITU建議的滿足性。以下討論在滿足ITU要求的情況下,尋找的N值的過(guò)程,同時(shí),我們?cè)谶@里討論的是誤差的百分比,因此,可以通過(guò)計(jì)算點(diǎn)數(shù)的誤差百分比來(lái)估計(jì)頻率的百分比。Goertzel算法中N的選擇要求N的選擇應(yīng)考慮如下的因素:頻率偏移度不但要求主瓣寬度存在一定的范圍之內(nèi),同時(shí)也和計(jì)算窗口中心頻率有關(guān)。Goertzel算法種計(jì)算長(zhǎng)度N的取值也影響到計(jì)算窗口中心頻率的取值。例如,如果N=125,fs=8000Hz,對(duì)于770Hz信號(hào)的完成檢測(cè),頻域分辨率為8000/125=64Hz,ITU規(guī)定的對(duì)于頻率誤差大于3.5%的信號(hào)拒識(shí),即對(duì)于770Hz信號(hào)為中心,寬度為743.05到769.95。39.0Hz的頻率分辨率將矗立的信號(hào)為780.488Hz為中心,其他范圍的頻率則不滿足規(guī)定要求。舍入誤差的尋優(yōu)f根據(jù)k=N義t,在Goertzel算法進(jìn)行遞歸計(jì)算時(shí)k要取整數(shù),因而存在舍入誤差。舍fs入誤差是隨機(jī)和離散的,不同的N值和不同的鼻舍入誤差是不同的,因此造成的頻率的偏移也是不同的。由于k的舍入誤差反映的是頻率的偏移,因此必須兼顧每個(gè)頻率,選擇女舍入誤差小得N值。表3-1列出了當(dāng)N=125時(shí),不同的頻率k值的舍入誤差,表3-2列出了當(dāng)N=205時(shí),不同的頻率k值的舍入誤差.信號(hào)頻率(Hz)k計(jì)算值k相對(duì)偏差(%)
67910.891111.077012.031120.385213.313132.394114.703152.0120918.891190.6133620.875210.6147723.078230.3163325.516252.0表3-1N=125時(shí)不同的頻率值k的舍入誤差85221.833220.894124.113240.5120930.981310.1133634.235340.7147737.848380.4163341.846420.4表3-2N=205時(shí)不同的頻率值k的舍入誤差由于k的舍入誤差反映的是頻率的偏移,因此必須選擇女舍入誤差小的N值。同時(shí)還要兼顧每個(gè)頻率,每個(gè)頻率卜舍入誤差都比較小,或者盡可能的都取“舍”或者都取“入”,這樣就會(huì)使偏移比較小或者都向同一個(gè)方向偏移。復(fù)雜度比較直接計(jì)算離散傅里葉變換,對(duì)于每一個(gè)k值,需要4N次實(shí)數(shù)乘法及4N-2次的實(shí)數(shù)加法,N點(diǎn)的傅里葉變換需要4N2次實(shí)數(shù)乘法及N(4N-2)次實(shí)數(shù)加法,因此,采用直接法計(jì)算的計(jì)算復(fù)雜度為O(N2)。對(duì)于Goertzel算法來(lái)說(shuō)。其輸入的乂(口)2工是復(fù)數(shù),每計(jì)算一個(gè)新輸出Y值需要做四次實(shí)數(shù)加法和四次實(shí)數(shù)乘法。由于我們只需要幅值信息,對(duì)于相位信息可以忽略,通過(guò)變換得到幅值信息。因此,共需要N+l次實(shí)數(shù)乘法,計(jì)算復(fù)雜度為O(Nm)。對(duì)于單個(gè)解碼器來(lái)說(shuō),對(duì)于每次成功完成DTMF信號(hào)解碼的時(shí)間估計(jì)十分重要。通過(guò)對(duì)解碼器的處理時(shí)間估計(jì),我們可以得到其處理性能,通過(guò)對(duì)處理性能評(píng)價(jià),就可以預(yù)計(jì)單個(gè)解碼器工作時(shí)可以承載的最大信道個(gè)數(shù)。在這里,定義DTMF解碼器成功完成兩個(gè)DTMF信號(hào)解碼之間所耗費(fèi)的時(shí)間可以這樣估算:每處理一個(gè)采樣樣本的時(shí)間間隔允許的最大值為:1T二—二125rs (式3-3)sfs前向計(jì)算所需的時(shí)間為:N*Ts可以看到,計(jì)算時(shí)間主要決定于計(jì)算字長(zhǎng)N。對(duì)于每一個(gè)需要檢測(cè)的頻率,都必須進(jìn)行(N+4)次實(shí)數(shù)乘法和(N十2)次加法。檢測(cè)8個(gè)DTMF頻率需要的總共的計(jì)算量為:(8N+32)次乘法與(16N十16)次實(shí)數(shù)加法。算法流程圖圖4-1程序算法流程圖源程序注釋初始化程序//*****************************初始化**********************************//InitializeCSLlibrary-ThisisREQUIRED!!!CSL_init();//Themainfrequencyofsystemis240MHz//該頻率是為了設(shè)置IIC模塊的需要設(shè)置的,為了使用I2C_setup函數(shù)PLL_setFreq(1,0xC,0,1,3,3,0);//EMIF初始化Emif_Config();//OpenMcBSPport1andgetaMcBSPtypehandlehMcbsp=MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);//ConfigMcBSPport1byusepreviouslydefinedstructureMcbsp_Config(hMcbsp);〃12c初始化I2C_cofig();//CODEC寄存器初始化inti_AIc();二極管閃爍程序//*******************程序正常執(zhí)行:二極管閃爍兩次***********************while(cnt--){asm("BCLRXF");//;ClearXFdelay(3000);asm("BSETXF");//;SetXFdelay(3000);}DTMF信號(hào)產(chǎn)生,發(fā)送與接收〃**********************DTMF信號(hào)產(chǎn)生,發(fā)送,接收*************************for(i=0;i<16;i++){f0=freq[i][0]; //順序獲取各符號(hào)低頻數(shù)據(jù)row_freq[i][0]=cos(2*pi*f0/fs);row_freq[i][1]=sin(2*pi*f0/fs);}for(i=0;i<16;i++)f0=freq[i][1]; //順序獲取各符號(hào)高頻數(shù)據(jù)column_freq[i][0]=cos(2*pi*f0/fs);column_freq[i][1]=sin(2*pi*f0/fs);}for(k=0;k<16;) //基于兩個(gè)二階數(shù)字正弦振蕩器,產(chǎn)生DTMF信號(hào){ax1=row_freq[k][0];x_n_2=-row_freq[k][1];ay1=column_freq[k][0];y_n_2=-column_freq[k][1];x_n_1=0;y_n_1=0;for(j=0;j<200;j++)//傳輸信號(hào)采樣值,設(shè)產(chǎn)生信號(hào)的持續(xù)時(shí)間為50ms,所以j為200。x_n=2*ax1*x_n_1-x_n_2;y_n=2*ay1*y_n_1-y_n_2;z_n=x_n+y_n;x_n_2=x_n_1;x_n_1=x_n;y_n_2=y_n_1;y_n_1=y_n;dtmf[j]=z_n*gain; //gain(可變)改變產(chǎn)生信號(hào)的幅度,使之在一定范圍內(nèi)可調(diào),while(!MCBSP_xrdy(hMcbsp)){};//左聲道信號(hào)發(fā)送MCBSP_write16(hMcbsp,dtmf[j]); //采樣值的裝入,前二百個(gè)點(diǎn)為雙音信號(hào)采樣值while(!MCBSP_xrdy(hMcbsp)){};//右聲道信號(hào)發(fā)送MCBSP_write16(hMcbsp,dtmf[j]); //采樣值的裝入,前二百個(gè)點(diǎn)為雙音信號(hào)采樣值while(!MCBSP_rrdy(hMcbsp)){};//左聲道信號(hào)接收dtmfr[j]=MCBSP_read16(hMcbsp);}}}}}}while(!MCBSP_rrdy(hMcbsp)){};//右聲道信號(hào)接收dtmfr[j]=MCBSP_read16(hMcbsp);}for(j=0;j<200;j++) //傳輸靜音信號(hào),設(shè)產(chǎn)生信號(hào)的持續(xù)時(shí)間為50ms,所以j為200。{dtmf[j+200]=0; //后二百個(gè)點(diǎn)為0(即靜音信號(hào))。while(!MCBSP_xrdy(hMcbsp)){}; //左聲道信號(hào)發(fā)送MCBSP_write16(hMcbsp,0);while(!MCBSP_xrdy(hMcbsp)){}; //右聲道信號(hào)發(fā)送MCBSP_write16(hMcbsp,0);while(!MCBSP_rrdy(hMcbsp)){}; //左聲道信號(hào)接收dtmfr[j+200]=MCBSP_read16(hMcbsp);while(!MCBSP_rrdy(hMcbsp)){}; //右聲道信號(hào)接收dtmfr[j+200]=MCBSP_read16(hMcbsp);detect();//接收信號(hào)判決檢測(cè)與顯detect();示k++;if(k==16) /控/制16個(gè)符號(hào)循環(huán)發(fā)送k=0;}延時(shí)子程序//********************************延時(shí)子程序******************************voiddelay(intperiod){inti,j;for(i=0;i<period;i++){for(j=0;j<period>>1;j++);5.55.5接收信號(hào)判決檢測(cè)與顯示子程序5.55.5接收信號(hào)判決檢測(cè)與顯示子程序//采用Goertzel//采用Goertzel算法檢測(cè)DTMT信//i表示有8個(gè)頻率點(diǎn)。//***********************接收信號(hào)判決檢測(cè)與顯示子程序*********************voiddetect()w[0]=2*cos(2*pi*K[0]/N);號(hào)w[1]=2*cos(2*pi*K[1]/N);w[2]=2*cos(2*pi*K[2]/N);w[3]=2*cos(2*pi*K[3]/N);w[4]=2*cos(2*pi*K[4]/N);w[5]=2*cos(2*pi*K[5]/N);w[6]=2*cos(2*pi*K[6]/N);w[7]=2*cos(2*pi*K[7]/N);for(i=0;i<8;i++)bb[i][0]=0;bb[i][1]=0;for(j=0;j<N;j++){bb[i][2]=w[i]*bb[i][1]-bb[i][0]+dtmfr[j+50]/8192.0;//DFT在8個(gè)頻率點(diǎn)的值bb[i][0]=bb[i][1]; //迭代算法bb[i][1]=bb[i][2];}result[i]=bb[i][1]*bb[i][1]+bb[i][0]*bb[i][0]-w[i]*bb[i][1]*bb[i][0]; //每一段的8個(gè)頻率點(diǎn)的幅度平方值}j=0;for(i=0;i<8;i++){if(result[i]>thresh) 〃對(duì)result中的值進(jìn)行檢測(cè),與域值比較,當(dāng)超過(guò)域值時(shí),判斷此頻率點(diǎn)上信號(hào)存在j++;printf("dtmf[%d]:%f\r\n",i,result[i]);if(j==1)有的低頻信息{X=i;}elseif(j==2)有的高頻信息{Y=i;}}}threshold();適應(yīng)更新域值//j=1時(shí)i的值賦給x,代表檢測(cè)符號(hào)含〃j=2時(shí)i的值賦給y,代表檢測(cè)符號(hào)含//根據(jù)當(dāng)前8個(gè)頻率點(diǎn)的幅度平方值自}}}}ch='e';if(j==2){if(X==0&&Y==4)為1209Hz{ch='1';}elseif(X==0&&Y==5)為1336Hz{ch='2';}elseif(X==0&&Y==6){ch='3';〃若x=0,y=4,則表示低頻為697Hz,高頻//這兩個(gè)頻率所對(duì)應(yīng)的數(shù)為"1"〃若x=0,y=5,則表示低頻為697Hz,高頻//這兩個(gè)頻率所對(duì)應(yīng)的數(shù)為"2"http://以下都依次類推elseif(X==2&&Y==elseif(X==2&&Y==#){ch='D';}}if(ch!='e') //滿足以上一種情況,則輸出檢測(cè)的信號(hào){printf("TheDTMFsignalis\"%c\".\r\n",ch);}else //以上情況都不滿足,則輸出錯(cuò)誤信息提示{printf("Thenumberinputtediniswrong!\n");}}5.6自適應(yīng)域值更新子程序//******************************自適應(yīng)域值更新子程序**********************voidthreshold(){for(c=0;c<8;c++) //傳遞當(dāng)前8個(gè)頻率點(diǎn)的幅度平方值,便于自適應(yīng)域值更新處理{linshi[c]=result[c];}for(b=0;b<2;b++) //尋找八個(gè)頻點(diǎn)中第二大頻點(diǎn)的幅度平方值{for(a=b;a<8;a++){if(linshi[b]<=linshi[a]){temp=linshi[b];linshi[b]=linshi[a];linshi[a]=temp;}}thresh=thresh*0.3+0.7*(linshi[1]*0.5);//自適應(yīng)更新域值(原域值30%+0.7倍第二大頻點(diǎn)的幅度平方值70%)}6程序設(shè)計(jì)、調(diào)試與結(jié)果分析調(diào)試過(guò)程CCS的啟動(dòng)雙擊桌面上的SetupCC3.3運(yùn)行CCS設(shè)置程序。單擊ImportConfiguration對(duì)話框中的Clear,刪除原先定義的設(shè)置。從AvailableConfigurations列表中,選擇C5502SEEDXDS510PLUSEmulator,單擊Import,單擊saveandquit。圖6-1硬件環(huán)境設(shè)置工程建立、加載與程序運(yùn)行(1)創(chuàng)建名為DTMF-SEND&RECEIVE的工程通過(guò)project的new來(lái)建立一個(gè)名為DTMF-SEND&RECEIVE的新工程,過(guò)程如下圖所示:圖6-2新建工程(2)向工程中添加文件從file中的new—source建立c程序和cmd文件,編寫完成后保存,然后從project—addfilestoproject添加c程序和cmd文件,庫(kù)文件,頭文件可以通過(guò)掃描相關(guān)性(ScanAllDependencies)自動(dòng)加入到工程中。頭文件路徑可以通過(guò)project中buildoptions的compiler中的processes進(jìn)行設(shè)置,最終編譯環(huán)境如下圖所示:圖6-3添加源文件圖6-4添加cmd文件圖6-5添加庫(kù)文件圖6-6添加頭文件(使用瀏覽文件相關(guān)性選項(xiàng))圖6-7設(shè)置頭文件路徑圖6-8設(shè)置數(shù)據(jù)大小端模式(大端模式)圖6-9添加宏定義(3)編譯與運(yùn)行程序選擇Project/RebuildAll或單擊(RebuildAll)菜單條按鈕,CCS重新進(jìn)行編輯、匯編、連接工程里的所有文件。選擇File/LoadProgram.選中DTMF-SEND&RECEIVE,雙擊,即可加載.out文件。CCS將程序裝載到目標(biāo)DSP上,打開(kāi)顯示程序反匯編指令的Disassembly窗口。選擇Debug/GoMain,從主程序開(kāi)始執(zhí)行。最后單擊Debug—Run(或按F5鍵)運(yùn)行程序。圖6-10下載gel文件
圖6-11程序編譯成功圖6-12將程序下載到實(shí)驗(yàn)箱圖6-13程序運(yùn)行圖6-13打開(kāi)gel文件滾動(dòng)條6.2實(shí)驗(yàn)結(jié)果及圖像本次實(shí)驗(yàn)中,我們通過(guò)一臺(tái)電腦循環(huán)產(chǎn)生0——9、A、B、C、D、*、#,在另一臺(tái)電腦上會(huì)循環(huán)顯示檢測(cè)到的DTMF信號(hào),即循環(huán)顯示0——9、A、B、C、D、*、#。下面我們從時(shí)域和頻域兩個(gè)角度觀察一下檢測(cè)信號(hào)的波形:使用CCS中Graph顯示發(fā)送端的時(shí)域圖形參數(shù)設(shè)置及顯示結(jié)果如下所示:圖6-14發(fā)送緩存區(qū)圖形參數(shù)設(shè)置(時(shí)域及頻域)圖6-15發(fā)送緩存區(qū)時(shí)域圖形顯示圖6-16發(fā)送緩存區(qū)波形頻譜顯示檢測(cè)端的時(shí)域圖形參數(shù)設(shè)置及顯示結(jié)果如下所示:圖4-17檢測(cè)緩存區(qū)圖形參數(shù)設(shè)置(時(shí)域及頻域)圖6-18發(fā)送緩存區(qū)時(shí)域圖形顯示圖6-19發(fā)送緩存區(qū)波形頻譜顯示2使用虛擬儀器顯示圖6-20發(fā)送端信號(hào)時(shí)域波形圖6-21發(fā)送端信號(hào)頻譜遇到的問(wèn)題及解決方法【問(wèn)題一】新建工程時(shí)頭文件路徑不匹配,文件編譯出錯(cuò)。解決方法:在菜單欄中選中Project-Bu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年護(hù)理吸痰課件
- 地形地貌測(cè)繪項(xiàng)目聘用人員協(xié)議
- 快餐店員工勞動(dòng)合同范本(含加班費(fèi)條款)
- 臨時(shí)彩鋼活動(dòng)房搭建與拆除安全合同
- 主題餐廳合伙經(jīng)營(yíng)合同協(xié)議書(shū)
- 碑刻與考古學(xué)骨器考古合同
- 保險(xiǎn)理賠責(zé)任限制證明合同
- 民用住宅拆除重建項(xiàng)目管理合同模板
- 近期安全事故2025年
- 汛期安全工作應(yīng)急預(yù)案
- 常見(jiàn)警情處置課件
- 全國(guó)高校輔導(dǎo)員職業(yè)能力大賽基礎(chǔ)知識(shí)測(cè)試題題庫(kù)(60問(wèn))
- “世界濕地日”宣傳活動(dòng)方案范例(3篇)
- 事故隱患排查治理培訓(xùn)課件
- 醫(yī)務(wù)人員職業(yè)暴露預(yù)防及處理課件(完整版)
- 滲濾液處理應(yīng)急預(yù)案
- 肺部結(jié)節(jié)病例討論范文
- 整本書(shū)閱讀《平凡的世界》中職語(yǔ)文高教版(2023-2024)基礎(chǔ)模塊上冊(cè)
- 全冊(cè)背記資料-2024-2025學(xué)年七年級(jí)地理上學(xué)期湘教版
- 買賣合同法律知識(shí)及風(fēng)險(xiǎn)防范培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論