DSP課程設(shè)計(jì)---語音的壓縮、存儲和回放_第1頁
DSP課程設(shè)計(jì)---語音的壓縮、存儲和回放_第2頁
DSP課程設(shè)計(jì)---語音的壓縮、存儲和回放_第3頁
DSP課程設(shè)計(jì)---語音的壓縮、存儲和回放_第4頁
DSP課程設(shè)計(jì)---語音的壓縮、存儲和回放_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、;.DSP課程設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告語音壓縮、存儲和回放計(jì)院(系):電子信息工程學(xué)院 設(shè)計(jì)人員:吳 迪 班 級:通信0806學(xué) 號:08211153指導(dǎo)教師:楊 恒目 錄一、設(shè)計(jì)任務(wù)書3二、設(shè)計(jì)內(nèi)容3三、算法原理說明.3四、設(shè)計(jì)方案8五、程序設(shè)計(jì)、調(diào)試與結(jié)果分析11 六、設(shè)計(jì)(安裝)與調(diào)試的體會22 七、參考文獻(xiàn)22語音的壓縮、存儲與回放一、實(shí)驗(yàn)?zāi)康?、應(yīng)用DSP算法實(shí)現(xiàn)對語音信號的壓縮、存儲和回放。2、熟悉使用C語言編寫較復(fù)雜的程序; 3、熟悉C語言對外設(shè)(DSK板或示波器)的訪問(軟件編程、硬件連接); 4、熟練使用軟件CCS5000對程序的完整調(diào)試過程。二、實(shí)驗(yàn)設(shè)計(jì)要求及目標(biāo)1、使用DSP實(shí)

2、現(xiàn)語音壓縮和解壓縮的基本算法,算法類型自定,例如可以采用G.711、G.729等語音壓縮算法。2、采用A/D轉(zhuǎn)換器從MIC輸入口實(shí)時(shí)采集語音信號,進(jìn)行壓縮后存儲到DSP的片內(nèi)和片外RAM存儲器中,存儲時(shí)間不小于10秒。3、存儲器存滿之后,使用DSP進(jìn)行實(shí)時(shí)解壓縮,并從SPEAKER輸出口進(jìn)行回放輸出。4、使用指示燈對語音存儲和回放過程進(jìn)行指示。三、實(shí)驗(yàn)原理1、語音編碼 語音編碼一般分為兩類:一類是波形編碼,一類是被稱為“聲碼器技術(shù)”的編碼。PCM編碼即脈沖編碼調(diào)制。波形編碼的最簡單形式就是脈沖編碼調(diào)制(Pulse code modulation),這種方式將語音變換成與其幅度成正比的二進(jìn)制序列

3、,而二進(jìn)制數(shù)值往往采用脈沖表示,并用脈沖對采樣幅 度進(jìn)行編碼,所以叫做脈沖編碼調(diào)制。脈沖編碼調(diào)制沒有考慮語音的性質(zhì),所以信號沒有得到壓縮。2、量化: 脈沖編碼調(diào)制用同等的量化級數(shù)進(jìn)行量化,即采用均勻量化,而均勻量化是基本的量化方 式。但是均勻量化有缺點(diǎn),在信號動態(tài)范圍較大而方差較小的時(shí)候,其信噪比會下降。國際上有兩種非均勻量化的方法:A律和u律,u律是最常用的一種。在美國,7位u律是長途電話質(zhì)量的標(biāo)準(zhǔn)。 而我國采用的是A律壓縮,而且有標(biāo)準(zhǔn)的A律PCM編碼芯片。3、DPCM&ADPCM:降低傳輸比特率的方法之一是減少編碼的信息量,這要消除語音信號中的冗余度。相鄰的語音樣本之間存在明顯的相

