dsp實(shí)現(xiàn)語(yǔ)音噪聲濾波設(shè)計(jì)_第1頁(yè)
dsp實(shí)現(xiàn)語(yǔ)音噪聲濾波設(shè)計(jì)_第2頁(yè)
dsp實(shí)現(xiàn)語(yǔ)音噪聲濾波設(shè)計(jì)_第3頁(yè)
dsp實(shí)現(xiàn)語(yǔ)音噪聲濾波設(shè)計(jì)_第4頁(yè)
dsp實(shí)現(xiàn)語(yǔ)音噪聲濾波設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、語(yǔ)音噪聲濾波DSP課程設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告語(yǔ)音噪聲濾波院(系):電氣工程及其自動(dòng)化學(xué)院設(shè)計(jì)人員:房文博學(xué)號(hào):311208002810成績(jī):工程設(shè)計(jì)50報(bào)告20答辯30總分評(píng)語(yǔ):指導(dǎo)教師簽字: 日期:目錄一、設(shè)計(jì)任務(wù)書2二、設(shè)計(jì)內(nèi)容3三、設(shè)計(jì)方案、算法原理說(shuō)明3四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析8五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)11六、源程序代碼12參考文獻(xiàn):27一、設(shè)計(jì)任務(wù)書1、設(shè)計(jì)背景 語(yǔ)音通信的目的是傳遞聲音信息。位于甲地的通信者發(fā)出的聲音經(jīng)語(yǔ)音傳感器變換成為電信號(hào),經(jīng)發(fā)送端設(shè)備變換為適合傳輸?shù)男问剑ㄟ^(guò)傳輸信道傳輸?shù)揭业亍T谝业亟?jīng)接收端設(shè)備恢復(fù)出原來(lái)的語(yǔ)音信號(hào),經(jīng)耳機(jī)或者喇叭轉(zhuǎn)換為接收者可以聽到的聲

2、音信號(hào)。這就是最基本的語(yǔ)音通信系統(tǒng),但是由于周圍環(huán)境的原因,我們采集到語(yǔ)音信號(hào)經(jīng)常含有不同程度的噪聲。典型語(yǔ)音通信系統(tǒng)中的噪聲來(lái)自三個(gè)方面:信號(hào)處理設(shè)備產(chǎn)生的電噪聲及傳輸信道中的電噪聲; 信號(hào)發(fā)送端空間環(huán)境中的音頻噪聲信號(hào)經(jīng)麥克風(fēng)變換為電信號(hào)之后,與有用信號(hào)其同傳遞到接收端;信號(hào)接收端空間環(huán)境中的音頻噪聲對(duì)信號(hào)接收者的影響。噪聲是由于發(fā)生體作無(wú)規(guī)則振動(dòng)產(chǎn)生的。在很多情況下,環(huán)境中的背景噪聲是通信系統(tǒng)中噪聲干擾的主要來(lái)源。當(dāng)語(yǔ)音信號(hào)受到背景噪聲干擾時(shí)語(yǔ)音通信質(zhì)量變得不可接受,因此要對(duì)語(yǔ)音信號(hào)中的噪聲濾除。DSP利用直接存儲(chǔ)器訪問(wèn)方式DMA(Direct Memory Access)采集數(shù)據(jù)時(shí)不打

3、擾CPU,因此利用DMA方式工作時(shí),CPU可以對(duì)語(yǔ)音信號(hào)進(jìn)行實(shí)時(shí)地濾波。本設(shè)計(jì)要求利用DSP的DMA方式進(jìn)行信號(hào)采集和信號(hào)輸出,對(duì)語(yǔ)音信號(hào)進(jìn)行數(shù)字編碼,濾波后進(jìn)行解碼。2、設(shè)計(jì)要求及目標(biāo)基本部分:(1)對(duì)DMA進(jìn)行初始化;(2)對(duì)A/D、D/A進(jìn)行初始化;(3)編寫DMA中斷服務(wù)程序和濾波算法程序,實(shí)現(xiàn)語(yǔ)音信號(hào)的實(shí)時(shí)濾波;發(fā)揮部分:(1)使用DSP產(chǎn)生帶回波的語(yǔ)音信號(hào); (2)利用自適應(yīng)濾波實(shí)現(xiàn)語(yǔ)音信號(hào)的回波對(duì)消。3、設(shè)計(jì)思路首先利用DSP的DMA方式對(duì)外部含噪聲的語(yǔ)音信號(hào)進(jìn)行實(shí)時(shí)采集,語(yǔ)音信號(hào)先經(jīng)過(guò)A/D轉(zhuǎn)換為數(shù)字信號(hào),利用MCBSP的接收寄存器接收數(shù)據(jù)。編寫濾波算法程序,或調(diào)用DSPLIB

4、中的濾波函數(shù),對(duì)信號(hào)進(jìn)行濾波。濾波后的數(shù)據(jù)利用DMA方式送到D/A轉(zhuǎn)換器轉(zhuǎn)換為模擬信號(hào)。4、要求完成的任務(wù)(1)編寫C語(yǔ)言程序,并在CCS集成開發(fā)環(huán)境下調(diào)試通過(guò);(2)將包含噪聲的語(yǔ)音信號(hào)進(jìn)行濾波,從揚(yáng)聲器輸出端口輸出,比較濾波前后的信號(hào)的變化;(3)按要求撰寫設(shè)計(jì)報(bào)告。二、設(shè)計(jì)內(nèi)容隨著現(xiàn)代科學(xué)的蓬勃發(fā)展,人類社會(huì)愈來(lái)愈顯示出信息社會(huì)的特點(diǎn)。通信或信息交換已成為人類社會(huì)存在的必要條件,正如衣食住行對(duì)人類是必要的一樣。語(yǔ)音作為語(yǔ)言的聲學(xué)表現(xiàn),是人類交流信息最自然、最有效、最方便的手段之一。然而,人們?cè)谡Z(yǔ)音通信過(guò)程中不可避免地會(huì)受到來(lái)自周圍環(huán)境和傳輸媒介引入的噪聲、通信設(shè)備內(nèi)部電噪聲、乃至其他講話

