版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> DSP課程設(shè)計(jì)</b></p><p> 實(shí) 驗(yàn) 報(bào) 告</p><p> 語(yǔ)音壓縮、存儲(chǔ)與回放</p><p><b> 評(píng)語(yǔ):</b></p><p><b> 指導(dǎo)教師簽字: </b></p><p>&
2、lt;b> 日期:</b></p><p><b> 實(shí)驗(yàn)背景與內(nèi)容</b></p><p> 語(yǔ)音通信是現(xiàn)代多媒體通信中一個(gè)重要的組成部分,而語(yǔ)音信號(hào)是信息的重要形式, 語(yǔ)音信號(hào)處理有著廣泛的應(yīng)用領(lǐng)域,同時(shí)語(yǔ)音壓縮在語(yǔ)音信號(hào)的傳輸、存儲(chǔ)等方面有非常廣泛的作用,而且在通信領(lǐng)域中已經(jīng)有較成熟的發(fā)展和廣泛應(yīng)用。本設(shè)計(jì)要求采用DSP及其A/D、D/A
3、轉(zhuǎn)換器進(jìn)行語(yǔ)音信號(hào)的壓縮、存儲(chǔ)和回放。</p><p> 語(yǔ)音的數(shù)字通信無(wú)論在可靠性、抗干擾能力、保密性還是價(jià)格方面都遠(yuǎn)優(yōu)于模擬語(yǔ)音信號(hào),但這是以信道占用寬頻帶寬為代價(jià)的。因此為了減少語(yǔ)音信號(hào)所占用的帶寬或存儲(chǔ)空間,就必須對(duì)數(shù)字語(yǔ)音信號(hào)進(jìn)行壓縮編碼。一個(gè)優(yōu)秀的語(yǔ)音壓縮系統(tǒng)要求能夠在軟硬件資源占用比例低和壓縮編解碼時(shí)間短的同時(shí),可以實(shí)現(xiàn)多通道語(yǔ)音實(shí)時(shí)壓縮。</p><p> DSP仿真器
4、用于DSP的在線(xiàn)調(diào)試開(kāi)發(fā),可以通過(guò)軟件在線(xiàn)控制DSP的運(yùn)行狀態(tài),并能夠查看DSP內(nèi)部寄存器。PC是開(kāi)發(fā)人員和DSP系統(tǒng)之間的交互界面,通過(guò)PC上安裝的CCS集成開(kāi)發(fā)環(huán)境,開(kāi)發(fā)人員可以在友好的圖形界面下對(duì)目標(biāo)系統(tǒng)進(jìn)行操作。</p><p> 本次實(shí)驗(yàn)采用DSP C5402實(shí)驗(yàn)板實(shí)現(xiàn)語(yǔ)音信號(hào)的壓縮解壓的。SEED-VC5402 DSK實(shí)驗(yàn)板上集成了SRAM,FLASH,音頻輸入輸出接口等部件。</p>
5、<p><b> 實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 1、應(yīng)用DSP算法實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)的壓縮、存儲(chǔ)和回放。</p><p> 2、熟悉使用C語(yǔ)言編寫(xiě)較復(fù)雜的程序; </p><p> 3、熟悉C語(yǔ)言對(duì)外設(shè)(DSK板或示波器)的訪(fǎng)問(wèn)(軟件編程、硬件連接); </p><p> 4、熟練使用軟件CCS5
6、000對(duì)程序的完整調(diào)試過(guò)程。</p><p> 三、實(shí)驗(yàn)設(shè)計(jì)要求及目標(biāo)</p><p><b> 1要求</b></p><p> ?。?)使用DSP實(shí)現(xiàn)語(yǔ)音壓縮和解壓縮的基本算法,算法類(lèi)型自定,例如可以采用G.711、G.729等語(yǔ)音壓縮算法。</p><p> (2)采用A/D轉(zhuǎn)換器從MIC輸入口實(shí)時(shí)采集語(yǔ)音信
7、號(hào),進(jìn)行壓縮后存儲(chǔ)到DSP的片內(nèi)和片外RAM存儲(chǔ)器中,存儲(chǔ)時(shí)間不小于10秒。</p><p> ?。?)存儲(chǔ)器存滿(mǎn)之后,使用DSP進(jìn)行實(shí)時(shí)解壓縮,并從SPEAKER輸出口進(jìn)行回放輸出。</p><p> (4)使用指示燈對(duì)語(yǔ)音存儲(chǔ)和回放過(guò)程進(jìn)行指示。</p><p><b> 2.設(shè)計(jì)思路 </b></p><p>
8、; 語(yǔ)音信號(hào)的幅度(發(fā)音強(qiáng)度)并非均勻分布,由于小信號(hào)占的比例比大信號(hào)大很多,因此可以進(jìn)行非均勻量化。達(dá)到這一目標(biāo)的基本做法是,對(duì)大信號(hào)使用大的量化間隔,而小信號(hào)則使用小的臺(tái)階。ITU-T G.711建議的PCM A律和µ律語(yǔ)音壓縮標(biāo)準(zhǔn)可以分別將13比特和14比特壓縮為8比特,達(dá)到語(yǔ)音壓縮的目的。</p><p><b> 四、實(shí)驗(yàn)原理</b></p><p
9、> 1、 DSK 包括:</p><p> 主芯片 1枚:100 MHz TMS320VC5402 DSP</p><p> RAM 1枚:1個(gè)軟件等待的64K×16bit的SRAM(CY7C1021V33)</p><p> FLASH 1枚:256K×16bit 的 FLASH存儲(chǔ)器(AM39VF400A)</p>
10、;<p> 接口 2個(gè):一個(gè)連接到PC機(jī)并口的主機(jī)端接口HPI和用于仿真的JTAG測(cè)試總線(xiàn)控制器 </p><p> 信號(hào)采集和輸出端口:麥克風(fēng)/耳機(jī)音頻接口 </p><p> C5402的硬件特點(diǎn):</p><p> 增強(qiáng)型哈佛結(jié)構(gòu),一個(gè)程序總線(xiàn),三個(gè)獨(dú)立的數(shù)據(jù)總線(xiàn);40bit的算術(shù)邏輯單元ALU ;可尋址的程序空間達(dá)1Mx1
11、6bit;4Kx16bit片內(nèi)ROM ;16Kx16bit雙口片內(nèi)RAM;片內(nèi)外設(shè):軟件可編程等待狀態(tài)發(fā)生器;片內(nèi)鎖相環(huán)時(shí)鐘發(fā)生器;兩個(gè)多通道緩沖串口;增強(qiáng)型8bit并行HPI口;兩個(gè)16bit定時(shí)器;六通道DMA控制器;節(jié)電模式IDLE1,IDLE2,IDLE3做功耗控制;單周期定點(diǎn)指令(100MIPS)執(zhí)行時(shí)間為10ns。</p><p> C5402硬件優(yōu)點(diǎn):</p><p>
12、內(nèi)部多總線(xiàn)結(jié)構(gòu)保證在一個(gè)機(jī)器周期內(nèi)可以多次訪(fǎng)問(wèn)程序空間和數(shù)據(jù)空間;指令執(zhí)行時(shí)的多重流水線(xiàn)結(jié)構(gòu)將指令周期降低到了最小值;多處理單元可以在一個(gè)指令周期內(nèi)同時(shí)進(jìn)行運(yùn)算,而這種結(jié)構(gòu)恰好滿(mǎn)足了數(shù)字信號(hào)處理中的一些特殊要求如FIR、IIR、FFT等運(yùn)算。</p><p> C5402的軟件特點(diǎn):7種有效靈活的尋址方式,僅為10ns的指令執(zhí)行周期。</p><p> 2、TMS320C5402的結(jié)構(gòu)
13、及原理 </p><p> TMS320C5402采用先進(jìn)的改進(jìn)的哈佛結(jié)構(gòu)和8條總線(xiàn)結(jié)構(gòu),解決了馮諾伊曼(Von-Neumann)結(jié)構(gòu)中高速數(shù)據(jù)傳輸時(shí)的傳輸通道上的瓶頸現(xiàn)象,使處理器的性能大大提高,程序數(shù)據(jù)總線(xiàn)相互獨(dú)立,允許同時(shí)訪(fǎng)問(wèn)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,實(shí)現(xiàn)高度并行操作。此外,還可以在數(shù)據(jù)總線(xiàn)與程序總線(xiàn)之間相互傳送數(shù)據(jù),從而使處理器具有在單個(gè)周期內(nèi)同時(shí)執(zhí)行算數(shù)運(yùn)算、邏輯運(yùn)算、移位操作、乘法/累加運(yùn)算以及訪(fǎng)問(wèn)程
14、序和數(shù)據(jù)存儲(chǔ)器的強(qiáng)大功能。</p><p> TMS320C5402的內(nèi)部多總線(xiàn)結(jié)構(gòu)保證在一個(gè)機(jī)器周期內(nèi)可以多次訪(fǎng)問(wèn)程序空間和數(shù)據(jù)空間;指令執(zhí)行時(shí)的多重流水線(xiàn)結(jié)構(gòu)將指令周期降低到了最小值;多處理單元可以在一個(gè)指令周期內(nèi)同時(shí)進(jìn)行運(yùn)算,而這種結(jié)構(gòu)恰好滿(mǎn)足了數(shù)字信號(hào)處理中的一些特殊要求如FIR、IIR、FFT等運(yùn)算。由于C5402有7種有效靈活的尋址方式的軟件特點(diǎn),僅為10ns的指令執(zhí)行周期,還有一些特殊的運(yùn)算指令更
15、好地滿(mǎn)足了數(shù)字信號(hào)處理中特有的運(yùn)算需要。 </p><p> TMS320C5402具有高速的,全雙工串行口,可用來(lái)與系統(tǒng)中的其他C54x器件,編碼解碼器,串行A/D,D/A轉(zhuǎn)換器以及其他的串行器件直接接口。這兩個(gè)串行口均為多通道緩沖串行口McBSP(Multi-channel Buffered Serial Port)。它支持全雙工通信,雙緩沖數(shù)據(jù)寄存器,允許連續(xù)的數(shù)據(jù)流。內(nèi)置μ-律和A-律壓擴(kuò)硬件。 <
16、;/p><p><b> DSP結(jié)構(gòu)框圖</b></p><p> 3、AD50的結(jié)構(gòu)與原理</p><p> AD50是單片音頻接口芯片(AIC)。它內(nèi)部集成了16位的D/A和A/D轉(zhuǎn)換器,采樣速率最高可達(dá)22.05kb/s,其采樣速率可通過(guò)DSP編程來(lái)設(shè)置。在DAC之前有一個(gè)插值濾波器以保證輸出信號(hào)平滑和ADC之后有一個(gè)抽取濾波器以提高輸
17、入信號(hào)的信噪比。 AD50內(nèi)部有7個(gè)數(shù)據(jù)和控制寄存器,用于編程控制它們的工作狀態(tài)。它的數(shù)據(jù)傳輸模式和采樣速率都可以通過(guò)DSP對(duì)其控制寄存器的編程來(lái)實(shí)現(xiàn),因此,在許多場(chǎng)合下,AD50都作為DSP的AIC來(lái)實(shí)現(xiàn)音頻處理。</p><p> 寄存器0:空操作寄存器。 寄存器1:軟件復(fù)位 軟件掉電 選擇16位或15位工作方式 硬件或軟件二次通信請(qǐng)求方式的選擇
18、 </p><p> 寄存器2:使能ALTDATA輸入端 為ADC選擇16/15位方式 </p><p> 寄存器3:選擇FS與FSD之間延遲SCLK的個(gè)數(shù) 告訴主機(jī)有幾個(gè)從機(jī)被聯(lián)上 </p><p> 寄存器4:為輸入和輸出放大器選擇放大器增益 選擇N來(lái)設(shè)置采樣頻率,fs=MCLK/(128*N)或MCLK/(512*N) 在MCLK輸入端使能外部時(shí)
19、鐘輸入并旁通內(nèi)部的PLL </p><p> 寄存器5,6:保留 </p><p> AD50與C5402之間的數(shù)據(jù)傳送采用串行方式,包括兩種傳輸模式:16位</p><p> 和15+1位傳輸模式。15+1位模式時(shí),其中的D0位表示二次通信。它們各</p><p><b> 自的時(shí)序如下: </b></
20、p><p><b> 4、程序存儲(chǔ)芯片</b></p><p> 實(shí)驗(yàn)中,電路選用的芯片SST39VF400是一個(gè)低功耗FLASH。</p><p> 芯片硬件特點(diǎn):A17至A0為外部地址管腳,D15至D0為1條數(shù)據(jù)線(xiàn),CE#為片選控制管腳(低有效),OE#為輸出控制管腳(低有效),WE#為寫(xiě)入控制管腳(低有效)。工作在2.7V至3.6V電壓
21、下,存儲(chǔ)容量位256KW,其。中的數(shù)據(jù)可以保持100年以上,可重復(fù)編程次數(shù)高達(dá)10萬(wàn)次。</p><p> 5、u_LAW/a_LAW的壓擴(kuò)硬件處理</p><p> 在電信中常常利用u律和a律對(duì)數(shù)據(jù)進(jìn)行壓擴(kuò)處理,C5400在McBSP中提供了專(zhuān)門(mén)的硬件實(shí)驗(yàn)這一功能。壓擴(kuò)處理時(shí),CPU訪(fǎng)問(wèn)到的都是16位的,他分別是利用線(xiàn)性的14位數(shù)據(jù)(u律)和13位(a律)數(shù)據(jù)左對(duì)齊獲得的。壓擴(kuò)硬件結(jié)
22、構(gòu)和相應(yīng)的數(shù)據(jù)如下圖所示。</p><p> 在本實(shí)驗(yàn)中,我們通過(guò)軟件編程來(lái)完成線(xiàn)性碼轉(zhuǎn)換成A律。</p><p> 語(yǔ)音信號(hào)通常是小信號(hào)概率大,大信號(hào)出現(xiàn)的概率小,為提高小信號(hào)時(shí)的量化信躁比,壓縮比特速率,可為非線(xiàn)性量化。語(yǔ)音壓縮是把16位的數(shù)據(jù)比特轉(zhuǎn)化為8位數(shù)據(jù)比特,從而到達(dá)語(yǔ)音壓縮的目的。</p><p> 在主程序中通過(guò)A/D抽樣量化,可以得到16位的
23、線(xiàn)性編碼,再由編碼表通過(guò)軟件計(jì)算得到8位A律編碼,其中最高位為符號(hào)位,第6位到第4位為段落碼,低4位為段內(nèi)碼。將8位的壓縮結(jié)果存儲(chǔ)到系統(tǒng)RAM中進(jìn)行緩存,根據(jù)抽樣率、語(yǔ)音存儲(chǔ)時(shí)間以及系統(tǒng)RAM的容量設(shè)置語(yǔ)音存儲(chǔ)緩沖區(qū)的大小,待緩沖區(qū)存滿(mǎn)后,將緩沖區(qū)內(nèi)的數(shù)據(jù)進(jìn)行解壓縮,然后輸出到SPEAKER接口輸出端。</p><p> 若使用A/D轉(zhuǎn)換器,必須首先對(duì)A/D轉(zhuǎn)換器進(jìn)行初始化設(shè)置,即設(shè)置A/D轉(zhuǎn)換器的工作模式、輸
24、入增益以及抽樣頻率等。</p><p><b> A律壓縮編碼表</b></p><p><b> 五、程序設(shè)計(jì)思路</b></p><p> DSP程序設(shè)計(jì)應(yīng)包括用戶(hù)程序、存儲(chǔ)器配置程序。為了實(shí)現(xiàn)語(yǔ)音信號(hào)的采集與回放,先將語(yǔ)音信號(hào)采集,運(yùn)用a律壓縮算法將信號(hào)壓縮并存入存貯器中,當(dāng)放音開(kāi)始時(shí)運(yùn)用a律解壓算法將信號(hào)解壓
25、并從存儲(chǔ)器中釋放出來(lái),實(shí)現(xiàn)語(yǔ)音的回放。</p><p><b> 1、軟件設(shè)計(jì)流程</b></p><p> 2、TMS320VC5402 mcbsp的串口的初始化</p><p> 首先將DSP的串口1復(fù)位,再對(duì)串口1的16個(gè)寄存器進(jìn)行編程,使串口1工作在以下?tīng)顟B(tài):禁止SPI模式,但數(shù)據(jù)相,每幀一字,每字16位,幀同步脈沖低電平有效,并
26、且?guī)叫盘?hào)和移位信號(hào)有外部時(shí)鐘產(chǎn)生。</p><p> hHandset = codec_open(HANDSET_CODEC); </p><p> 此語(yǔ)句調(diào)用了函數(shù)codec_open()對(duì)串口1進(jìn)行了初步設(shè)置,設(shè)置成功返回codec的句柄放在變量 hHandset中,作為調(diào)用其他函數(shù)的實(shí)參。</p><p> 3、AD50的初始化:</p>
27、;<p> 該初始化過(guò)程調(diào)用了5個(gè)函數(shù)對(duì)AD50的5項(xiàng)參數(shù)進(jìn)行了設(shè)置,包括adc和dac的工作模式,模擬輸入和輸出的增益;以及AD,DA的轉(zhuǎn)換速率。</p><p> 4、從McBSP的接收通道讀取A/D轉(zhuǎn)換的值,然后經(jīng)過(guò)壓縮解壓后將其發(fā)送到McBSP的發(fā)送通道,講解壓后的數(shù)據(jù)將數(shù)據(jù)寫(xiě)入D/A轉(zhuǎn)換器。</p><p><b> 程序如下:</b>&
28、lt;/p><p><b> while (1)</b></p><p><b> {</b></p><p> /* Wait for sample from handset */</p><p> while (!MCBSP_RRDY(HANDSET_CODEC)) </p>
29、<p><b> {};</b></p><p> /* Read sample from and write back to handset codec */</p><p> data=*(volatile int*)DRR1_ADDR(HANDSET_CODEC);</p><p> pre=int2alaw(data)
30、; /*or pre=int2ulaw(data);*/</p><p> data=alaw2int(pre); /*or data=ulaw2int(pre);*/</p><p> *(volatile int*)DXR1_ADDR(HANDSET_CODEC)=data;</p><p><b> 六、實(shí)驗(yàn)程序<
31、;/b></p><p><b> 1 C語(yǔ)言程序</b></p><p> /******************************************************************/</p><p> /* 頭文件
32、 */</p><p> /*******************************************************************/</p><p> #include <type.h></p><p> #include <board.h></p><p&g
33、t; #include <codec.h></p><p> #include <mcbsp54.h></p><p> /*******************************************************************/</p><p> /* 變量宏定義
34、 */</p><p> /*******************************************************************/</p><p> #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */<
35、;/p><p> #define QUANT_MASK (0xf) /* Quantization field mask. */</p><p> #define NSEGS (8) /* Number of A-law segments. */</p><p> #define SEG_SHIFT (4
36、) /* Left shift for segment number. */</p><p> #define SEG_MASK (0x70) /* Segment field mask. */</p><p> /******************************************************************/&l
37、t;/p><p> /* 函數(shù)聲明 */</p><p> /*******************************************************************/</p><p> void delay(s16 peri
38、od);</p><p> void led(s16 cnt);</p><p> void initcodec(void);</p><p> void flashenable(void);</p><p> unsigned char data2alaw(s16 pcm_val);</p><p> in
39、t alaw2data(unsigned char a_val);</p><p> static int search(int val,short *table,int size);</p><p> /*******************************************************************/</p><p>
40、/* 全局變量 */</p><p> /*******************************************************************/</p><p> HANDLE hHandset;</p><p><
41、;b> s16 data;</b></p><p> s16 data1;</p><p><b> u16 i=0;</b></p><p> u16 temp1;</p><p><b> u16 j=0;</b></p><p> u16
42、k,l=0;</p><p><b> u8 temp2;</b></p><p> u16 buffer[22000];</p><p> static short seg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};</p><p> /*****
43、**************************************************************/</p><p> /* 主函數(shù) */</p><p> /*********************************************
44、**********************/</p><p> void main()</p><p><b> {</b></p><p> if (brd_init(100))</p><p><b> return;</b></p><p> led(2);
45、 //閃燈兩次</p><p> initcodec(); //初始化codec</p><p> flashenable(); //選擇片外FLASH為片外存儲(chǔ)器</p><p><b> while (1)</b></p><p>&
46、lt;b> {</b></p><p> while (!MCBSP_RRDY(HANDSET_CODEC)) {}; //等待接收handset處的采樣</p><p> if (i==0) brd_led_toggle(BRD_LED0); //點(diǎn)亮二極管0,表示錄音開(kāi)始</p><p> data = *(
47、volatile u16*)DRR1_ADDR(HANDSET_CODEC); //從handset處讀取采樣</p><p> temp1=data2alaw(data); //對(duì)采樣進(jìn)行a律壓縮</p><p> /********************************************************
48、*********/</p><p> /* 把低地址數(shù)據(jù)放在高八位 高地址數(shù)據(jù)放在低八位 */</p><p> /*******************************************************************/ </p><p> i=i+1; </p><
49、;p> if(i%2==1)</p><p><b> { </b></p><p> buffer[j]=(temp1<<=8); </p><p> /*奇數(shù)數(shù)據(jù)左移8位 temp1=abcdefgh00000000</p><p> buffer[j]=temp1*/<
50、;/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> buffer[j]=(buffer[j]|temp1); </p><p> /*偶數(shù)數(shù)據(jù)與temp1取或
51、組成新的數(shù)據(jù)</p><p> buffer[j]=abcdefghiabcdefghi*/</p><p> j++; //j加1</p><p><b> }</b></p><p> if(i>=44000) </p><p><b> {</b>&
52、lt;/p><p><b> i=0;</b></p><p><b> }</b></p><p> if(j>=22000)</p><p><b> {</b></p><p><b> j=0;</b></
53、p><p> brd_led_toggle(BRD_LED0); //熄滅數(shù)碼管0 表示錄音結(jié)束</p><p> brd_led_toggle(BRD_LED1); //點(diǎn)亮二極管1 表示放音開(kāi)始</p><p> /*****************************************************************
54、**/</p><p> /* 放音部分 */</p><p> /*******************************************************************/ for(k=0;k<44000;k++)</p>&l
55、t;p><b> {</b></p><p> if(k%2==0)</p><p><b> { </b></p><p> temp2=(buffer[l]>>8)&0x0ff;</p><p><b> }</b></p
56、><p><b> else</b></p><p><b> {</b></p><p> temp2=buffer[l]&0x0ff;</p><p><b> l++;</b></p><p><b> }</b>
57、;</p><p> if(l>=22000)</p><p><b> l=0;</b></p><p> data1=alaw2data(temp2);</p><p> while (!MCBSP_XRDY(HANDSET_CODEC)) {}; </p><p> *
58、(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1;</p><p><b> }</b></p><p> /*******************************************************************/</p><p> /*
59、 放音結(jié)束 */</p><p> /*******************************************************************/</p><p> if(k==44000) brd_led_toggle(BRD_LED1); //熄滅二極管1 表示放音結(jié)束
60、 </p><p><b> }</b></p><p><b> } </b></p><p> } //主程序結(jié)束</p><p> /*********************
61、**********************************************/ </p><p> /* 子函數(shù)
62、*/ </p><p> /****************************************************************/</p><p> /*******延時(shí)******/</p><p
63、> void delay(s16 period)</p><p><b> {</b></p><p><b> int i, j;</b></p><p> for(i=0; i<period; i++)</p><p><b> {</b></p
64、><p> for(j=0; j<period>>1; j++);</p><p><b> }</b></p><p><b> }</b></p><p> /*******閃燈******/</p><p> void led(s16 cnt)&
65、lt;/p><p><b> {</b></p><p> while ( cnt-- )</p><p><b> {</b></p><p> brd_led_toggle(BRD_LED0);</p><p> delay(1000);</p>&l
66、t;p> brd_led_toggle(BRD_LED1);</p><p> delay(1000);</p><p> brd_led_toggle(BRD_LED2);</p><p> delay(1000);</p><p><b> }</b></p><p><
67、b> }</b></p><p> /*****初始化codec**/</p><p> void initcodec(void)</p><p><b> {</b></p><p> /* Open Handset Codec */</p><p> hHands
68、et = codec_open(HANDSET_CODEC); // Acquire handle to codec </p><p> /* Set codec parameters */</p><p> codec_dac_mode(hHandset, CODEC_DAC_15BIT); // DAC in 15-bit mode </p><p&
69、gt; codec_adc_mode(hHandset, CODEC_ADC_15BIT); // ADC in 15-bit mode </p><p> codec_ain_gain(hHandset, CODEC_AIN_6dB); // 6dB gain on analog input to ADC </p><p> codec_aout_gain(hHandset
70、, CODEC_AOUT_MINUS_6dB); </p><p> // -6dB gain on analog output from DAC </p><p> codec_sample_rate(hHandset,SR_8000); // 8KHz sampling rate </p><p><b>
71、}</b></p><p> /*****設(shè)置flash****/</p><p> void flashenable(void)</p><p><b> {</b></p><p> CPLD_CTRL2_REG|=0x0010;</p><p> CPLD_DMCTRL
72、_REG|=0x0040;</p><p><b> }</b></p><p> /*****a律壓縮******/</p><p> unsigned char data2alaw(s16 pcm_val) </p><p><b> {</b></p><
73、p> Int mask;</p><p><b> Int seg;</b></p><p> unsigned char aval;</p><p> if (pcm_val >= 0) </p><p><b> {</b></p><p>
74、mask = 0xD5; // 標(biāo)記 (7th) bit = 1</p><p><b> } </b></p><p><b> else </b></p><p><b> {</b></p><p> mask = 0x55; // 標(biāo)
75、記 bit = 0 </p><p> pcm_val = -pcm_val;</p><p><b> }</b></p><p> // Convert the scaled magnitude to segment number. </p><p> seg = search(pcm_val, seg_en
76、d, 8); </p><p> // Combine the sign, segment, and quantization bits. </p><p> if (seg >= 8) // out of range, 返回最大數(shù). </p><p> return (0x7F ^ mask);</p>&
77、lt;p><b> else </b></p><p><b> {</b></p><p> aval = seg << SEG_SHIFT;</p><p> if (seg < 2)</p><p> aval |= (pcm_val >> 1)
78、& QUANT_MASK;</p><p><b> else</b></p><p> aval |= (pcm_val >>seg) & QUANT_MASK;</p><p> return (aval ^ mask);</p><p><b> }</b>
79、</p><p><b> }</b></p><p> /****alaw的子程序**/</p><p> static int search(int val,short *table,int size)</p><p><b> {</b></p><p><
80、;b> Int i;</b></p><p> for (i = 0; i < size; i++) </p><p><b> {</b></p><p> if (val <= *table++)</p><p> return (i);</p><p&g
81、t;<b> }</b></p><p> return (size);</p><p><b> }</b></p><p> /*****a律解壓******/</p><p> int alaw2data(unsigned char a_val)</p><p&g
82、t;<b> {</b></p><p><b> Int t;</b></p><p><b> Int seg;</b></p><p> a_val ^= 0x55;</p><p> t = (a_val & QUANT_MASK) <<
83、; 4;</p><p> seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT;</p><p> if(seg==0) </p><p><b> {</b></p><p><b> t += 8;</b></p>
84、;<p><b> t=(t>>3);</b></p><p><b> }</b></p><p> if((seg<4)&&(seg>0)) </p><p><b> {</b></p><p> t +=0
85、x108;</p><p> t=(t>>(4-seg));</p><p><b> }</b></p><p><b> if(seg>3)</b></p><p><b> {</b></p><p><b>
86、 t+=0x108;</b></p><p> t=(t<<=(seg-4));</p><p><b> }</b></p><p> return ((a_val & SIGN_BIT) ? t : -t);</p><p><b> }</b></
87、p><p> /*******************************************************************/</p><p> /* 結(jié)束 */</p><p> /*******************
88、************************************************/</p><p> 2、存儲(chǔ)器的分配(*.cmd)</p><p><b> MEMORY</b></p><p><b> {</b></p><p> PAGE 0: VECS: o
89、rigin = 0080h, length = 0080h /* Internal Program RAM */</p><p> PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */</p><p> PAGE 1: SCRATCH: origin = 0060h, length = 0020h
90、 /* Scratch Pad Data RAM */</p><p> DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */</p><p> DATA: origin = 1100h, length = 0080h /* Internal Data RAM */</p><p>
91、 STACK: origin = 1180h, length = 0560h /* Stack Memory Space */</p><p> INRAM: origin = 1900h, length = 0100h /* Internal Data RAM */</p><p> HPRAM0: origin = 1A00h, length = 0
92、002h /* HPI memory accessible by Host and DSP */</p><p> HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */</p><p> HPRAM2: origin = 1C82h, length = 0280h
93、 /* HPI memory accessible by Host and DSP */</p><p> EXRAM: origin = 1F10h, length = 5A00h /* External Data RAM */</p><p><b> }</b></p><p><b> SECTIONS&
94、lt;/b></p><p><b> {</b></p><p> .cinit > PRAM PAGE 0</p><p> .text > PRAM PAGE 0</p><p> .vectors > VECS PAGE 0</p><p&
95、gt; init_var > PRAM PAGE 0</p><p> detect > PRAM PAGE 0</p><p> vrcprg > PRAM PAGE 0</p><p> matprg > PRAM PAGE 0</p><p> .stack > STAC
96、K PAGE 1</p><p> .trap > SCRATCH PAGE 1</p><p> .const > EXRAM PAGE 1</p><p> .data > EXRAM PAGE 1</p><p> .bss > EXRAM PAGE 1</p>
97、<p> .cio > EXRAM PAGE 1</p><p> .switch > EXRAM PAGE 1</p><p> tables > EXRAM PAGE 1</p><p> var > EXRAM PAGE 1</p><p> svctab
98、 > EXRAM PAGE 1 /* SS_V LSP table */</p><p> vctab > EXRAM PAGE 1 /* V LSP table */</p><p> uvctab > EXRAM PAGE 1 /* UV LSP table */</p><p&
99、gt; cuvtab > EXRAM PAGE 1 /* Stochastic codebook */</p><p> cdbktab > EXRAM PAGE 1 /* various codebook tables*/</p><p> logtab > EXRAM PAGE 1 /* tabl
100、e for log2 */</p><p> powtab > EXRAM PAGE 1 /* table for pow2 */</p><p> hamtab > EXRAM PAGE 1 /* table for hamming */</p><p> lgwtab > EXRAM
101、PAGE 1 /* table for lag window */</p><p> acostab > EXRAM PAGE 1 /* table for arccos */</p><p> sqrtab > EXRAM PAGE 1 /* table for square root */</p>
102、;<p> acbtab > EXRAM PAGE 1 /* table for thresholds in acb */</p><p> pm03tab > EXRAM PAGE 1 /* table for x^(-0.3) computation */</p><p> costab > EX
103、RAM PAGE 1 /* table for cosine */</p><p> V23 > INRAM PAGE 1</p><p> FSK > INRAM PAGE 1</p><p> hpibuff0 > HPRAM0 PAGE 1</p><p> hpib
104、uff1 > HPRAM1 PAGE 1</p><p> hpibuff2 > HPRAM2 PAGE 1</p><p> dma_buff > DMARAM PAGE 1</p><p><b> }</b></p><p> 七、CCS程序調(diào)試與結(jié)果</p><
105、p> 1、啟動(dòng)Setup CCS程序</p><p> 設(shè)置CCS的環(huán)境。選擇浮動(dòng)菜單Import configuration->Available configuration 列表中,然后選中C5402 Device Simulator (沒(méi)接DSK板時(shí))、C5402 DSK via Parallel Port Emulation (接DSK板時(shí))。選中Import,最后選中save and q
106、uit以保存目標(biāo)DSP的配置。</p><p> 2、運(yùn)行CCS2(‘5000),出現(xiàn)CCS界面。新建一個(gè)工程,向工程中添加c語(yǔ)言程序文件、CMD程序、頭文件和庫(kù)文件。</p><p> C程序運(yùn)行支持庫(kù): </p><p> C:\ti\ c5400\cgtools\ rts.lib</p><p> 相關(guān)的頭文件 C:\t
107、i\ c5400\cgtools\include\*.h</p><p><b> DSK板庫(kù)文件: </b></p><p> C:\ti\ c5400\dsk5402\ drv5402.lib,dsk5402.lib</p><p> 相關(guān)的頭文件 C:\ti\ c5400\dsk5402\include\*.h</p
108、><p> 在程序中還用到其他頭文件:</p><p> #include <type.h></p><p> #include <board.h></p><p> #include <codec.h></p><p> #include <mcbsp54.h>&
109、lt;/p><p> C語(yǔ)言程序文件、CMD程序和庫(kù)文件的加入可通過(guò)Project里的Add Files to Project找到相應(yīng)的文件直接加入。最好是將.h和.lib文件都拷貝到自己的工程中,或者在CCS的example中進(jìn)行調(diào)試、編譯,這樣一般就不會(huì)出現(xiàn)找不到頭文件的錯(cuò)誤信息。當(dāng)匯編出現(xiàn)找不到頭文件的錯(cuò)誤時(shí),如下圖。</p><p> 這時(shí)需要通過(guò)Build options里的“i
110、nclude SearchPath(-i)option”加入頭文件所指定的位置。如下圖:</p><p> 3、程序匯編、鏈接通過(guò)并生成.out文件。裝載.out文件后就可以運(yùn)行。</p><p> 4、實(shí)驗(yàn)現(xiàn)象結(jié)果顯示:</p><p> 通過(guò)波形及寄存器的值可以詳細(xì)察看程序的執(zhí)行狀況,并觀(guān)看每個(gè)時(shí)刻的情況。</p><p><
111、b> 用到的關(guān)鍵寄存器</b></p><p> 選擇View中的Registers的CPU Registers選項(xiàng),可以看到CPU中寄存器的變化情況,選擇View中的Registers的Peripheral Regs選項(xiàng),可以看到外設(shè)寄存器的變化情況。寄存器及變量某瞬時(shí)值如下:</p><p><b> 實(shí)驗(yàn)波形</b></p>
112、<p> 通過(guò)View中的Graph可以看到波形圖。如下:</p><p><b> 輸入波形:</b></p><p><b> 壓縮波形:</b></p><p><b> 輸出波形:</b></p><p><b> 5、硬件結(jié)果顯示<
113、;/b></p><p> 對(duì)語(yǔ)音信號(hào)開(kāi)始采樣后,燈閃兩次,初始化codec。二級(jí)管燈0亮開(kāi)始采集語(yǔ)音數(shù)據(jù),二極管燈0熄滅錄音結(jié)束,二極管燈1亮開(kāi)始放音,二極管燈1熄滅放音結(jié)束,二極管燈0亮重新開(kāi)始采樣語(yǔ)音信號(hào)。如此再循環(huán)運(yùn)行程序。</p><p><b> 八、實(shí)驗(yàn)總結(jié)</b></p><p> 通過(guò)此次實(shí)驗(yàn)設(shè)計(jì),我了解了DSP的
114、內(nèi)部資源以及各部件的作用。通過(guò)應(yīng)用DSP算法實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)的壓縮、存儲(chǔ)和回放的實(shí)驗(yàn)過(guò)程,使我熟悉了使用C語(yǔ)言編寫(xiě)較復(fù)雜的程序,對(duì)CCS5000對(duì)程序的完整調(diào)試過(guò)程有了進(jìn)一步的理解。另外對(duì)A律算法的C語(yǔ)言實(shí)現(xiàn)基本掌握,對(duì)PCM語(yǔ)音壓縮算法的基本原理有了一定的認(rèn)識(shí)。</p><p> 設(shè)計(jì)開(kāi)始時(shí),我先熟悉了實(shí)驗(yàn)所要實(shí)現(xiàn)的功能以及CCS軟件的基本操作和調(diào)試,通過(guò)查找相關(guān)的資料,對(duì)語(yǔ)音壓縮的算法,編碼與解碼有了一定的了
115、解。ITU-T G.711建議的PCM A律和µ律語(yǔ)音壓縮標(biāo)準(zhǔn)可以分別將13比特和14比特壓縮為8比特,可以達(dá)到語(yǔ)音壓縮的目的。</p><p> 實(shí)驗(yàn)中,需要首先了解DSK板上的硬件資源的結(jié)構(gòu)特點(diǎn)與作用。軟件調(diào)試過(guò)程中我們遇到了一些問(wèn)題。首先,由于C語(yǔ)言程序文件、CMD程序和庫(kù)文件的加入可通過(guò)Project里的Add Files to Project找到相應(yīng)的文件直接加入。但是,編譯時(shí)出現(xiàn)找不到頭文
116、件的錯(cuò)誤時(shí),這時(shí)我們通過(guò)Build options里的加入頭文件所指定的位置。</p><p> 最終通過(guò)學(xué)習(xí)及不斷的調(diào)適能夠熟練的應(yīng)用軟件實(shí)現(xiàn)自己需要的功能,將程序下載到實(shí)驗(yàn)板上,成功運(yùn)行。開(kāi)始采集語(yǔ)音數(shù)據(jù)時(shí)二級(jí)管燈0亮,二極管燈0熄滅表示錄音結(jié)束,二極管燈1亮開(kāi)始放音,二極管燈1熄滅放音結(jié)束,二極管燈0亮說(shuō)明重新開(kāi)始采樣語(yǔ)音信號(hào)。這樣循環(huán)運(yùn)行下去。</p><p><b>
117、 參考文獻(xiàn)</b></p><p> [1] 高海林、錢(qián)滿(mǎn)義.DSP技術(shù)及其應(yīng)用講義.2005年10月</p><p> [2]. 周霖. DSP通信工程技術(shù)應(yīng)用[M]. 北京: 國(guó)防工業(yè)出版社,2003.115</p><p> [3] 張勇.C/C++ 語(yǔ)言硬件程序設(shè)計(jì)[M]. 西安:西安電子科技大學(xué)出版社,2002.27-75</
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設(shè)計(jì)-語(yǔ)音采集壓縮存儲(chǔ)與回放
- dsp課程設(shè)計(jì)---語(yǔ)音的壓縮、存儲(chǔ)和回放
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告-- 語(yǔ)音壓縮與回放
- dsp課程設(shè)計(jì)--基于tm320vc5402語(yǔ)音采集壓縮存儲(chǔ)與回放
- dsp課程設(shè)計(jì)--基于tms320vc5402語(yǔ)音采集壓縮存儲(chǔ)與回放
- dsp課程設(shè)計(jì)--語(yǔ)音壓縮,存儲(chǔ)和回訪(fǎng)
- 課程設(shè)計(jì)-基于單片機(jī)的語(yǔ)音存儲(chǔ)及回放系統(tǒng)課程設(shè)設(shè)計(jì)
- dsp課程設(shè)計(jì)報(bào)告---語(yǔ)音噪聲濾波
- dsp課程設(shè)計(jì)--語(yǔ)音噪聲濾波
- dsp語(yǔ)音信號(hào)處理課程設(shè)計(jì)
- dsp課程設(shè)計(jì)報(bào)告
- dsp課程設(shè)計(jì)報(bào)告
- 數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng)的設(shè)計(jì)[文獻(xiàn)綜述]
- 數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng)-畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)(論文)-數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的語(yǔ)音存儲(chǔ)與回放系統(tǒng)設(shè)計(jì)
- 數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng)地設(shè)計(jì)[任務(wù)書(shū)]
- 基于單片機(jī)的數(shù)字語(yǔ)音存儲(chǔ)回放系統(tǒng)設(shè)計(jì)
- 數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng)【畢業(yè)論文】
- dsp課程設(shè)計(jì)報(bào)告--fft的dsp實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論