4、關(guān)性,因此對相鄰樣本間的差信號進(jìn)行編碼,便可使信息量得到壓縮。因?yàn)椴罘中盘柋仍Z音信號的動態(tài)范圍和平均能量都小。這種編碼叫Differential PCM,簡稱DPCM,即差分脈沖編碼調(diào)制。ADPCM即自適應(yīng)差分脈沖編碼調(diào)制,是包括短時(shí)預(yù)測的編碼系統(tǒng)。CCITT(國際電報(bào)電話咨詢委員會)在1984年提出的32 kbit/s的編碼器建議就是采用ADPCM作為長途傳輸中的國際通用語音編碼方案。這種ADPCM編碼方案達(dá)到64 kbit/s PCM的語音傳輸質(zhì)量,并具有很好的抗誤碼性能。4、A律壓縮本實(shí)驗(yàn)中采用了A律壓縮。語音信號通常是小信號概率大,大信號出現(xiàn)的概率小,為提高小信號時(shí)的量化信躁比,壓縮

5、比特速率,可為非線性量化。語音壓縮是把16位的數(shù)據(jù)比特轉(zhuǎn)化為8位數(shù)據(jù)比特,從而到達(dá)語音壓縮的目的。在主程序中通過A/D抽樣量化,可以得到16位的線性編碼,再由編碼表通過軟件計(jì)算得到8位A律編碼,其中最高位為符號位,第6位到第4位為段落碼,低4位為段內(nèi)碼。將8位的壓縮結(jié)果存儲到系統(tǒng)RAM中進(jìn)行緩存,根據(jù)抽樣率、語音存儲時(shí)間以及系統(tǒng)RAM的容量設(shè)置語音存儲緩沖區(qū)的大小,待緩沖區(qū)存滿后,將緩沖區(qū)內(nèi)的數(shù)據(jù)進(jìn)行解壓縮,然后輸出到SPEAKER接口輸出端。若使用A/D轉(zhuǎn)換器,必須首先對A/D轉(zhuǎn)換器進(jìn)行初始化設(shè)置,即設(shè)置A/D轉(zhuǎn)換器的工作模式、輸入增益以及抽樣頻率等。A律的壓縮可以按照下列公式進(jìn)行定義:其中

6、:A是壓縮參數(shù)(在歐洲,A=87.6)x是需要壓縮的歸一化整數(shù)。A律壓縮示意圖如下:從線性到A律的壓縮轉(zhuǎn)換如下表所示:其中,壓縮后的碼字組成:比特0-3表矢量化值,比特4-6表示段值,壓縮后的碼字符號放在比特7,為了簡化未寫出。壓縮前的碼字丟棄的比特?cái)?shù)壓縮后的碼字輸入值段值,量化值比特:11 10 9 8 7 6 5 4 3 2 1 0比特:6 5 4 3 2 1 0 0 0 0 0 0 0 0 a b c d x 10 0 0 a b c d 0 0 0 0 0 0 1 a b c d x1 0 0 1 a b c d 0 0 0 0 0 1 a b c d x x2 0 1 0 a b c

7、 d 0 0 0 0 1 a b c d x x x 3 0 1 1 a b c d 0 0 0 1 a b c d x x x x 5 1 0 0 a b c d 0 0 1 a b c d x x x x x6 1 0 1 a b c d 0 1 a b c d x x x x x x 7 1 1 0 a b c d 1 a b c d x x x x x x x 8 1 1 1 a b c d 5、律壓縮律壓縮的特點(diǎn)是:其中:y為歸一化的壓縮輸出電壓,即y=壓縮器輸出電壓/壓縮器可能輸出最大電壓;x為歸一化的壓縮輸入電壓,即x=壓縮器輸入電壓/壓縮器可能輸入最大電壓; 為壓擴(kuò)參數(shù),表示壓

8、縮的程度。在使用律的處理過程為:壓縮和解壓,壓縮是指在發(fā)送端對輸入信號進(jìn)行壓縮處理,再均勻量化,相當(dāng)于非均勻量化;解壓是在接收端進(jìn)行相應(yīng)的解壓處理,以恢復(fù)原始信號。經(jīng)過壓縮的采樣信號,按8位二進(jìn)制編碼,編碼表如下:0000000wxyza000wxyz0000001wxyza001wxyz000001wxyzab010wxyz00001wxyzabc011wxyz0001wxyzabcd100wxyz001wxyzabcde101wxyz01wxyzabcdef110wxyz1wxyzabcdefg111wxyz8位碼有三部分組成:極性碼(0:負(fù)極性信號;1:正極性信號)、段落碼、電平碼。律解