5、者的干擾。這些干擾最終將使接收者接收到的語(yǔ)音不再是純凈的原始語(yǔ)音,而是被噪聲污染過(guò)的帶有噪聲的語(yǔ)音信號(hào)。例如,汽車、街道、機(jī)場(chǎng)中的電話,常受到強(qiáng)背景噪聲的干擾,嚴(yán)重影響通話質(zhì)量。而環(huán)境噪聲的污染使得許多語(yǔ)音處理系統(tǒng)的性能急劇惡化。例如,語(yǔ)音識(shí)別已取得重大進(jìn)展,正步入使用階段。但目前語(yǔ)音識(shí)別系統(tǒng)大多都是在安靜環(huán)境中工作的,在噪聲環(huán)境中尤其是強(qiáng)噪聲環(huán)境,語(yǔ)音識(shí)別系統(tǒng)的識(shí)別率將受到嚴(yán)重影響。在上述情況下,必須加入語(yǔ)音增強(qiáng)系統(tǒng),或者抑制背景噪聲,以提高語(yǔ)音通信質(zhì)量, 或者作為預(yù)處理器,以提高語(yǔ)音處理系統(tǒng)的抗干擾能力,維持系統(tǒng)性能。因此,語(yǔ)音增強(qiáng)技術(shù)在實(shí)際中有重要價(jià)值。目前,語(yǔ)音增強(qiáng)已在語(yǔ)音處理系統(tǒng)、通

6、信技術(shù)、多媒體技術(shù)、數(shù)字化家電等領(lǐng)域得到了越來(lái)越廣泛的應(yīng)用。三、設(shè)計(jì)方案、算法原理說(shuō)明1、信道干擾濾波部分首先利用DSP的DMA方式對(duì)外部含噪聲的語(yǔ)音信號(hào)進(jìn)行實(shí)時(shí)采集,語(yǔ)音信號(hào)先經(jīng)過(guò)A/D轉(zhuǎn)換為數(shù)字信號(hào),利用MCBSP的接收寄存器接收數(shù)據(jù)。編寫濾波算法程序,或調(diào)用DSPLIB中的濾波函數(shù),對(duì)信號(hào)進(jìn)行濾波。濾波后的數(shù)據(jù)利用DMA方式送到D/A轉(zhuǎn)換器轉(zhuǎn)換為模擬信號(hào)。這就是我們的設(shè)計(jì)思路。具體的設(shè)計(jì)方案原理圖如下。模擬輸入信號(hào)通過(guò)DSK的MIC端口輸入,經(jīng)A/D轉(zhuǎn)換,然后到達(dá)DSP的DMA通道2,DSP接收到信號(hào)后,調(diào)用中斷服務(wù)程序進(jìn)行濾波,濾波后的信號(hào)可以在CCS上顯示,也可以通過(guò)DMA通道3將信

7、號(hào)輸出到D/A轉(zhuǎn)換器,經(jīng)D/A轉(zhuǎn)換后從SPEAKER端口輸出。(1)直接存儲(chǔ)器訪問(wèn)DMA直接存儲(chǔ)器訪問(wèn)(Direct Memory Access)是C54x DSP非常重要的片上外設(shè),DMA控制器可以在不影響CPU的情況下完成數(shù)據(jù)的傳輸,因此數(shù)據(jù)傳輸速度快,在要求信號(hào)實(shí)時(shí)采集和處理的系統(tǒng)中常采用DMA方式進(jìn)行信號(hào)采集和傳輸。C5402有6個(gè)可獨(dú)立編程的DMA通道,每個(gè)DMA通道受各自的5個(gè)16位寄存器控制:源地址寄存器DMSRC、目的地址寄存器DMDST、單元計(jì)數(shù)寄存器DMCTR、同步事件和計(jì)數(shù)寄存器DMSFC、發(fā)送模式控制寄存器DMMCR。目的地址寄存器DMDST規(guī)定DMA要傳送數(shù)據(jù)目的地址

8、和首地址。單元計(jì)數(shù)寄存器DMCTR規(guī)定DMA傳送數(shù)據(jù)的個(gè)數(shù)為DMCTR寄存器的值加1。同步事件和楨計(jì)數(shù)寄存器DMSFC規(guī)定DMA傳送數(shù)據(jù)的同步事件類型和傳送一塊數(shù)據(jù)所含楨信號(hào)的個(gè)數(shù)。發(fā)送模式控制寄存器DMMCR規(guī)定DMA通道的傳輸模式,當(dāng)DMA工作在自動(dòng)初始化模式時(shí),CPU在一個(gè)DMA事件完成后自動(dòng)裝載下一個(gè)DMA初始化設(shè)置并繼續(xù)進(jìn)行數(shù)據(jù)傳送。DINM位和IMOD位設(shè)置DMA中斷產(chǎn)生方式。CTMOD位設(shè)置發(fā)送計(jì)數(shù)模式控制,CTMOD位為0時(shí),DMA工作在多楨模式,CTMOD位為1時(shí),DMA工作在自動(dòng)緩沖ABU模式。SIND位和DIND位用來(lái)設(shè)置源地址和目的地址的自動(dòng)調(diào)整方式。此外,DMA的6個(gè)

