- 相關(guān)推薦
基于DSP的語音處理系統(tǒng)的設(shè)計(jì)
摘 要 近年來,隨著DSP技術(shù)的普及和低價(jià)格、高性能DSP芯片的出現(xiàn),DSP已越來越多地被廣大的工程師所接受越來越廣泛地被應(yīng)用于各個(gè)領(lǐng)域,并且已日益顯示出其巨大的優(yōu)越性。DSP是利用專門或通用的數(shù)字信號(hào)處理芯片,以數(shù)字計(jì)算的方法對(duì)信號(hào)進(jìn)行處理,具有處理速度快、靈活、精確、抗干擾能力強(qiáng)、體積小及可靠性高等優(yōu)點(diǎn),滿足了對(duì)信號(hào)快速、精確、實(shí)時(shí)處理及控制的要求。本次設(shè)計(jì)基于TLV320AIC23和TMS320VC5416兩種芯片設(shè)計(jì)并實(shí)現(xiàn)了一種語音錄音、語音編碼、語音解碼、語音處理和回放的系統(tǒng)。通過軟件和硬件結(jié)合對(duì)該系統(tǒng)進(jìn)行設(shè)計(jì),使本次設(shè)計(jì)的語音處理系統(tǒng)具有強(qiáng)大的數(shù)據(jù)處理能力并配有靈活的接口電路,可以作為一種語音信號(hào)處理算法研究和實(shí)時(shí)實(shí)現(xiàn)的通用平臺(tái),對(duì)語音編碼在DSP上的實(shí)時(shí)實(shí)現(xiàn)進(jìn)行了簡(jiǎn)單的研究,從而掌握了算法移植的一般流程,為能夠在高速DSP硬件平臺(tái)設(shè)計(jì)及系統(tǒng)應(yīng)用開發(fā)方面取得成功奠定基礎(chǔ)。 關(guān)鍵詞:DSP;數(shù)據(jù)采集; TLV320AIC23;TMS320VC5416。 目錄 摘 要 I 第1章 緒論 1 1.1 DSP的發(fā)展及應(yīng)用 1 1.2 語音信號(hào)處理系統(tǒng)概述 2 第2章 DSP芯片介紹 3 2.1 TLV320AIC23簡(jiǎn)介 3 2.2 TMS320VC5416簡(jiǎn)介 3 第3章 系統(tǒng)設(shè)計(jì) 4 3.1系統(tǒng)硬件設(shè)計(jì) 4 3.1.1系統(tǒng)結(jié)構(gòu)框圖 4 3.1.2 DSP處理器 5 3.1.3 A/D電路 5 3.1.4 D/A電路 7 3.2系統(tǒng)軟件設(shè)計(jì) 10 3.2.1 TMS320VC5416初始化 10 3.2.2 TLV320AIC23初始化 10 第4章 總結(jié) 11 參考文獻(xiàn) 12 致謝 13 附錄 14 第1章 緒論 近年來,在數(shù)字信號(hào)處理領(lǐng)域有著絕對(duì)優(yōu)勢(shì)的DSP技術(shù)得到了迅速發(fā)展,不僅在通信計(jì)算機(jī)領(lǐng)域大顯身手,并已逐漸滲透到人們?nèi)粘OM(fèi)領(lǐng)域。正因?yàn)槿绱,DSP應(yīng)用越來越得到普遍重視。 DSP作為可編程數(shù)字信號(hào)處理專用芯片是微型計(jì)算機(jī)發(fā)展的一個(gè)重要分支,也是數(shù)字信號(hào)處理理論實(shí)用化過程的重要技術(shù)工具。DSP器件分為兩大類:一類是專門用于FFT、FIR濾波、卷積等運(yùn)算的芯片,稱為專用DSP器件;另一類是可以通過編程完成各種用戶要求的信息處理任務(wù)的芯片 ,稱為通用數(shù)字信號(hào)處理器件。 1.1 DSP的發(fā)展及應(yīng)用 最初的DSP器件只是被設(shè)計(jì)用以完成復(fù)雜數(shù)字信號(hào)處理算法。這可以追溯到20世紀(jì)50年代到60年代,那時(shí)數(shù)字信號(hào)處理技術(shù)剛剛起步。由于一般的數(shù)字信號(hào)處理算法運(yùn)算量大,因此,算法只能在大型計(jì)算機(jī)上進(jìn)行模擬仿真,無法實(shí)現(xiàn)數(shù)字信號(hào)處理。60年代中期,快速傅里葉算法的出現(xiàn)及大規(guī)模集成電路的發(fā)展,奠定了硬件完成數(shù)字信號(hào)處理算法和數(shù)字信號(hào)處理理論實(shí)用化的重要技術(shù)基礎(chǔ),從而促進(jìn)了近40年來DSP技術(shù)與器件的飛速發(fā)展。 通用DSP器件的發(fā)展可分為三個(gè)階段:第一階段(1980年前后),DSP雛形階段。第二階段(1990年前后),DSP的成熟階段。第三階段(2000年以后),DSP的完善階段。 目前,DSP的發(fā)展非常迅速。硬件結(jié)構(gòu)方面主要是向多處理器的并行處理結(jié)構(gòu)、便于外部數(shù)據(jù)交換的串行總線傳輸、大容量片上RAM和ROM、程序加密、增加I/O驅(qū)動(dòng)能力、外圍電路內(nèi)裝化、低功耗等方面發(fā)展。軟件方面主要是綜合開發(fā)平臺(tái)的完善,使DSP的應(yīng)用開發(fā)更加靈活方便。 目前,DSP芯片的價(jià)格越來越低,性能價(jià)格比日益提高,具有巨大的應(yīng)用潛力。DSP芯片的主要應(yīng)用: ① 信號(hào)處理——數(shù)字濾波,自適應(yīng)濾波,快速傅里葉變換,相關(guān)運(yùn)算,頻譜分析,卷積,波形產(chǎn)生等; ② 語音處理——語音編碼,語音識(shí)別,語音合成,文本—語音轉(zhuǎn)換等; ③ 圖象圖形處理——三維圖形轉(zhuǎn)換,機(jī)器人視覺,圖象轉(zhuǎn)換及壓縮,模式識(shí)別,圖象增強(qiáng)等; ④ 控制——司服控制,機(jī)器人控制,自適應(yīng)控制,神經(jīng)網(wǎng)絡(luò)控制等; ⑤ 軍事——保密通信,雷達(dá)及聲音信號(hào)處理,導(dǎo)航及制導(dǎo),調(diào)制解調(diào),全球定位,搜索與跟蹤等; ⑥ 儀器儀表——頻譜分析,函數(shù)發(fā)生器,模態(tài)分析,暫態(tài)分析等; ⑦ 通訊——回音相消,高速調(diào)制解調(diào)器,數(shù)字編碼與解碼,自適應(yīng)均衡,移動(dòng)電話,擴(kuò)展通訊,噪音對(duì)消,網(wǎng)絡(luò)通訊等; ⑧ 消費(fèi)電子——高清晰度電視,音樂合成器,智能玩具,游戲等; ⑨ 醫(yī)學(xué)——助聽器,病員監(jiān)控,超聲波設(shè)備,自動(dòng)診斷設(shè)備,胎兒監(jiān)控等。 1.2 語音信號(hào)處理系統(tǒng)概述 語音處理在現(xiàn)代通信中應(yīng)用非常廣泛,主要有語音編碼、語音識(shí)別、語音合成、語音郵件、語音存儲(chǔ)等。典型的語音處理系統(tǒng)如下圖1.1所示: 圖1.1 典型的語音處理系統(tǒng) 圖中的輸入信號(hào)可以有各種各樣的形式。例如,它可以是麥克風(fēng)輸入的語音信號(hào)或是電話線已調(diào)的數(shù)據(jù)信號(hào),可以是編碼后在數(shù)字鏈路上傳輸或存儲(chǔ)在計(jì)算機(jī)里德攝像機(jī)圖象信號(hào)等。 輸入信號(hào)首先進(jìn)行帶限濾波和抽樣,然后進(jìn)行A/D變換將信號(hào)變成數(shù)字比特流。根據(jù)奈奎斯特抽樣定理,為保證信息不丟失,抽樣頻率至少是輸入帶限信號(hào)最高頻率的2倍。 DSP芯片的輸入是A/D變換后得到的以抽樣形式表示的數(shù)字信號(hào)。DSP芯片對(duì)輸入的數(shù)字信號(hào)進(jìn)行某種處理。數(shù)字處理是DSP系統(tǒng)的關(guān)鍵,這與其它系統(tǒng)(如電話交換系統(tǒng))有很大的不同。在交換系統(tǒng)中,處理器的作用是進(jìn)行路由選擇,它并不對(duì)輸入數(shù)據(jù)進(jìn)行修改。因此兩者雖然都是實(shí)時(shí)系統(tǒng),但兩者的實(shí)時(shí)約束條件卻有很大不同。最后,經(jīng)過處理后的數(shù)字樣值再經(jīng)D/A變換轉(zhuǎn)換為模擬樣值。之后進(jìn)行內(nèi)插和平滑濾波就會(huì)得到連續(xù)的模擬波形。 上面給出的典型的DSP語音處理系統(tǒng),根據(jù)不同的用途應(yīng)有不同的變動(dòng)。 第2章 DSP芯片介紹 2.1 TLV320AIC23簡(jiǎn)介 TLV320AIC23(簡(jiǎn)稱AIC23)是TI公司的一款高性能Codec芯片。主要特性有:內(nèi)置耳機(jī)輸出放大器,支持MIC和LINE IN兩種輸入方式(二選一)。且對(duì)輸入和輸出都具有可編程增益調(diào)節(jié);芯片中的A/D轉(zhuǎn)換器和D/A轉(zhuǎn)換器采用多位的Sigma-Delta技術(shù),數(shù)據(jù)傳輸字長(zhǎng)為16、20、24、32bit,采樣率為8kHz ~96kHz;在采樣率為96kHz情況下A/D轉(zhuǎn)換器信噪比達(dá)到90dB,D/A轉(zhuǎn)換器達(dá)到100dB;回放模式下功率為23mW,省電模式下更是小于15uW;只占用25mm的面積。基于上述優(yōu)點(diǎn),AIC23是可移動(dòng)的數(shù)字音頻播放和錄音使用中的模擬輸入輸出等應(yīng)用系統(tǒng)的理想選擇,例如MP3播放器等。 2.2 TMS320VC5416簡(jiǎn)介 TMS320VC5416(以下簡(jiǎn)稱VC5416)是TI公司的一款16bit定點(diǎn)高性能DSP,是TMS320VC54x系列中的第3代芯片。主要特性有:速率最高達(dá)160MI/s;3條16bit數(shù)據(jù)存儲(chǔ)器總線和1條程序存儲(chǔ)器總線;1個(gè)40bit桶形移位器和2個(gè)40bit累加器;1個(gè)17×17乘法器和1個(gè)40bit專用加法器;最大8M×16bit的擴(kuò)展尋址空間,內(nèi)置128k×16bit的RAM和16k×16bit的ROM;3個(gè)多通道緩沖串口(McBSP);配有PCM3002,可對(duì)語音進(jìn)行A/D和D/A轉(zhuǎn)換。由于VC5416功耗低,性能高,其分開的數(shù)據(jù)和指令空間使該芯片具有高度的并行操作能力,在單周期內(nèi)允許指令和數(shù)據(jù)同時(shí)存取,再加上高度優(yōu)化的指令集,使得該芯片具有很高的運(yùn)算速度并且該芯片本身具有豐富的片內(nèi)存儲(chǔ)器資源和多種片上外設(shè),因此在工程界得到廣泛應(yīng)用,尤其是在語音編碼和通信應(yīng)用方面。 第3章 系統(tǒng)設(shè)計(jì) 3.1系統(tǒng)硬件設(shè)計(jì) 3.1.1系統(tǒng)結(jié)構(gòu)框圖 音頻系統(tǒng)應(yīng)該具有較寬的動(dòng)態(tài)范圍,選擇16~24位的ADC和DAC能完全捕獲或恢復(fù)高保真的音頻信號(hào)。系統(tǒng)的核心芯片(DSP)選用美國(guó)TI公司的TMS320VC5402[1](以下簡(jiǎn)稱C5402)。 DSP芯片模塊是整個(gè)實(shí)時(shí)語音處理系統(tǒng)的核心部分,它對(duì)經(jīng)數(shù)字化的信號(hào)進(jìn)行壓縮,編解碼等。 A/D轉(zhuǎn)換模塊功能是把模擬信號(hào)數(shù)字化,包括采集和量化,這部分為DSP處理語音數(shù)字信號(hào)做好了準(zhǔn)備;D/A轉(zhuǎn)換模塊就是把數(shù)字信號(hào)轉(zhuǎn)換為模擬的信號(hào),輸出音頻信號(hào)。 SDRAM(動(dòng)態(tài)隨機(jī)存儲(chǔ)器)存儲(chǔ)器模塊主要是為DSP處理器擴(kuò)展存儲(chǔ)容量,達(dá)到要求的存儲(chǔ)容量;但要注意的是要與DSP處理器的速度相匹配,以便良好的運(yùn)行。電源模塊是為內(nèi)部芯片及周邊系統(tǒng)電路提供能量的部分。 系統(tǒng)結(jié)構(gòu)框圖圖3.1如下所示: 圖3.1 系統(tǒng)結(jié)構(gòu)框圖 3.1.2 DSP處理器 作為DSP家族高性價(jià)比代表的16位定點(diǎn)DSP芯片,C5402適用于語音通信等實(shí)時(shí)嵌入應(yīng)用場(chǎng)合。與其它C54X芯片一樣,C5402具有高度靈活的可操作性和高速的處理能力。其性能特點(diǎn)如下:操作速率可達(dá)100MIPS;具有先進(jìn)的多總線結(jié)構(gòu),三條16位數(shù)據(jù)存儲(chǔ)器總線和一條程序存儲(chǔ)器總線;40位算術(shù)邏輯單元(ALU),包括一個(gè)40位桶形移位器和兩個(gè)40位累加器;一個(gè)17×17乘法器和一個(gè)40位專用加法器,允許16位帶/不帶符號(hào)的乘法;整合維特比加速器,用于提高維特比編譯碼的速度;單周期正規(guī)化及指數(shù)譯碼;8個(gè)輔助寄存器及一個(gè)軟件棧,允許使用業(yè)界最先進(jìn)的定點(diǎn)DSP C語言編譯器;數(shù)據(jù)/程序?qū)ぶ房臻g為1M×16bit,內(nèi)置4K×16bit ROM和16k×16bit RAM;內(nèi)置可編程等待狀態(tài)發(fā)生器、鎖相環(huán)(PLL)時(shí)鐘產(chǎn)生器、兩個(gè)多通道緩沖串口、一個(gè)與外部處理器通信的8位并行HPI口、兩個(gè)16位定時(shí)器以及6通道DMA控制器且低功耗。與C54X系列的其它芯片相比,5402具有高性能、低功耗和低價(jià)格等特點(diǎn)。它采用6級(jí)流水線,且當(dāng)RPT(重復(fù)指令)時(shí),一些多周期的指令就變成了單周期的指令;芯片內(nèi)部RAM和ROM可根據(jù)PMST寄存器中的OVLY和DROM位靈活設(shè)置。這些都有利于算法的優(yōu)化。 C5402采用3.3V和1.8V電源供電,其中I/O采用3.3V電源供電,芯片的核采用1.8V電源供電。而實(shí)際常用的只有5V電源,所以必須采用電源轉(zhuǎn)換芯片。選用TPS7301和TPS7333兩塊電源轉(zhuǎn)換芯片(它們都是TI公司為配合DSP而設(shè)計(jì)的電源轉(zhuǎn)換芯片),分別接上適當(dāng)?shù)耐鈬娮,?gòu)成電阻分壓器,即可調(diào)整兩塊芯片的輸出電壓分別為3.3V和1.8V。 3.1.3 A/D電路 PCM1800是雙聲道單片Δ-Σ型20位ADC,單+5V電源供電,信噪比為95dB,動(dòng)態(tài)范圍為95dB,其內(nèi)部嵌有高通濾波器,具有PCM音頻接口和四種數(shù)據(jù)格式,分為主控和受控兩種模式,采樣頻率可選為32kHz、44.1KHz和48KHz。 PCM1800構(gòu)成音頻信號(hào)采集系統(tǒng)時(shí),主要涉及到BCK(位時(shí)鐘信號(hào))、LRCK(采樣時(shí)鐘信號(hào))、FSYNC(幀同步信號(hào))、DOUT(數(shù)字信號(hào)輸出)、SYSCLK(系統(tǒng)時(shí)鐘輸入)這幾個(gè)對(duì)時(shí)序有要求的引腳。通過對(duì)引腳MODE0和MODE1進(jìn)行編程,可讓PCM1800工作于主控模式(Master Mode)。此時(shí),BCK、LRCK、FSYNC均作為輸出,其時(shí)序由PCM1800內(nèi)部的時(shí)鐘產(chǎn)生電路控制。但SYSCLK只能由外部提供(這里用C5402的TOUT腳輸出信號(hào)提供)。 PCM1800的系統(tǒng)時(shí)鐘只能是256fs、384fs或者512fs,這里fs是音頻信號(hào)采樣頻率。在主控模式時(shí),F(xiàn)SYNC用來指明PCM1800的DOUT輸出的有效數(shù)據(jù),它的上升沿表明一幀數(shù)據(jù)的起始,下降沿表明一幀數(shù)據(jù)的結(jié)束。FSYNC的頻率是采樣時(shí)鐘頻率LRCK的2倍。在此模式下,位時(shí)鐘信號(hào)BCK的頻率是采樣時(shí)鐘頻率LRCK的64倍。 通過對(duì)PCM1800的FMT0、FMT1兩引腳編程(FMT0=1,F(xiàn)MT1=0),可以設(shè)置PCM1800輸出的數(shù)據(jù)格式為20位的IIS格式。為了保證在數(shù)據(jù)處理時(shí)不影響新數(shù)據(jù)的接收以及在接收數(shù)據(jù)時(shí)不中斷正在進(jìn)行的數(shù)據(jù)處理過程,采用了多通道緩沖同步串口(McBSP)。 PCM1800與C5402連接后,C5402使用緩沖串口0接收數(shù)據(jù),各種同步信號(hào)由PCM1800產(chǎn)生,C5402是被動(dòng)接收各種信息。PCM1800與C5402的硬件接線圖如圖3.2所示。 圖3.2 PCM1800與C5402的硬件接線圖 電源管理功能模塊 所用器件: TPS73HD301( 3.3-V/Adjustable Output 該芯片一端輸入可調(diào),范圍是(1.2-9.7V) 電源模塊管腳圖3.3如下所示: 圖3.3 電源模塊管腳圖 3.1.4 D/A電路 PCM1744是雙聲道立體聲DAC,包含數(shù)字濾波器和輸出放大器,動(dòng)態(tài)范圍為95dB,具有多種采樣頻率可選,最高可達(dá)96kHz。采用24位的IIS數(shù)據(jù)輸入格式。PCM1744的操作主要涉及到LRCIN(采樣時(shí)鐘信號(hào)輸入)、BCKIN(位時(shí)鐘信號(hào)輸入)、SCKI(系統(tǒng)時(shí)鐘輸入)、DIN(數(shù)據(jù)輸入)這幾個(gè)對(duì)時(shí)序有要求的引腳。PCM1744與C5402連接后,C5402使用緩沖串口1發(fā)送數(shù)據(jù),各種時(shí)鐘信號(hào)均由C5402產(chǎn)生,PCM1744被動(dòng)接收各種信息。PCM1744的系統(tǒng)時(shí)鐘信號(hào)(SCKI)由C5402的TOUT引腳提供,TOUT是C5402的定時(shí)器輸出信號(hào)引腳,有較強(qiáng)的驅(qū)動(dòng)能力,可以驅(qū)動(dòng)多個(gè)芯片。PCM1744的數(shù)據(jù)接收時(shí)鐘格式必須是IIS格式,C5402在緩沖串口寄存器中設(shè)置各種時(shí)鐘方式時(shí),必須滿足IIS格式的要求。C5402作為主動(dòng)工作器件,可以對(duì)其緩沖串口輸出信號(hào)進(jìn)行調(diào)整。輸出的采樣時(shí)鐘信號(hào)、位時(shí)鐘信號(hào)可以在McBSP寄存器SRGR1和SRGR2中設(shè)置,設(shè)置遵循圖3.4的原則。 圖3.4 C5402時(shí)鐘發(fā)生流程圖 基本的時(shí)鐘信號(hào)可以來自CPU時(shí)鐘,也可以來自晶振時(shí)鐘,這在SRGR2寄存器中的第13位設(shè)置。基本時(shí)鐘輸入后,經(jīng)CLKGDV(SRGR1的第7位到第0位)所設(shè)置的值進(jìn)行第一次分頻,得到位時(shí)鐘信號(hào)(由BCLKX1腳輸出)。值得注意的是,位時(shí)鐘信號(hào)最高為DSP頻率的一半。位時(shí)鐘信號(hào)經(jīng)FPER(SRGR2的第11位到第0位)和FWID(SRGR1的第15位到第8位)所設(shè)置的值進(jìn)一步分頻得到采樣時(shí)鐘信號(hào)(由BFSX1腳輸出),F(xiàn)PER和FWID分別設(shè)置采樣時(shí)鐘信號(hào)的低電平和高電平的時(shí)間值。C5402與PCM1744的硬件接線如圖3.5所示。 圖3.5 PCM1744與C5402接線圖 PCM1800完成音頻信號(hào)采集后,在DSP的外擴(kuò)程序存儲(chǔ)器中嵌入相應(yīng)的處理算法,語音信號(hào)經(jīng)處理后,再?gòu)腜CM1744輸出。 復(fù)位電路:所用芯片為74HC14。 復(fù)位電路圖3.6如下所示: 圖3.6 復(fù)位電路圖 存儲(chǔ)器模塊 所用芯片為:MT48LC8M8A2TG-75、存儲(chǔ)容量Density 為64Mb、數(shù)據(jù)寬度16位、工作電壓 3.3V、 TSOP封裝 54管腳、 時(shí)鐘速率133 MHz、 存儲(chǔ)器模塊圖3.7如下所示: 圖3.7 存儲(chǔ)器模塊圖 3.2系統(tǒng)軟件設(shè)計(jì) 3.1.1 TMS320VC5416初始化 SWWSR=0x7fff;/程序、數(shù)據(jù)、I/O空間 SWCR=0x0001;/等待周期為7×2=14 BSCR=0x8006;/按32KW分區(qū),HD[7:0],D[15:0]Hold CLKMD=PLL_DIV_INIT; Waitloop(0x0400); CLKMD=PLL_LOCK_INIT_X(5); Waitloop(0x0400); PMST=0x0168;/中斷向量表定位在0X100,MP/MC=1 OVLY=1 DROM=1; 3.2 TLV320AIC23初始化 為使AIC23正常工作并產(chǎn)生預(yù)期的音頻效果,必須對(duì)其相應(yīng)的寄存器進(jìn)行配置。首先對(duì)VC5416的I2C模塊初始化,將AIC23總線上的地址寫入從機(jī)地址寄存器ICSAR;再把相應(yīng)的AIC23內(nèi)部映射寄存器的地址和待寫數(shù)據(jù)合并為16bit控制字,逐次寫入ICDXR,并通過I2C總線發(fā)送給AIC23,即可完成對(duì)AIC23的初始化配置! AIC23初始化的部分源代碼: Unsigned int codec_buf[9]={OX1e00,OXOc00,OxO81a OxOaO4,OxOe01,0x1020,0x1021,0x0117,OxO5f9}; Port_sub_address=(unsigned int*)MCBSP_SPSA_ADDR(1); Port_sub_index_reg=(unsigned int*)MCBSP_SPAD_ADDR(1); *Port_sub_address=MCBSP_SPCR2_SUBADDR; For(i=O;i<9;i++){ While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_low(); MCBSP1_DXR1=codec_buf[i]; While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_high();} 第4章 總結(jié) 經(jīng)過這次的課程設(shè)計(jì),我發(fā)現(xiàn)我在DSP這方面學(xué)得不夠,很多東西都學(xué)得不夠全面,掌握得不夠深,不能熟練地把它們應(yīng)用在實(shí)踐當(dāng)中。這次在劉偉春老師的細(xì)心指導(dǎo)和同學(xué)的熱心幫助,以及自己上網(wǎng)查找資料下,還算比較順利地完成了本次課程設(shè)計(jì)的任務(wù)。這次課程設(shè)計(jì)使我對(duì)DSP方面的知識(shí)有更深的理解,強(qiáng)化了自己的基礎(chǔ)知識(shí),也深刻體會(huì)到DSP技術(shù)應(yīng)用領(lǐng)域的廣泛。同時(shí)對(duì)CCS集成環(huán)境更為熟悉了,為我在今后的工作中奠定了堅(jiān)實(shí)的實(shí)踐基礎(chǔ)。通過這次課程設(shè)計(jì)讓我明白基礎(chǔ)知識(shí)的重要性,同時(shí)也要理解更多的有關(guān)它的知識(shí),并且很好地運(yùn)用到實(shí)踐當(dāng)中,也讓我知道了要好好地學(xué)習(xí),不能懈怠。 參考文獻(xiàn) [1]戴明楨等編著.TMS320C54X DSP 結(jié)構(gòu)原理及應(yīng)用. 北京:航空航天大學(xué)出版社,第2版,2007; [2]彭啟琮編著.DSP技術(shù)的發(fā)展與應(yīng)用.北京:高等教育出版社,2002; [3]胡廣書編著.數(shù)字信號(hào)處理理論、算法與實(shí)現(xiàn).北京:清華大學(xué)出版社,2005; [4]張雄偉,曹鐵勇.DSP芯片的原理與開發(fā)應(yīng)用(第二版)[M].北京:電子工業(yè)出版社,2000; [5]郝軟層,徐金甫.基于DSP芯片的MELP聲碼器的算法實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006; [6]任麗香,馬淑芬,李方慧.TMS220600系列DSP的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2000; [7]北京合眾達(dá)電子技術(shù)有限公司編著.SEED-DTK系列實(shí)驗(yàn)手冊(cè).北京合眾達(dá)電子技術(shù)有限公司出版,2007。 致 謝 在這次課程設(shè)計(jì)過程中,我要感謝每一個(gè)幫助過我的人。本論文是在劉老師的悉心指導(dǎo)下完成的,劉老師對(duì)我的論文提出了很多寶貴的意見,幫助我開拓研究思路,精心點(diǎn)撥、熱忱鼓勵(lì)。同時(shí),劉老師淵博的學(xué)識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度也令我十分敬佩,是我以后學(xué)習(xí)和工作的榜樣。在整個(gè)設(shè)計(jì)過程中我懂得了許多東西,也培養(yǎng)了我獨(dú)立工作的能力,樹立了對(duì)自己工作能力的信心,相信會(huì)對(duì)今后的學(xué)習(xí)工作生活有非常重要的影響,同時(shí),也讓我知道了那些基礎(chǔ)知識(shí)的重要性。本論文的順利完成,離不開我們老師悉心教導(dǎo)、同學(xué)和朋友的關(guān)心和幫助。 總之,感謝每一位關(guān)心過我,愛護(hù)過我的人。最后,再次感謝各位老師各位同學(xué)的幫助和支持,衷心地謝謝你們! 附 錄 源代碼如下: #include void iirbcf(ifilt,band,ns,n,f1,f2,f3,f4,db,b,a) double b[],a[],f1,f2,f3,f4,db; /* TMS320VC5416初始化*/ SWWSR=0x7fff;/程序、數(shù)據(jù)、I/O空間 SWCR=0x0001;/等待周期為7×2=14 BSCR=0x8006;/按32KW分區(qū),HD[7:0],D[15:0]Hold CLKMD=PLL_DIV_INIT; Waitloop(0x0400); CLKMD=PLL_LOCK_INIT_X(5); Waitloop(0x0400); PMST=0x0168;/中斷向量表定位在0X100,MP/MC=1 OVLY=1 DROM=1; /* TLV320AIC23初始化*/ Unsigned int codec_buf[9]={OX1e00,OXOc00,OxO81a OxOaO4,OxOe01,0x1020,0x1021,0x0117,OxO5f9}; Port_sub_address=(unsigned int*)MCBSP_SPSA_ADDR(1); Port_sub_index_reg=(unsigned int*)MCBSP_SPAD_ADDR(1); *Port_sub_address=MCBSP_SPCR2_SUBADDR; For(i=O;i<9;i++){ While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_low(); MCBSP1_DXR1=codec_buf[i]; While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_high();} int ifilt,band,ns,n; { int k; double omega,lamda,epslon,f1,fh; double d[5],c[5]; void chebyi(),chebyii(),bwtf(); double coshl(),warp(),bpsub(),omin(); void fblt(); if((band==1)||(band==4)) fl=f1; if((band==2)||(band==3)) fl=f2; if(band<=3) fh=f3; if(band==4) fh=f4; if(ifilt<3) { switch(band) { case1: case2: { omega=warp(f2)/warp(f1); break; } case3: { omega=omin(bpsub(warp(f1),fh,fl),bpsub(warp(f4),fh,fl)); break; } case4: {omega=omin(1.0/bpsub(warp(f2),fh,fl),1.0/bpsub(warp(f3),fh,fl));} } lamda=pow(10.0,(db/20.0)); epslon=lamda/cosh(2*ns*coshl(omega)); } for(k=0;k{ switch(ifilt) { case1: { chebyi(2*ns,k,4,epslon,d,c); break; } case2: { chebyii(2*ns,k,4,omega,lamda,d,c); break; } case3: { bwtf(2*ns,k,4,d,c); break; } } fblt(d,c,n,band,fl,fh,&b[k*(n+1)+0],&a[(n+1)+0]); } } static double coshl(x) double x; { double z; z=log(x+sqrt(x*x-1.0)); return(z); } static double warp(f) double f; { double pi,z; pi=4.0*atan(1.0); z=tan(pi*f); return(z); } static double bpsub(om,fh,fl) double om,fh,fl; { double z; z=(om*om-warp(fh)*warp(fl))/((warp(fh)-warp(fl))*om); return(z); } static double omin(om1,om2) double om1,om2; { double z,z1,z2; z1=fabs(om1); z2=fabs(om2); z=(z1return(z); } static void bwtf(ln,k,n,d,c) int ln,k,n; double d[],c[]; { int i; double pi,tmp; pi=4.0*atan(1.0); d[0]=1.0; c[0]=1.0; for(i=1;i<=n;i++) { d[i]=0.0; c[i]=0.0; } tmp=(k+1)-(ln+1.0)/2.0; if(tmp==0,0) {c[1]=1.0;} else { c[1]=-2.0*cos((2*(k+1)+ln-1)*pi/(2*ln)); c[2]=1.0; } } static void chebyi(ln,k,n,ep,d,c) double d[],c[],ep; int ln,k,n; {int i; double pi,gam,omega,sigma; pi=4.0*atan(1.0); gam=pow(((1.0+sqrt(1.0+ep*ep))/ep),1.0/ln); sigma=0.5*(1.0/gam-gam)*sin((2*(k+1)-1)*pi/(2*ln)); omega=0.5*(1.0/gam+gam)*cos((2*(k+1)-1)*pi/(2*ln)); for(i=0;i<=n;i++) { d[i]=0.0; c[i]=0.0; } if(((ln%2)==1)&&((k+1)==(ln+1)/2)) { d[0]=-sigma; c[0]=d[0]; c[1]=1.0; } else { c[0]=sigma*sigma+omega*omega; c[1]=-2.0*sigma; c[2]=1.0; d[0]=c[0]; if(((ln%2)==0)&&(k==0)) d[0]=d[0]/sqrt(1.0+ep*ep); } } static void chebyii(ln,k,n,ws,att,d,c) double d[],c[],ws,att; int ln,k,n; { int i; double pi,gam,alpha,beta,sigma,omega,scln,scld; pi=4.0*atan(1.0); gam=pow((att+sqrt(att*att-1.0)),1.0/ln); alpha=0.5*(1.0/gam-gam)*sin((2*(k+1)-1)*pi/(2*ln)); beta=0.5*(1.0/gam+gam)*cos((2*(k+1)-1)*pi/(2*ln)); sigma=ws*alpha/(alpha*alpha+beta*beta); omega=-1.0*ws*beta/(alpha*alpha+beta*beta); for(i=0;i<=n;i++) { d[i]=0.0; c[i]=0.0; } if(((ln%2)==1)&&((k+1)==(ln+1)/2)) { d[0]=-1.0*sigma; c[0]=d[0]; c[1]=1.0; } else { scln=sigma*sigma+omega*omega; scld=pow((ws/cos((2*(k+1)-1)*pi/(2*ln))),2); d[0]=scln*scld; d[2]=scln; c[0]=d[0]; c[1]=-2.0*sigma*scld; c[2]=scld; } } #inlcude static void fblt(d,c,n,band,fln,fhn,b,a) int n,band; double fln,fhn,d[],d[],b[],a[]; { int i,k,m,n1,n2,ls; double pi,w,w0,w1,w2,tmp ,tmpd,tmpc,*work; double combin(); void bilinear(); pi=4.0*atan(1.0); w1=tan(pi*fln); for(i=n;i>=0;i--) { if((c[i]!=0.0)||(d[i]!=0.0)) break; } m=i; switch(band) { case1: case2: { n2=m; n1=n2+1; if(band==2) { for(i=0;i<=m/2;i++) { tmp=d[i]; d[i]=d[m-i]; d[m-i]=tmp; tmp=c[i]; c[i]c[m-i]; c[m-i]=tmp; } } for(i=0;i<=m;i++) { d[i]=d[i]/pow(w1,i); c[i]=c[i]/pow(w1,i); } break; } case3: case4: { n2=2*m; n1=n2+1; work=malloc(n1*n1*sizeof(double)); w2=tan(pi*fhn); w=w2-w1; w0=w1*w2; if(band==4) { for(i=0;i<=m/2;i++) { tmp=d[i]; d[i]=d[m-i]; d[m-i]=tmp; tmp=c[i]; c[i]=c[m-i]; c[m-i]=tmp; } } for(i=0;i<=n2;i++) { work[0*n1+i]=0.0; work[1*n1+i]=0.0; } for(i=0;i<=m;i++) { tmpd=d[i]*pow(w,(m-i)); tmpc=c[i]*pow(w,(m-i)); for(k=0;k<=i;k++) { ls=m+i-2*k; tmp=combin(i,i)/(combin(k,k)*combin(i-k,i-k)); work[0*n1+ls]+=tmpd*pow(w0,k)*tmp; work[1*n1+ls]+=tmpc*pow(w0,k)*tmp; } } for(i=0;i<=n2;i++) { d[i]=work[0*n1+i]; c[i]=work[1*n1+i]; } free(work); } } bilinear(d,c,b,a,n); } static double combin(i1,i2) int i1,i2; { int i; double s; s=1.0; if(i2==0) return(s); for(i=i1;i>(i1-i2);i--) {s*=i;} return(s); } static void bilinear(d,c,b,a,n) int n; double d[],c[],b[],a[]; { int i,j,n1; double sum,atmp,scale,*temp; n1=n+1; temp=malloc(n1*n1*sizeof(double)); for(j=0;j<=n;j++) {temp[j*n1+0]=1.0;} sum=1.0; for(i=1;i<=n;i++) { sum=sum*(double)(n-i+1)/(double)i; temp[0*n1+i]=sum; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) { temp[j*n1+i]=temp[(j-1)*n1+i]-temp[j*n1+i-1]-temp[(j-1)*n1+i-1]; } for(i=n;i>=0;i--) { b[i]=0.0; atmp=0.0; for(j=0;j<=n;j++) { b[i]=b[i]+temp[j*n1+i]*d[j]; atmp=atmp+temp[j*n1+i]*c[j]; } scale=atmp; if(i!=0) a[i]=atmp; } for(i=0;i<=n;i++) { b[i]=b[i]/scale; a[i]=a[i]/scale; } a[0]=1.0; free(temp); }【基于DSP的語音處理系統(tǒng)的設(shè)計(jì)】相關(guān)文章:
基于DSP和USB的數(shù)據(jù)采集處理系統(tǒng)的設(shè)計(jì)03-07
基于TMS320VC5402的語音處理系統(tǒng)03-07
基于DSP和以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng)03-20
基于DSP的智能座椅系統(tǒng)的設(shè)計(jì)03-07
基于TMS320C549DSP實(shí)現(xiàn)CVSD語音編解碼03-07
基于 DSP 的網(wǎng)絡(luò)通信程序設(shè)計(jì)03-20
基于DSP的聲控電子記事本的設(shè)計(jì)與實(shí)現(xiàn)03-19