9、壓編碼表與編碼表左右相反。律編碼=極性碼(musign)+段落碼(muchord)+電平碼(mustep),算法如下:muchord=(19-T|EXP)<<4=190-(T|EXP)*16+10H;musign=(AH*(-1)<<7=(AH*FFFFH)*128=AH*(FFFFH<<7)=AH*FF80H;mustep=(|int|+33)<<(T|EXP)<<-26)-10;6、語音采集與輸出模塊語音采集與輸出模塊采用的是TI公司推出的一款高性能的立體聲音頻Codec芯片TLC320AD50C,內(nèi)置耳機(jī)輸出放大器,支持MIC和

10、LINE IN兩種輸入方式(二選一),且對輸入和輸出都具有可編程增益調(diào)節(jié)。AD50的模數(shù)轉(zhuǎn)換(ADCs)和數(shù)模轉(zhuǎn)換(DACs)部件高度集成在芯片內(nèi)部,采用了先進(jìn)的Sigmadelta過采樣技術(shù),可以在8K到96K的頻率范圍內(nèi)提供16bit、20bit、24bit和32bit的采樣,ADC和DAC的輸出信噪比分別可以達(dá)到90dB和100dB。與此同時(shí),AD50還具有很低的能耗,回放模式下功率僅為23mW,省電模式下更是小于15uW。由于具有上述優(yōu)點(diǎn),使得AD50是一款非常理想的音頻模擬I/O器件,可以很好的應(yīng)用在隨聲聽(如CD,MP3)、錄音機(jī)等數(shù)字音頻領(lǐng)域2。由TLC320AD50C組成的語音

11、輸入與輸出模塊不僅采樣率高最高可達(dá)96K,且外圍電路簡單,性價(jià)比高。7、 DSK 包括:主芯片 1枚:100 MHz TMS320VC5402 DSPRAM 1枚:1個(gè)軟件等待的64K×16bit的SRAM(CY7C1021V33)FLASH 1枚:256K×16bit 的 FLASH存儲器(AM39VF400A)接口 2個(gè):一個(gè)連接到PC機(jī)并口的主機(jī)端接口HPI和用于仿真的JTAG測試總線控制器 信號采集和輸出端口:麥克風(fēng)/耳機(jī)音頻接口8、TMS320C5402的結(jié)構(gòu)及原理 TMS320C5402采用先進(jìn)的改進(jìn)的哈佛結(jié)構(gòu)和8條總線結(jié)構(gòu),解決了馮諾伊曼(Von-Neuman

12、n)結(jié)構(gòu)中高速數(shù)據(jù)傳輸時(shí)的傳輸通道上的瓶頸現(xiàn)象,使處理器的性能大大提高,程序數(shù)據(jù)總線相互獨(dú)立,允許同時(shí)訪問程序存儲器和數(shù)據(jù)存儲器,實(shí)現(xiàn)高度并行操作。此外,還可以在數(shù)據(jù)總線與程序總線之間相互傳送數(shù)據(jù),從而使處理器具有在單個(gè)周期內(nèi)同時(shí)執(zhí)行算數(shù)運(yùn)算、邏輯運(yùn)算、移位操作、乘法/累加運(yùn)算以及訪問程序和數(shù)據(jù)存儲器的強(qiáng)大功能。TMS320C5402的內(nèi)部多總線結(jié)構(gòu)保證在一個(gè)機(jī)器周期內(nèi)可以多次訪問程序空間和數(shù)據(jù)空間;指令執(zhí)行時(shí)的多重流水線結(jié)構(gòu)將指令周期降低到了最小值;多處理單元可以在一個(gè)指令周期內(nèi)同時(shí)進(jìn)行運(yùn)算,而這種結(jié)構(gòu)恰好滿足了數(shù)字信號處理中的一些特殊要求如FIR、IIR、FFT等運(yùn)算。由于C5402有7種

13、有效靈活的尋址方式的軟件特點(diǎn),僅為10ns的指令執(zhí)行周期,還有一些特殊的運(yùn)算指令更好地滿足了數(shù)字信號處理中特有的運(yùn)算需要。 TMS320C5402具有高速的,全雙工串行口,可用來與系統(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ò)硬件。DSP功能框圖9、AD50的結(jié)構(gòu)與原理AD50是單片音頻接口芯片(AIC)。它內(nèi)部集成了16位的D/A和A/D轉(zhuǎn)換器,采樣速率最高可達(dá)