9、通道還受通道優(yōu)先級(jí)和使能控制寄存器DMPREC控制。本實(shí)驗(yàn)利用DMA通道2與MCBSP1通道結(jié)合來(lái)讀取A/D轉(zhuǎn)換器的數(shù)據(jù),利用DMA通道3與MCBSP1通道結(jié)合來(lái)將處理后的數(shù)據(jù)發(fā)送至D/A轉(zhuǎn)換器。選擇MCBSP1通道的接收寄存器DRR11(41H)為DMA傳送數(shù)據(jù)的首地址,并選擇DMA源地址工作在不調(diào)整方式,選擇MCBSP1接收事件為DMA同步事件,以實(shí)現(xiàn)DMA和MCBSP的結(jié)合。A/D轉(zhuǎn)換器的數(shù)據(jù)按MCBSP1的設(shè)置被傳送到DSP內(nèi)部接收寄存器DRR11中,再由DMA通道2將DRR11中的數(shù)據(jù)讀到指定數(shù)據(jù)存儲(chǔ)區(qū)inp_buffer中完成數(shù)據(jù)采集。DMA在傳送外部來(lái)的數(shù)據(jù)時(shí)不會(huì)影響CPU的正常

10、運(yùn)行,當(dāng)DMA通道2采集完一組數(shù)據(jù)后產(chǎn)生一個(gè)DMA中斷事件中斷CPU,來(lái)通知CPU對(duì)其進(jìn)行相應(yīng)的處理,此時(shí)DMA通道2可以按照設(shè)定繼續(xù)采集下一組數(shù)據(jù),實(shí)現(xiàn)了數(shù)據(jù)采集與CPU處理的并行操作。當(dāng)一組數(shù)據(jù)處理完成后,將數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)區(qū)out_buffer中,選擇out_buffer為DMA通道3的首地址,并選擇源工作地址工作在不調(diào)整方式。選擇MCBSP1通道的發(fā)送積存器DXR11(43H)為DMA通道3傳送數(shù)據(jù)的目的地址,并選擇DMA源地址工作在不調(diào)整方式,選擇MCBSP1接收事件為DMA同步事件,以實(shí)現(xiàn)DMA和MCBSP的結(jié)合。在CCS集成開發(fā)環(huán)境中,與DMA相關(guān)的頭文件有regs54xx.h

11、和dma54xx.h。在這兩個(gè)頭文件中,定義了DMA的寄存器資源、使用方法和DMA寄存器的地址和基本訪問(wèn)方式,以及寄存器的各個(gè)比特域和訪問(wèn)方法,因此需要進(jìn)行C源程序的開始處包含這兩個(gè)頭文件。輸入信號(hào)經(jīng)A/D轉(zhuǎn)換后,利用DMA通道2進(jìn)行傳輸進(jìn)入DSP處理,而濾波后的信號(hào)輸出利用了DMA通道3進(jìn)行傳輸進(jìn)入D/A轉(zhuǎn)換器等輸出,因此需要對(duì)DMA通道2和通道3進(jìn)行初始化配置。(2)A/D和D/A轉(zhuǎn)換器本實(shí)驗(yàn)要用到A/D和D/A轉(zhuǎn)換器。A/D轉(zhuǎn)換器能夠?qū)⒔邮盏恼Z(yǔ)音信號(hào)(模擬信號(hào))轉(zhuǎn)化為數(shù)字信號(hào),供CPU進(jìn)行處理;D/A轉(zhuǎn)換器能夠?qū)?shù)字信號(hào)轉(zhuǎn)換為語(yǔ)音信號(hào)送SPEAKER端口輸出。要使用A/D和D/A轉(zhuǎn)換器,

12、必須首先對(duì)A/D和D/A轉(zhuǎn)換器進(jìn)行初始化設(shè)置,即設(shè)置A/D轉(zhuǎn)換器的工作模式(15+1bit模式,16bit模式)、輸入增益(0dB,6Db,12dB)以及抽樣頻率(8000Hz,16000Hz)等。2、回波去噪部分初始化FIR延遲輸出數(shù)組dbuffer_h、FIR輸出數(shù)組、自適應(yīng)濾波器系數(shù)矢量coff_w和自適應(yīng)濾波器的輸出數(shù)組out_w以及DSK板之后,采集輸入的語(yǔ)音信號(hào),根據(jù)模式的不同進(jìn)行不同的處理以輸出不同的信號(hào)來(lái)進(jìn)行效果的比較。我們的做法是利用設(shè)置參數(shù)mode來(lái)改變板子的功能。mode=1時(shí)信號(hào)通過(guò)FIR濾波器后產(chǎn)生回聲,為使現(xiàn)象更明顯可以附加一個(gè)延遲;mode=2時(shí)用自適應(yīng)濾波器逼近

13、FIR濾波器以使之輸出近似的信號(hào),用信號(hào)通過(guò)兩個(gè)系統(tǒng)產(chǎn)生的信號(hào)之差(即剩余回聲)來(lái)調(diào)整自適應(yīng)濾波器的系數(shù),使剩余回聲逐漸收斂于0。(1)自適應(yīng)濾波器的基本原理:自適應(yīng)濾波原理:利用前一時(shí)刻獲得的濾波結(jié)果,自動(dòng)調(diào)節(jié)現(xiàn)時(shí)刻的濾波器參數(shù),以適應(yīng)信號(hào)和噪聲的未知特性,從而實(shí)現(xiàn)最優(yōu)濾波。自適應(yīng)濾波器主要由系數(shù)可調(diào)的數(shù)字濾波器和調(diào)整濾波器系數(shù)的自適應(yīng)算法兩部分構(gòu)成自適應(yīng)濾波器的一般結(jié)構(gòu)如圖l所示自適應(yīng)濾波其最重要的性能是能有效地在未知環(huán)境中跟蹤時(shí)變的輸入信號(hào),使輸出信號(hào)達(dá)到最優(yōu)。因而在電信、雷達(dá)、聲納、實(shí)時(shí)控制以及圖像處理等領(lǐng)域都有成功的應(yīng)用。常規(guī)濾波器具有特定的特性,對(duì)于輸入信號(hào)根據(jù)這個(gè)濾波器特性產(chǎn)生相

