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