14、22.05kb/s,其采樣速率可通過DSP編程來設(shè)置。在DAC之前有一個(gè)插值濾波器以保證輸出信號平滑和ADC之后有一個(gè)抽取濾波器以提高輸入信號的信噪比。 AD50內(nèi)部有7個(gè)數(shù)據(jù)和控制寄存器,用于編程控制它們的工作狀態(tài)。它的數(shù)據(jù)傳輸模式和采樣速率都可以通過DSP對其控制寄存器的編程來實(shí)現(xiàn),因此,在許多場合下,AD50都作為DSP的AIC來實(shí)現(xiàn)音頻處理。寄存器0:空操作寄存器。 寄存器1:軟件復(fù)位 軟件掉電 選擇16位或15位工作方式 硬件或軟件二次通信請求方式的選擇 寄存器2:使能ALTDATA輸入端 為ADC選擇16/15位方式 寄存器3:選擇FS與FSD之間延遲SCLK的個(gè)數(shù) 告訴主機(jī)有幾個(gè)

15、從機(jī)被聯(lián)上 寄存器4:為輸入和輸出放大器選擇放大器增益 選擇N來設(shè)置采樣頻率,fs=MCLK/(128*N)或MCLK/(512*N) 在MCLK輸入端使能外部時(shí)鐘輸入并旁通內(nèi)部的PLL 寄存器5,6:保留 在CCS 集成開發(fā)環(huán)境中,與tlc320ad50 CODEC 編譯碼器相關(guān)的頭文件是codec.h。它位于C:tic5400dsk5402include 目錄下。在這個(gè)頭文件中,定義了與ad50 CODEC 相關(guān)的枚舉變量和庫函數(shù)。除了可以調(diào)用codec.h 中提供的庫函數(shù)之外,我們還可以利用這些枚舉變量重新編寫自己的codec 函數(shù),使用枚舉變量相或產(chǎn)生所需要的ad50 寄存器的初始化值

16、。Codec.h 中的庫函數(shù)位于函數(shù)庫dsk5402.lib 和 drv5402.lib 中。函數(shù)庫dsk5402.lib 和 drv5402.lib 是作為兩個(gè)單獨(dú)的文件,連同include 文件和頭文件一起提供給用戶的,如果你的應(yīng)用程序中用到了其中的庫函數(shù),就需要與這兩個(gè)函數(shù)庫進(jìn)行鏈接(link)dsk5402.lib 是一個(gè)主要的函數(shù)庫,其內(nèi)部使用了drv5402.lib 的頭文件。AD50與C5402之間的數(shù)據(jù)傳送采用串行方式,包括兩種傳輸模式:16位和15+1位傳輸模式。15+1位模式時(shí),其中的D0位表示二次通信。它們各自的時(shí)序如下:10、程序存儲芯片實(shí)驗(yàn)中,電路選用的芯片SST39

17、VF400是一個(gè)低功耗FLASH。芯片硬件特點(diǎn):A17至A0為外部地址管腳,D15至D0為1條數(shù)據(jù)線,CE#為片選控制管腳(低有效),OE#為輸出控制管腳(低有效),WE#為寫入控制管腳(低有效)。工作在2.7V至3.6V電壓下,存儲容量位256KW,其中的數(shù)據(jù)可以保持100年以上,可重復(fù)編程次數(shù)高達(dá)10萬次。11、風(fēng)和耳機(jī)接口音頻接口使用了2 個(gè)工業(yè)標(biāo)準(zhǔn)的3.5mm 的連接器:一個(gè)連接麥克風(fēng)的音頻輸入;一個(gè)連接耳機(jī)的音頻輸出。(1)音頻輸入是交流偶合的并且包括:1 個(gè)固定增益為10dB 的放大器;實(shí)現(xiàn)單端到差分的轉(zhuǎn)換(在此之前,連接到DSP 的McBSP1 上的TLC320AD50對其進(jìn)行數(shù)