14、應(yīng)的輸出。也就是,先有了濾波器構(gòu)成的權(quán)系數(shù),然后決定相應(yīng)輸出值。但有些實(shí)際應(yīng)用往往是反過(guò)來(lái)要求的,即對(duì)濾波器輸出的要求是明確的,而濾波器特性是無(wú)法預(yù)先知道的。例如長(zhǎng)話系統(tǒng),回波相消器的理想輸出是無(wú)回波信號(hào),這個(gè)要求是明確的,而系統(tǒng)本身卻不能一開始就確定下來(lái),因?yàn)樗Q于長(zhǎng)話系統(tǒng)話路傳輸條件的變化,像這樣的應(yīng)用技術(shù)就必須依賴自適應(yīng)濾波技術(shù)。圖l中d(n)為期望響應(yīng),x(n)為自適應(yīng)濾波器的輸入,y(n)為自適應(yīng)濾波器的輸出, e(n)為估計(jì)誤差,P(n)= x(n)-y(n)前置級(jí)完成跟蹤信號(hào)的選擇,確定是信號(hào)還是噪聲;后置級(jí)根據(jù)前置級(jí)的不同選擇對(duì)數(shù)字濾波器輸出作不同的處理,以得到信號(hào)輸出自適應(yīng)

15、濾波器的濾波器系數(shù)受誤差信號(hào)e(n)控制,根據(jù)e(n)的值和自適應(yīng)算法自動(dòng)調(diào)整(2)回聲消除器的基本原理:回聲消除的基本原理是采用一個(gè)自適應(yīng)濾渡器自動(dòng)識(shí)別回聲通道,通過(guò)自適應(yīng)濾波算法的調(diào)整,使其沖激響應(yīng)與實(shí)際回聲路徑逼近,從而得到回聲預(yù)測(cè)信號(hào)y(n),再將預(yù)測(cè)信號(hào)從近端采樣的語(yǔ)音信號(hào)d(n)中減去,即可實(shí)現(xiàn)回聲消除。自適應(yīng)算法要求收斂速度快、計(jì)算復(fù)雜度低、穩(wěn)定性好和失調(diào)誤差小。雖然許多自適應(yīng)算法在理論上實(shí)現(xiàn)回聲消除都是可行的,但通常采用的是較簡(jiǎn)單的算法。例如廣泛應(yīng)用的LMS自適應(yīng)算法。(3)LMS算法:本設(shè)計(jì)中自適應(yīng)算法是根據(jù)最小均方誤差判據(jù)來(lái)設(shè)計(jì)的,即理想信號(hào)與濾波器輸出之差的平方值的期望值

16、最小,并且根據(jù)這個(gè)判據(jù)來(lái)修改權(quán)系數(shù)。均方誤差表示為Ee2(n)=Ed(n)-y(n)2對(duì)于橫向結(jié)構(gòu)濾波器,代入y(n)的表達(dá)式,有= Ed2(n)+WT(n)RW(n)-2 WT(n)P其中,R = EX(n) XT(n)是N*N的自相關(guān)矩陣,它是輸入信號(hào)采樣值間的相關(guān)性矩陣。P = Ed(n) X(n)為N*1互相關(guān)矢量,代表理想信號(hào)d(n)與輸入矢量的相關(guān)性。在均方誤差達(dá)到最小時(shí),得到最佳權(quán)系數(shù)W*=w0*, w1* , w2*, , wN-1*T。它應(yīng)滿足下列方程=0即 R*W-P=0顯然,x(m)=x(n)x(n-m)是x(n)的自相關(guān)值,xd(R) =Ex(n)d(n-k)是x(n)

17、與d(n)的互相關(guān)值。在有些應(yīng)用中,把輸入信號(hào)的采樣值分成相同的段(每段稱為一幀),再求出R和P估計(jì)值,以得到每幀的最佳權(quán)系數(shù)。這種方法稱為塊對(duì)塊自適應(yīng)算法。如語(yǔ)音信號(hào)的線性預(yù)測(cè)編碼LPC,就是把語(yǔ)音信號(hào)分成幀進(jìn)行處理的。R和P的計(jì)算,要求出期望值E,在實(shí)際運(yùn)算中不易實(shí)現(xiàn)。為此,可通過(guò)下式進(jìn)行估計(jì):=用以上方法獲得最佳W*的運(yùn)算量很大,對(duì)于一些在線或?qū)崟r(shí)應(yīng)用的場(chǎng)合,無(wú)法滿足其時(shí)間要求。大多數(shù)場(chǎng)合使用迭代算法,對(duì)每次采樣值求出較佳權(quán)系數(shù),稱為采樣值對(duì)采樣值迭代算法。迭代算法可以避免復(fù)雜的R-1和P的運(yùn)算,又能實(shí)時(shí)求得式的近似解,因而切實(shí)可行。LMS算法是以最快下降法為原則的迭代算法,即W(n+1

18、)矢量是W(n)矢量按均方誤差性能平面的負(fù)斜率大小調(diào)節(jié)相應(yīng)一個(gè)增量。W(n+1)= W(n)-u(n)這個(gè)u是由系統(tǒng)穩(wěn)定性和迭代運(yùn)算收斂速度來(lái)決定的自適應(yīng)步長(zhǎng)。(n)為n次迭代的梯度。對(duì)于LMS算法,(n)是Ee2(n)的斜率。由式W(n+1)= W(n)-u(n),產(chǎn)生了求解最佳權(quán)系數(shù)的兩種方法,一種是最陡梯度法。其思路為,設(shè)定初始權(quán)系數(shù),用上式迭代公式計(jì)算,直到W(n+1)與W(n)誤差小于規(guī)定范圍。其中(n)的E計(jì)算,可用估計(jì)值表達(dá)式式中K的取值應(yīng)該足夠大。如果用瞬時(shí)-2e(n)X(n)來(lái)代替上式對(duì)-2E e(n)X(n)的估計(jì)運(yùn)算,就產(chǎn)生了另一種算法隨機(jī)梯度法,即Widrow Hoff

19、的LMS算法。此時(shí)迭代公式為W(n+1)= W(n)+2u e(n)X(n)以上討論的自適應(yīng)算法都是基于Widrow Hoff的LMS算法。上式的迭代公式,假定濾波器結(jié)構(gòu)為橫向結(jié)構(gòu)。對(duì)于對(duì)稱橫向型結(jié)構(gòu),也可推出類似的迭代公式W(n+1)= W(n)+2u e(n)X(n)+ X(n-N+1) 其中,X(n)=,而X(n-N+1)=。LMS算法流程圖自適應(yīng)控制可以看作是一個(gè)能根據(jù)環(huán)境變化智能調(diào)節(jié)自身特性的反饋控制系統(tǒng)以使系統(tǒng)能按照一些設(shè)定的標(biāo)準(zhǔn)工作在最優(yōu)狀態(tài)。一般地說(shuō),自適應(yīng)控制在航空、導(dǎo)彈和空間飛行器的控制中很成功??梢缘贸鼋Y(jié)論,傳統(tǒng)的自適應(yīng)控制適合(1)沒有大時(shí)間延遲的機(jī)械系統(tǒng);(2)對(duì)設(shè)計(jì)

20、的系統(tǒng)動(dòng)態(tài)特性很清楚。但在工業(yè)過(guò)程控制應(yīng)用中,傳統(tǒng)的自適應(yīng)控制并不如意。PID自整定方案可能是最可靠的,廣泛應(yīng)用于商業(yè)產(chǎn)品,但用戶并不怎么喜歡和接受。傳統(tǒng)的自適應(yīng)控制方法,要么采用模型參考要么采用自整定,一般需要辨識(shí)過(guò)程的動(dòng)態(tài)特性。它存在許多基本問(wèn)題(1)需要復(fù)雜的離線訓(xùn)練;(2)辨識(shí)所需的充分激勵(lì)信號(hào)和系統(tǒng)平穩(wěn)運(yùn)行的矛盾;(3)對(duì)系統(tǒng)結(jié)構(gòu)假設(shè);(4)實(shí)際應(yīng)用中,模型的收斂性和系統(tǒng)穩(wěn)定性無(wú)法保證。另外,傳統(tǒng)自適應(yīng)控制方法中假設(shè)系統(tǒng)結(jié)構(gòu)的信息,在處理非線性、變結(jié)構(gòu)或大時(shí)間延遲時(shí)很難。3、脈沖式濾波:我們的方式先求個(gè)點(diǎn)的平均值,然后根據(jù)實(shí)際,大于這個(gè)平均值的5倍以上的信號(hào)幅度進(jìn)行衰減,這樣可以在時(shí)

21、域直接進(jìn)行處理。進(jìn)而得到需要的聲音,將亂入的聲音濾掉,保護(hù)聽者。四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析1、調(diào)試過(guò)程a、首先設(shè)計(jì)FIR濾波器。FIR濾波器的算法可以由MATLAB來(lái)設(shè)計(jì)。打開MATLAB,在命令窗中輸入FDAtool,打開濾波器設(shè)計(jì)與分析工具。因?yàn)檎Z(yǔ)音信號(hào)的頻率成分主要分布在300Hz到3400Hz,所以我們只要設(shè)計(jì)4000Hz的低通FIR濾波器就可以實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)中摻雜的噪聲的濾除。在FDA中選擇帶低通FIR濾波器,階數(shù)選擇15,抽樣頻率選擇16kHz。就可以設(shè)計(jì)所要的濾波器了。然后將設(shè)計(jì)好的結(jié)果導(dǎo)出為fir.c文件。設(shè)計(jì)好濾波器后,還要進(jìn)行對(duì)A/D和D/A以及DMA的初始化,并編寫主程

22、序和中斷服務(wù)程序,以及控制調(diào)用中斷時(shí)程序流向的中斷向量表,詳細(xì)內(nèi)容請(qǐng)見程序清單。由于DSK5402板上存儲(chǔ)器分配方式基本相同,所以 .cmd文件可以采用其他程序中的 .cmd文件。b、信號(hào)濾波部分:(1)通過(guò)MIC向計(jì)算機(jī)輸入語(yǔ)音信號(hào)。但此種方式不能很好的聽出聲音到底有什么變化,因?yàn)槠鋵?shí)板子的噪聲即不準(zhǔn)。所以最好是用輸入正弦波再利用CCS看圖形的方式。(2)編譯濾波工程之前先在CCS下選擇Tools/Linker Configuration,出現(xiàn)連接器配置對(duì)話框,選擇Use the Visual Linker,然后再對(duì)程序進(jìn)行編譯。(3)編譯通過(guò)則會(huì)產(chǎn)生Firlab.out文件,并可執(zhí)行文件F