18、字化);電壓偏置(支持電池電源和駐極體麥克風(fēng));被動濾波(在DSK 的音頻插口和CODEC 之間)用來增強(qiáng)性能,為駐極體麥克風(fēng)設(shè)計(jì)的麥克風(fēng)的輸入它需要一個(gè)電壓偏置。如果使用電容來隔離偏置電壓,就能夠使用動態(tài)的麥克風(fēng)。麥克風(fēng)的輸入信號最大允許標(biāo)準(zhǔn)是500mV(350mVrms)。在DSK上有10dB前置放大器增益。(2)音頻輸出是可以編程控制的,在軟件的控制下,可以在6dB增幅的范圍內(nèi),增加增益+0+2dB。音頻輸入可以編程控制的,在6dB增幅范圍內(nèi),提供+0+12dB的增益。四、程序設(shè)計(jì)思路DSP程序設(shè)計(jì)應(yīng)包括用戶程序、存儲器配置程序。為了實(shí)現(xiàn)語音信號的采集與回放,先將語音信號采集,運(yùn)用a律壓

19、縮算法將信號壓縮并存入存貯器中,當(dāng)放音開始時(shí)運(yùn)用a律解壓算法將信號解壓并從存儲器中釋放出來,實(shí)現(xiàn)語音的回放。1、軟件設(shè)計(jì)流程開始初始化Board板成功?調(diào)用_led_display(2)使燈都閃兩次初始化Codec片選FLASH為外部存儲器等待接受Instance處的采樣LED燈0亮開始錄音采樣送voice_sample壓縮存儲voice_sampleLED燈1熄滅放音結(jié)束讀取,解壓縮并送voice_sample1LED燈1亮開始放音LED燈0熄滅錄音結(jié)束是否2、TMS320VC5402 mcbsp的串口的初始化首先將DSP的串口1復(fù)位,再對串口1的16個(gè)寄存器進(jìn)行編程,使串口1工作在以下狀態(tài)

20、:禁止SPI模式,但數(shù)據(jù)相,每幀一字,每字16位,幀同步脈沖低電平有效,并且?guī)叫盘柡鸵莆恍盘栍型獠繒r(shí)鐘產(chǎn)生。hHandset = codec_open(HANDSET_CODEC); 此語句調(diào)用了函數(shù)codec_open()對串口1進(jìn)行了初步設(shè)置,設(shè)置成功返回codec的句柄放在變量 hHandset中,作為調(diào)用其他函數(shù)的實(shí)參。3、AD50的初始化該初始化過程調(diào)用了5個(gè)函數(shù)對AD50的5項(xiàng)參數(shù)進(jìn)行了設(shè)置,包括adc和dac的工作模式,模擬輸入和輸出的增益;以及A/D、D/A的轉(zhuǎn)換速率。codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in