23、irlab.out下載到DSP中。(4)在中斷服務(wù)程序dmac2isr.c中的有效行上設(shè)置斷點(diǎn),以便觀察圖形。(5)選擇Debug/Animate,激活程序。Animate=Run-Halt-Run。(6)在CCS中選擇View/Graph/Time/Frequency,出現(xiàn)圖形屬性對(duì)話框。圖形屬性對(duì)話框中,Start Adress設(shè)置為輸入變量名、Acquisition Buffer Size為十進(jìn)制256、Display Data Size 為十六進(jìn)制、DSP Data Type為16位有符號(hào)整形數(shù),其它設(shè)置不變。確定后出現(xiàn)如下圖所示時(shí)域波形。c、擴(kuò)展回波對(duì)消部分:(1)由麥克將產(chǎn)生的語(yǔ)音

24、信號(hào)輸入到J5端口。J6端口接入音響或耳機(jī),對(duì)比處理前后的語(yǔ)音信號(hào)。(2)編譯濾波工程之前先在CCS下選擇Tools/Linker Configuration,出現(xiàn)連接器配置對(duì)話框,選擇Use the text Linker,然后再對(duì)程序進(jìn)行編譯。(3)通過(guò)設(shè)置mode的值,對(duì)不同算法處理過(guò)的信號(hào)分別觀察。0代表產(chǎn)生輸入原聲;1代表產(chǎn)生帶回波噪聲的聲音;2代表用自適應(yīng)消除回波后的聲音;3代表產(chǎn)生添加正弦頻率噪音的信號(hào);4代表用自適應(yīng)方法濾除正弦噪音后的聲音;5代表音調(diào)降低;6代表近音調(diào)升高;7代表濾除脈沖噪音(4)選擇Debug/Animate,激活程序。Animate=Run-Halt-Ru

25、n。(5)在程序運(yùn)行過(guò)程中,輸入語(yǔ)音信號(hào)分別進(jìn)行語(yǔ)音輸出觀察。2、結(jié)果分析(1)理論上的濾波輸入輸出信號(hào):實(shí)際信號(hào):女變男:明顯看出有失真。五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì) 這次的dsp實(shí)驗(yàn)我們可以用辛酸來(lái)形容,500多人排不到20塊板子,必須要起個(gè)大早才可以用到板子,所以我們的用板時(shí)間真的不是太多.當(dāng)然有我們前幾天的大意這方面的因素,后來(lái)當(dāng)我們把理論知識(shí)研究到一定深度的準(zhǔn)備實(shí)踐的時(shí)候,實(shí)驗(yàn)室已經(jīng)門可羅雀了,唉 我們的辛酸的借板子的歷程就開始了.雖然資源不夠,但這同樣給與了我們提高,鍛煉了我們非常嫻熟的調(diào)試技術(shù),可以用神速來(lái)形容我們倆生成工程的速度!所以,什么樣的情況都是一種經(jīng)歷,這種艱苦的經(jīng)歷對(duì)

26、于我們更是一種鍛煉和提高,對(duì)于我們這種從小沒怎么吃苦的孩子們也是一次額外的經(jīng)歷,也許到了我們老了,還會(huì)想起交大小學(xué)期排板子的經(jīng)歷.那時(shí)我們倆要是一起聊天,一定會(huì)相視一笑的因?yàn)楸菊n題的基本語(yǔ)音濾波部分楊老師在課上給予了我們講解,因此我們就在原本的基礎(chǔ)上進(jìn)行改善和增加拓展。因?yàn)檎n題要求是進(jìn)行語(yǔ)音濾波,因此我們一開始從通道的初始化使能著手,然后了解到整個(gè)程序模板中真正對(duì)采集到的音頻信號(hào)進(jìn)行濾波的是中斷服務(wù)程序,這與我們學(xué)得單片機(jī)有驚人的類似. 所以這方面的初始化,我們還是掌握的不錯(cuò)的,但是dma寄存器實(shí)在是太多了,我們只能照著書一點(diǎn)一點(diǎn)的翻,一點(diǎn)一點(diǎn)的寫,當(dāng)然書上的初始化程序還是給的很細(xì),我們也借鑒

27、了很多,但我們想,這些都是死的.我們沒有必要在這上面浪費(fèi)很多時(shí)間,還是以理解為主吧之后就是研究中斷中具體的濾波程序了,我們是從噪聲的種類角度下手,一點(diǎn)一點(diǎn)的進(jìn)行的,考慮了很多噪聲,這在報(bào)告的前面部分中也都提到了,然后我們就研究具體的解決辦法,一步一步地下手.再查找具體的濾波函數(shù)的時(shí)候,我們也發(fā)現(xiàn)我們的數(shù)學(xué)水平真的還欠缺,或者說(shuō)我們很強(qiáng)的耐心看很長(zhǎng)的數(shù)學(xué)公式,這在日后的學(xué)習(xí)過(guò)程中還待加強(qiáng)阿接著,我們?cè)谠瓉?lái)的基礎(chǔ)上,想到了變聲。我們最初想對(duì)實(shí)時(shí)濾波處理過(guò)后的個(gè)語(yǔ)音樣本點(diǎn)間的距離進(jìn)行適當(dāng)?shù)睦L(zhǎng)和壓短,這樣應(yīng)該就會(huì)產(chǎn)生一定的變聲。因?yàn)榕毡楸饶猩l(fā)生的頻率高,這樣音調(diào)高,所以對(duì)語(yǔ)音樣本點(diǎn)間的距離進(jìn)行