21、15-bit mode */codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit 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_800); /* 8Hz sampling

22、 rate */4、FLASH存儲器的初始化void flashenable(void)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;5、從McBSP的接收通道讀取A/D轉(zhuǎn)換的值,然后經(jīng)過壓縮解壓后將其發(fā)送到McBSP的發(fā)送通道,將解壓后的數(shù)據(jù)將數(shù)據(jù)寫入D/A轉(zhuǎn)換器。程序如下:while (1) /* Wait for sample from handset */ while (!MCBSP_RRDY(HANDSET_CODEC) ;/*獲取McBSP是否做好接受的準(zhǔn)備信息*/* Read sample from and write back t

23、o handset codec */ data=*(volatile int*)DRR1_ADDR(HANDSET_CODEC);/* 定義數(shù)據(jù)接收寄存器1的地址*/ pre=int2alaw(data); /*or pre=int2ulaw(data);*/ data=alaw2int(pre); /*or data=ulaw2int(pre);*/ *(volatile int*)DXR1_ADDR(HANDSET_CODEC)=data;/* 對輸入信號進(jìn)行語音處理*/6、閃燈程序程序段:/*閃燈*/void led(s16 cnt)while ( cnt- )brd_led_toggl

24、e(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);程序分析:此函數(shù)用了一個(gè)while循環(huán)語句實(shí)現(xiàn)cnt次燈閃,通過調(diào)用delay子函數(shù)控制燈閃滅時(shí)間,其中brd_led_toggle()表示切換用戶LED,改變用戶控制LED02的狀態(tài)。五、實(shí)驗(yàn)程序1、C語言程序/*/* 頭文件 */*/#include <type.h>#include <board.h>#include <codec.h>#include <

25、;mcbsp54.h>/*/* 變量宏定義 */*/#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */#define QUANT_MASK (0xf) /* Quantization field mask. */#define NSEGS (8) /* Number of A-law segments. */#define SEG_SHIFT (4) /* Left shift for segment number. */#define SEG_MASK (0x70) /* Segment field mask. */*/*

26、函數(shù)聲明 */*/void delay(s16 period);void led(s16 cnt);void initcodec(void);void flashenable(void);unsigned char data2alaw(s16 pcm_val);int alaw2data(unsigned char a_val);static int search(int val,short *table,int size);/*/* 全局變量 */*/HANDLE hHandset;s16 data;s16 data1;u16 i=0;u16 temp1;u16 j=0;u16 k,l=0;

27、u8 temp2;u16 buffer22000;static short seg_end8=0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF;/*/* 主函數(shù) */*/void main() if (brd_init(100) return; led(2); /閃燈兩次 initcodec(); /初始化codec flashenable(); /選擇片外FLASH為片外存儲器 while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset處的采樣 if (i=0) brd_led_toggle(BR

28、D_LED0); /點(diǎn)亮二極管0,表示錄音開始 data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /從handset處讀取采樣 temp1=data2alaw(data); /對采樣進(jìn)行a律壓縮/*/* 把低地址數(shù)據(jù)放在高八位高地址數(shù)據(jù)放在低八位 */ /*/ i=i+1; if(i%2=1) bufferj=(temp1<<=8); /*奇數(shù)數(shù)據(jù)左移8位 temp1=abcdefgh00000000bufferj=temp1*/ else bufferj=(bufferj|temp1); /*偶數(shù)數(shù)據(jù)與temp1取或 組成新的數(shù)據(jù)b

29、ufferj=abcdefghiabcdefghi*/ j+; /j加1 if(i>=44000) i=0;if(j>=22000)j=0;brd_led_toggle(BRD_LED0); /熄滅數(shù)碼管0 表示錄音結(jié)束brd_led_toggle(BRD_LED1); /點(diǎn)亮二極管1 表示放音開始 /*/* 放音部分 */*/ for(k=0;k<44000;k+)if(k%2=0) temp2=(bufferl>>8)&0x0ff;elsetemp2=bufferl&0x0ff;l+;if(l>=22000)l=0;data1=alaw2

30、data(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /*/* 放音結(jié)束 */*/if(k=44000) brd_led_toggle(BRD_LED1); /熄滅二極管1 表示放音結(jié)束 /主程序結(jié)束/*/ /* 子函數(shù) */ /*/*延時(shí)*/void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period>>1; j+); /*閃燈*/void

31、led(s16 cnt)while ( cnt- )brd_led_toggle(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);/*初始化codec*/void initcodec(void) /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); / Acquire handle to codec /* Set codec parameters */ codec_dac_mode

32、(hHandset, CODEC_DAC_15BIT); / DAC in 15-bit mode codec_adc_mode(hHandset, CODEC_ADC_15BIT); / ADC in 15-bit 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(hHands

33、et,SR_8000); / 8KHz sampling rate /*設(shè)置flash*/void flashenable(void)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;/*a律壓縮*/unsigned char data2alaw(s16 pcm_val) Int mask;Int seg;unsigned char aval;if (pcm_val >= 0) mask = 0xD5; / 標(biāo)記 (7th) bit = 1 else mask = 0x55; / 標(biāo)記 bit = 0 pcm_val = -pcm_val;/

34、Convert the scaled magnitude to segment number. seg = search(pcm_val, seg_end, 8); / Combine the sign, segment, and quantization bits. if (seg >= 8) / out of range, 返回最大數(shù). return (0x7F mask);else aval = seg << SEG_SHIFT;if (seg < 2)aval |= (pcm_val >> 1) & QUANT_MASK;elseaval |