28、壓縮后,就能將一段男聲近似變成“女聲”;同理,對(duì)語(yǔ)音樣本點(diǎn)間的距離進(jìn)行拉長(zhǎng)后,這樣頻率變低,就相應(yīng)地實(shí)現(xiàn)女聲變“男聲”。最后經(jīng)過(guò)反復(fù)實(shí)驗(yàn),我們做出了近似變聲功能。然后,我們用自適應(yīng)濾波器濾除回波。比對(duì)了幾種自適應(yīng)濾波器后,我們最終決定采用濾波器進(jìn)行濾波,最后我們用了將近一天的時(shí)間的參數(shù)使用和定義搞清楚。一開始我們遇到了不小的麻煩,不管怎么樣都不出聲,最后我們想到參考資料上介紹的是用采集方式,數(shù)據(jù)一個(gè)一個(gè)的采集,而我們用的是傳輸,是一串一串的采集,所以我們猜想是不是自適應(yīng)濾波器的步長(zhǎng)參數(shù)設(shè)置得過(guò)低,使得其自適應(yīng)的過(guò)程中容量不夠,因此我們嘗試著將步長(zhǎng)由原來(lái)的該為,最后一試還真的實(shí)現(xiàn)了回波消除。用板

29、的一個(gè)語(yǔ)音輸入端模擬一方的電話用戶,而再用軟件產(chǎn)生一個(gè)接近的正弦信號(hào)模擬另一端用戶傳來(lái)的語(yǔ)音,將這兩端傳來(lái)的信號(hào)疊加在一起后就類似于我們?nèi)粘Mㄔ捴心苈牭阶约夯芈暤默F(xiàn)象,再采用自適應(yīng)濾波,濾除一方信號(hào)后就能實(shí)現(xiàn)回聲消除!最后我們自己模仿了脈沖噪音的形式,自己錄制了一段聲音,然后想在MODE7中應(yīng)用閾值濾波法濾波,但是因?yàn)闀r(shí)間有限,主要是因?yàn)榘遄犹伲谖覀兇疝q以前,我倆還沒有利用板子嘗試過(guò),但是我們的原理很清晰,并準(zhǔn)備在答辯時(shí)現(xiàn)場(chǎng)嘗試。綜上,就是我們對(duì)這次實(shí)驗(yàn)的感想,最后我們表達(dá)一下對(duì)小學(xué)期的情感.雖然說(shuō)這小學(xué)期比上課還要累,但我們從理論逐步向?qū)嵺`過(guò)渡了,把兩門信號(hào)處理的大課的知識(shí)結(jié)合到實(shí)踐中去

30、做了.我們不再是只會(huì)算題的學(xué)生了,更像是兩個(gè)工程師,雖然研究的東西不太高端,但對(duì)我們應(yīng)經(jīng)是受益匪淺了,用一句玩笑來(lái)形容就是,這些實(shí)踐為我們回去和朋友吹噓自己在大學(xué)學(xué)到了什么提供了很強(qiáng)的說(shuō)服力.最后的最后,感謝楊老師為我們上課打下的最原始的基礎(chǔ),感謝那些借我們板子的可愛的同學(xué)們,更要感謝學(xué)院開設(shè)這么有意義的課.六、源程序代碼1、FIRlab.C/*/* FIRlab.C AIC,McBSP,DMA initialization for FIR lab Filter */ /* */* Goal: This code performs the following functions: */*- t

31、oggle the three LEDs on the DSK */*- setup AIC (CODEC) parameters */* - initialize DMA Channel (CH2-input) */*- turn on interrupts */*- run forever (waiting for DMA interrupts to transfer data) */* */* Author: Scott Bland Date: 03/20/2000 */*/ /*/* Include Files */*/#include <type.h>#include &

32、lt;board.h>#include <codec.h>#include <string.h>#include <dma54xx.h>#include <regs54xx.h>#include <intr.h>#include "timer.h"#include <dsplib.h>#include <math.h>/*/* Function Prototypes */*/void delay(s16 period);extern void DMAC2ISR();/*/* Globa

33、l Variables */*/HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/* Create specific data section for buffer (symbol, section_name) */#pragma DATA_SECTION(inp_buffer,"audio_buffer&

34、quot;);int inp_buffer0x200;/* Create specific data section for buffer (symbol, section_name) */#pragma DATA_SECTION(out_buffer,"outt_buffer");int out_buffer0x200;/* Create specific data section for coeffiecients */#pragma DATA_SECTION(coeffs,"coefficients");/* Low Pass Filter fs=

35、16000 fc=4000Hz*/ int coeffs16= -79, -136, 312, 654, -1244, -2280, 4501, 14655, 14655, 4501, -2280, -1244, 654, 312, -136, -79; /* High Pass Filter */ / int coeffs16=-120,5245,-3421,2451,-11216,40,-24657,29610,29610,-24657,40,-11216,2451,-3421,5245,-120; /* Band Pass Filter */ /* int coeffs16=921,-2

36、494,137,-3654,-2485,-2063,-9015,16165,16165,-9015,-2063,-2485,-3654,137,-2494,921; */* Band Stop Filter */* int coeffs16=491,165,-2159,772,-6697,10044,648,12297,12297,648,10044,-6697,772,-2159,165,491; */ /* All Pass Filter */* int coeffs16 =32767,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; */int highpass16=-848

37、, -1129, -1496, -2000, -2754, -4053, -6980, -21279, 21279, 6980, 4053, 2754, 2000, 1496, 1129, 848; /* Create specific data section for delay buffer */#pragma DATA_SECTION(delaybuff,"delayb");int delaybuff16=0; int delaybuff116=0;/* declare and initialize two variables for DMAC ISRs */int

38、frame=0; int flag=0;int temp; int a,b;int bf10x3000=0;/* delayptr holds the address of the start of the delay buffer */ int *delayptr1 = &(delaybuff0); int *delayptr2 = &(delaybuff10); interrupt void DMAC2ISR();/*/* MAIN */*/void main() s16 cnt=2;a=8;b=6;/* These are the items that BIOS will

39、 set when we use it */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_freq(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0;/禁止所有中斷/* - */if(brd_init_bios() return; while(cnt-)brd_led_toggle(BRD_LED0);/切換LED指示燈的顯示狀態(tài)delay(1000);brd_led_toggle(BRD_LED1);/切換LED指示燈的顯示狀態(tài)delay(10

40、00);brd_led_toggle(BRD_LED2);/切換LED指示燈的顯示狀態(tài)delay(1000); /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */* Set codec parameters */ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bi

41、t mode */ codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */ codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB gain on analog output from DAC */ codec_sample_rate(hHandset,SR_16000); /* 16KHz sampling rate */* Clear IFR */ INTR_CLR_FLAG(DMAC2);/* Reset all DMA chan

42、nels */ dma_reset_all();/* Initialize DMA channel 2 */ dmsefc = (DSYNC_REVT1 <<12);/DMA與McBSP1接收事件同步 dmmcr = (AUTOINIT_ENABLE << 15) | (DINM_ENABLE << 14) | (IMOD_HALFBLOCK <<13) | (CTMOD_DEC <<12) | (INDEXMODE_NOMOD << 8) | (SPACE_DATA << 6) | (INDEXMODE_IN

43、C << 2) | (SPACE_DATA);/設(shè)置傳輸控制模式寄存器DMMCR/15bit AUTOINIT_ENABLE=1 使能自動(dòng)初始化/14bit DINM_ENABLE=1 根據(jù)IMOD位產(chǎn)生中斷/13bit IMOD_HALFBLOCK=1 幀和塊結(jié)束時(shí)都產(chǎn)生中斷/12bit CTMOD_DEC=0 減量計(jì)數(shù)模式(多幀模式)/10-8bit INDEXMODE_NOMOD=000 源地址模式No modify /7-6bit SPACE_DATA=01 源地址空間為數(shù)據(jù)空間/4-2bit INDEXMODE_INC=01 目的地址模式, 傳輸之后加/1-0bit SP

44、ACE_DATA=01 目的地址空間為數(shù)據(jù)空間 dmctr = 0xFF;/單元記數(shù),期望傳輸數(shù)據(jù)減1 src_addr = DRR1_ADDR(HANDSET_CODEC);/將MCBSP1的接收寄存器設(shè)為源地址 dst_addr = (unsigned int) &inp_buffer;/目的地址為數(shù)組inp_buffer,即接收到的數(shù)據(jù)存放在inp_buffer中 dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);/* Set number of frames f

45、or channel 2 */ DMA_FRAMECOUNT(DMA_CH2, 1); /* Set up global autoinit registers for DMA CH2 Input */ dmgsa = src_addr;/將通道源地址賦給全局源地址重載寄存器 dmgda = dst_addr;/將通道目的地址賦給全局目的地址重載寄存器 dmgcr = 0xFF;/將通道單元記數(shù)寄存器的值賦給全局單元記數(shù)重載寄存器 dmgfr = 1;/將通道幀記數(shù)寄存器的值賦給全局幀記數(shù)重載寄存器 /* Set up global priority and enable control reg

46、ister for Ch2 */ dmpre = (HIGH_PRIORITY << 10) | (INTSEL_01 << 6);/DMA通道優(yōu)先級(jí)最高,中斷分配控制位給DMA2 dmsrcp = SPACE_DATA;/源地址為數(shù)據(jù)空間 dmdstp = SPACE_DATA;/目的地址為數(shù)據(jù)空間 dmidx0 = 0;/給單元地址索引寄存器賦值 dmidx1 = 0;/給單元地址索引寄存器賦值 dmfri0 = 0;/給幀地址索引寄存器賦值 dmfri1 = 0;/給幀地址索引寄存器賦值 dma_global_init(dmpre, dmsrcp, dmdstp,

47、 dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* Enable channel 2 */ DMA_ENABLE(DMA_CH2); /* prime the serial port to begin input buffer stream */ temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /* Enable DMAC2 interrupt */ INTR_ENABLE(DMAC2); /* Enable Global Interrupts */ INTR_GLOB

48、AL_ENABLE;/* Endless loop waiting for DMAC2 interrupt */ for(;);interrupt void timer0_isr(void)a+;interrupt void timer1_isr(void)b+;void interrupt_init(void)IFR|=0x0ffff;/clear all interrupt flagIMR|=0x0003;/enable timer0 interrupt/PMST=PMST&0x007f|0x4000;/set IPTRPMST=0x4020;/set IPTRasm("

49、 RSBX INTM ");/enable all interrupt/*/* delay() */*/void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period; j+); 2、dmac2isr.c(中斷服務(wù)程序)#include <codec.h>#include <firlab.h>#include<math.h>extern void delay(s16 period);externunsigned int channel; /*IN: DMA channel number */externunsigned int dmsefc; /*IN: Value to set sync & fr reg */externunsigned int dmmcr; /*IN: Value to set mode control reg */externunsigned int dmctr; /*IN: Value to set element count reg */

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論