35、= (pcm_val >>seg) & QUANT_MASK;return (aval mask);/*alaw的子程序*/static int search(int val,short *table,int size)Int i;for (i = 0; i < size; i+) if (val <= *table+)return (i);return (size);/*a律解壓*/int alaw2data(unsigned char a_val)Int t;Int seg;a_val = 0x55; t = (a_val & QUANT_MASK)

36、 << 4;seg = (unsigned)a_val & SEG_MASK) >> SEG_SHIFT;if(seg=0) t += 8;t=(t>>3);if(seg<4)&&(seg>0) t +=0x108;t=(t>>(4-seg);if(seg>3)t+=0x108;t=(t<<=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/*/* 結(jié)束 */*/2、存儲器的分配(*.cmd)MEMORY PAGE 0: VECS: origin

37、 = 0080h, length = 0080h /* Internal Program RAM */ PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */ PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data RAM */ DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */ DATA: origin = 1100h, length = 0080h /* Internal Data

38、 RAM */ STACK: origin = 1180h, length = 0560h /* Stack Memory Space */ INRAM: origin = 1900h, length = 0100h /* Internal Data RAM */ HPRAM0: origin = 1A00h, length = 0002h /* HPI memory accessible by Host and DSP */ HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */ H

39、PRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by Host and DSP */ EXRAM: origin = 1F10h, length = 5A00h /* External Data RAM */SECTIONS .cinit > PRAM PAGE 0 .text > PRAM PAGE 0 .vectors > VECS PAGE 0 init_var > PRAM PAGE 0 detect > PRAM PAGE 0 vrcprg > PRAM PAGE 0 m

40、atprg > PRAM PAGE 0 .stack > STACK PAGE 1 .trap > SCRATCH PAGE 1 .const > EXRAM PAGE 1 .data > EXRAM PAGE 1 .bss > EXRAM PAGE 1 .cio > EXRAM PAGE 1 .switch > EXRAM PAGE 1 tables > EXRAM PAGE 1 var > EXRAM PAGE 1 svctab > EXRAM PAGE 1 /* SS_V LSP table */ vctab > E

41、XRAM PAGE 1 /* V LSP table */ uvctab > EXRAM PAGE 1 /* UV LSP table */ cuvtab > EXRAM PAGE 1 /* Stochastic codebook */ cdbktab > EXRAM PAGE 1 /* various codebook tables*/ logtab > EXRAM PAGE 1 /* table for log2 */ powtab > EXRAM PAGE 1 /* table for pow2 */ hamtab > EXRAM PAGE 1 /*

42、table for hamming */ lgwtab > EXRAM PAGE 1 /* table for lag window */ acostab > EXRAM PAGE 1 /* table for arccos */ sqrtab > EXRAM PAGE 1 /* table for square root */ acbtab > EXRAM PAGE 1 /* table for thresholds in acb */ pm03tab > EXRAM PAGE 1 /* table for x(-0.3) computation */ cost

43、ab > EXRAM PAGE 1 /* table for cosine */ V23 > INRAM PAGE 1 FSK > INRAM PAGE 1 hpibuff0 > HPRAM0 PAGE 1 hpibuff1 > HPRAM1 PAGE 1 hpibuff2 > HPRAM2 PAGE 1 dma_buff > DMARAM PAGE 1六、CCS程序調(diào)試和結(jié)果1、將5402 DSK板與計(jì)算機(jī)相連,連接好耳機(jī),音頻線,電源線等。2、連接DSK板的電源,并裝載DSK安裝程序。3、雙擊桌面上的CCS 2(C5000) 圖標(biāo)運(yùn)行CCS程序,選

44、擇浮動菜單Import configuration->Available configuration 列表中,然后選中C5402 Device Simulator (沒接DSK板時(shí))、C5402 DSK via Parallel Port Emulation (接DSK板時(shí))。選中Import,最后選中save and quit以保存目標(biāo)DSP的配置。4、運(yùn)行CCS2,出現(xiàn)CCS界面。新建一個(gè)工程,向工程中添加c語言程序文件、CMD程序、頭文件和庫文件。C程序運(yùn)行支持庫:C:ti c5400cgtools rts.lib相關(guān)的頭文件:C:ti c5400cgtoolsinclude*.hDSK板庫文件: C:ti c5400dsk5402 drv5402.lib,dsk

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論