DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-語音壓縮、存儲(chǔ)和回放_(tái)第1頁
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-語音壓縮、存儲(chǔ)和回放_(tái)第2頁
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-語音壓縮、存儲(chǔ)和回放_(tái)第3頁
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-語音壓縮、存儲(chǔ)和回放_(tái)第4頁
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告-語音壓縮、存儲(chǔ)和回放_(tái)第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、dsp課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告 語音壓縮、存儲(chǔ)和回放指導(dǎo)教師:實(shí)驗(yàn)課程:dsp課程設(shè)計(jì) 實(shí)驗(yàn)名稱:語音壓縮、存儲(chǔ)和回放 小組成員:自動(dòng)化0605班 自動(dòng)化0605班 目錄一、 概述.3二、 算法原理及硬件要求 .4三、 程序及說明.11四、 程序的調(diào)試及結(jié)果.18五、 總結(jié).20六、 參考文獻(xiàn).21一 概述語音壓縮、存儲(chǔ)和回放語音信號(hào)是信息的重要形式, 語音信號(hào)處理有著廣泛的應(yīng)用領(lǐng)域,而語音壓縮在語音信號(hào)的傳輸、存儲(chǔ)等方面有非常廣泛的作用,而且在通信領(lǐng)域中已經(jīng)有較成熟的發(fā)展和廣泛應(yīng)用。本設(shè)計(jì)要求采用dsp及其a/d、d/a轉(zhuǎn)換器進(jìn)行語音信號(hào)的壓縮、存儲(chǔ)和回放。1.設(shè)計(jì)要求及目標(biāo)基本部分:(1)使用ds

2、p實(shí)現(xiàn)語音壓縮和解壓縮的基本算法,算法類型自定,例如可以采用g.711、g.729等語音壓縮算法。(2)采用a/d轉(zhuǎn)換器從mic輸入口實(shí)時(shí)采集語音信號(hào),進(jìn)行壓縮后存儲(chǔ)到dsp的片內(nèi)和片外ram存儲(chǔ)器中,存儲(chǔ)時(shí)間不小于10秒。(3)存儲(chǔ)器存滿之后,使用dsp進(jìn)行實(shí)時(shí)解壓縮,并從speaker輸出口進(jìn)行回放輸出。(4)使用指示燈對(duì)語音存儲(chǔ)和回放過程進(jìn)行指示。發(fā)揮部分:使用多種算法進(jìn)行語音的壓縮、存儲(chǔ)和解壓縮,比較它們之間的優(yōu)缺點(diǎn)。2.設(shè)計(jì)思路 語音信號(hào)的幅度(發(fā)音強(qiáng)度)并非均勻分布,由于小信號(hào)占的比例比大信號(hào)大很多,因此可以進(jìn)行非均勻量化。達(dá)到這一目標(biāo)的基本做法是,對(duì)大信號(hào)使用大的量化間隔,而小信

3、號(hào)則使用小的臺(tái)階。itu-t g.711建議的pcm a律和律語音壓縮標(biāo)準(zhǔn)可以分別將13比特和14比特壓縮為8比特,達(dá)到語音壓縮的目的。3.設(shè)計(jì)內(nèi)容1使用dsp實(shí)現(xiàn)語音壓縮和解壓縮的基本算法,算法類型采用g.711的a律壓擴(kuò)算法。2采用a/d轉(zhuǎn)換器從mic輸入口實(shí)時(shí)采集語音信號(hào),進(jìn)行壓縮后存儲(chǔ)到dsp的片內(nèi)ram存儲(chǔ)器中,存儲(chǔ)時(shí)間約為10秒。3但采樣數(shù)據(jù)達(dá)到規(guī)定次數(shù)后,使用dsp進(jìn)行實(shí)時(shí)解壓縮,并從speaker輸出口進(jìn)行回放輸出。4使用dsk板的指示燈對(duì)語音存儲(chǔ)和回放過程進(jìn)行指示:循環(huán)閃爍:板子自檢,程序開始led0亮:錄音(10秒鐘左右)led0滅:放音二 算法原理1實(shí)驗(yàn)原理分析如下:語音

4、信號(hào)的幅度并非均勻分布,由于小信號(hào)占的比例比大信號(hào)大得多,因此可以進(jìn)行非均勻量化。達(dá)到這一目標(biāo)的基本做法是,對(duì)大信號(hào)是用大的量化間隔,而小信號(hào)則是用小的量化間隔。itu-t g.711建議的pcma律a律語音壓縮標(biāo)準(zhǔn)可以分別將13位和14位的線性語音壓縮編碼壓縮為8位,達(dá)到語音壓縮的目的。在主程序中通過a/d抽樣量化,可以得到16位的線性編碼,再由編碼表通過16位線性編碼,再由編碼表通過軟件計(jì)算得到8位a律編碼。將8位的壓縮結(jié)果存儲(chǔ)到系統(tǒng)ram中進(jìn)行緩存,根據(jù)抽樣率、語音存儲(chǔ)時(shí)間以及系統(tǒng)ram的容量設(shè)置語音存儲(chǔ)緩沖區(qū)的大小,待采樣達(dá)到一定次數(shù)后,將緩存區(qū)內(nèi)的數(shù)據(jù)進(jìn)行解壓縮,然后輸出到speak

5、er接口輸出端。2相關(guān)理論知識(shí)準(zhǔn)備:(1)dsk系統(tǒng)基本結(jié)構(gòu):5402 dsk主要包括100mhz vc5402 dsp,1個(gè)軟件等待周期的64k字的外部sram存儲(chǔ)器,256k字的flash存儲(chǔ)器,內(nèi)嵌的并口仿真器,模擬輸入/輸出音頻接口,以及擴(kuò)展板接口。其結(jié)構(gòu)如下圖:dsk的主要硬件資源包括:dsp主芯片1枚:100 mhz tms320vc5402 dspram 1枚:1個(gè)軟件等待的64k16bit的sram(cy7c1021v33)flash 1枚:256k16bit 的 flash存儲(chǔ)器(am39vf400a)接口2個(gè):用于仿真的jtag測(cè)試總線控制器 和一個(gè)連接到pc機(jī)并口的主機(jī)端

6、接口hpi信號(hào)采集和輸出端口:麥克風(fēng)/耳機(jī)音頻接口 下面分別介紹:adsp芯片dsk 支持tms320vc5402 dsp,工作頻率可以高達(dá)100mhz,工作的內(nèi)核電壓為1.8v,i/o 電壓為3.3vb外部數(shù)據(jù)存儲(chǔ)器dsk提供了64字sram??梢允褂玫耐獠繑?shù)據(jù)存儲(chǔ)器的大小取決于drom 的設(shè)置。如果drom0,那么0x40000xffff(48k words)的空間是外部存儲(chǔ)器(flash 或sram)。如果drom1,外部存儲(chǔ)器只能使用0x40000xefff。是否可以訪問板上或擴(kuò)展板存儲(chǔ)器取決于dmsel 控制寄存器位。如果dmsel0(缺省),那么可以使用板上的數(shù)據(jù)存儲(chǔ)器。如果dms

7、el1,那么可以使用擴(kuò)展板存儲(chǔ)器,并且地址開始于0x8000。數(shù)據(jù)存儲(chǔ)器空間資源也取決于mp/mc 狀態(tài)。c外部程序存儲(chǔ)器dsk提供了256k字的flash。外部程序存儲(chǔ)器的可用大小取決于ovly 位的設(shè)置和mp/mc# 跳線的設(shè)置。如果 ovly位0 、mp/mc#0,那么程序存儲(chǔ)器的空間0x00000xefff(60k words)映射到外部存儲(chǔ)器,是flash 還是sram 決定于控制寄存器的flashenb 狀態(tài)位。在上電狀態(tài),flashenb位置位是為了允許從flash 引導(dǎo)。然后軟件清除此位,使具有1個(gè)等待狀態(tài)的sram 使用這個(gè)相同的存儲(chǔ)器空間。如果mp/mc = 1 并且 ov

8、ly = 0,那么0x00000xffff 空間是分配給外部存儲(chǔ)器( flash 或sram )。使用 flash 存儲(chǔ)器的情況下(flashenb=1),總線的速率為100mhz,訪問flash需要7個(gè)等待狀態(tài)。在sram 情況下(flashenb=0),總線速率為100mhz 時(shí),訪問sram需要1 個(gè)等待狀態(tài)。如果mp/mc = 1并且ovly = 1,則只有x40000xffff 是映射到外部存儲(chǔ)器的。di/o空間存儲(chǔ)器i/o空間由2部分組成,一部分是系統(tǒng)基于cpld的控制空間,另一部分是擴(kuò)展板存儲(chǔ)器空間。dm_sel位是外部存儲(chǔ)器存取控制寄存器位,能夠控制i/o空間的訪問。如果dsp

9、向此位寫1,那么擴(kuò)展板存儲(chǔ)器的i/o空間是不能被訪問的。如果向此位寫0,那么擴(kuò)展板存儲(chǔ)器的i/o空間可以被訪問。 e模擬輸入/輸出音頻接口音頻接口使用了2 個(gè)標(biāo)準(zhǔn)的3.5mm 的連接器:一個(gè)連接麥克風(fēng)(j5)的音頻輸入一個(gè)連接耳機(jī)(j6)的音頻輸出麥克風(fēng)的輸入信號(hào)最大允許標(biāo)準(zhǔn)是500mvp。在dsk上有10db前置放大器增益。當(dāng)接入信號(hào)源的輸入時(shí),需要使用隔直電容(0.1u)。音頻輸入可以編程控制,在軟件的控制下,可以提供0db、+6db、+12db的增益。音頻輸出也是可以編程控制的,在軟件的控制下,可以提供0db、-6db、-12db的增益。dsk板上使用了ad50 codec作為a/d和d

10、/a的轉(zhuǎn)換設(shè)備。它是內(nèi)部集成了16位的a/d和d/a轉(zhuǎn)換器以及抗混疊濾波器,采樣速率最高可達(dá)22.05khz。 此外,adc之后有一個(gè)抽取濾波器以提高輸入信號(hào)的信噪比,在dac之前有一個(gè)插值濾波器以保證輸出信號(hào)平滑輸出。 ad50與dsp芯片通過同步串行通信接口(mcbsp1)相連。(2)tlc320ad50c的內(nèi)部結(jié)構(gòu)及初始化程序tlc320ad50c是ti公司生產(chǎn)的一個(gè)sigma-delta型16位串行a/d、d/a轉(zhuǎn)換電路。采樣速率可通過dsp編程來設(shè)置,最高可達(dá)22.05 khz。內(nèi)含抗混疊濾波器和重構(gòu)濾波器。在dac之前有一個(gè)插值濾波器:保證輸出信號(hào)平滑,在adc之后有一個(gè)抽取濾波器

11、:提高輸入信號(hào)的信噪比a/d、d/a轉(zhuǎn)換器的初始化編程:/* 獲取設(shè)置a/d和d/a的句柄 */hhandset = codec_open(handset_codec);/* 設(shè)置codec的工作參數(shù) */* dac和adc工作在15+1bit模式 */codec_dac_mode(hhandset, codec_dac_15bit); codec_adc_mode(hhandset, codec_adc_15bit);/* adc模擬增益設(shè)置為6db */ codec_ain_gain(hhandset, codec_ain_6db); /* 設(shè)置dac模擬輸出增益為-6db */codec

12、_aout_gain(hhandset, codec_aout_minus_6db);/* 設(shè)置抽樣頻率為8khz */codec_sample_rate(hhandset,sr_8000);(3)mcbsp的結(jié)構(gòu)及寄存器部分配置mcbsp:多通道緩沖串行口(multi-channel buffered serial port),是串行口的一種。它既可以利用dsp提供的dma功能實(shí)現(xiàn)自動(dòng)緩存功能,又可以實(shí)現(xiàn)時(shí)分多路通信功能。tms320c5402有兩個(gè)mcbsp串口,分別為mcbsp0、mcbsp1。mcbsp由引腳、接收發(fā)送部分、時(shí)鐘及禎同步信號(hào)產(chǎn)生、多通道選擇以及cpu中斷信號(hào)和dma同步

13、信號(hào)組成。引腳中我們用到的只有兩個(gè): dr和dx,通過這兩個(gè)引腳實(shí)現(xiàn)dsp與外部設(shè)備的通信和數(shù)據(jù)交換。dr用來接收數(shù)據(jù),dx完成數(shù)據(jù)的發(fā)送。這兩個(gè)引腳分別對(duì)應(yīng)兩個(gè)寄存器drr和dxr,如果準(zhǔn)備就緒,從這兩個(gè)寄存器中就可以讀取數(shù)據(jù)了。(注:兩個(gè)mcbsp串口,所以兩個(gè)寄存器分別用drr1、dxr1、 drr2、dxr2表示)那么如何判斷接收器和發(fā)送器是否準(zhǔn)備就緒呢?這就采用了spcr1、spcr2控制位來判斷。當(dāng)rrdy=0時(shí),接收器未就緒;當(dāng)rrdy=1時(shí),接受器就緒,可以從ddr1或2種讀取數(shù)據(jù)。當(dāng)xrdy=0時(shí),發(fā)送器尚未就緒;當(dāng)xrdy=1時(shí),發(fā)送器就緒,可以從xdr1或2種發(fā)送數(shù)據(jù)。所

14、以在實(shí)際實(shí)驗(yàn)中我們采用以下語句命令:a接收數(shù)據(jù)時(shí)while (!mcbsp_rrdy(handset_codec) ; /查詢、等待接收handset處的采樣data = *(volatile u16*)drr1_addr(handset_codec); /從handset處讀取采樣b發(fā)送數(shù)據(jù)時(shí)while (!mcbsp_xrdy(handset_codec) ; *(volatile u16*)dxr1_addr(handset_codec) = data1;/a律解壓完成后,dsp將數(shù)據(jù)通過串行口mcbsp1發(fā)送(4)均勻量化、非均勻量化如果采用相等的量化間隔對(duì)采樣得到的信號(hào)作量化,那么這

15、種量化稱為均勻量化。均勻量化就是采用相同的“等分尺”來度量采樣得到的幅度,也稱為線性量化,如圖2所示。均勻量化pcm就是直接對(duì)聲音信號(hào)作a/d轉(zhuǎn)換,在處理過程中沒有利用聲音信號(hào)的任何特性,也沒有進(jìn)行壓縮。該方法將輸入的聲音信號(hào)的振幅范圍分成個(gè)等份(b為量化位數(shù)),所以落入同一等份數(shù)的采樣值都編碼成相同的b位二進(jìn)制碼。只要采樣頻率足夠大,量化位數(shù)也適當(dāng),便能獲得較高的聲音信號(hào)數(shù)字化效果。為了滿足聽覺上的效果,均勻量化pcm必須使用較多的量化位數(shù)。這樣所記錄和產(chǎn)生的音樂,可以達(dá)到最接近原聲的效果。當(dāng)然提高采樣率及分辨率后,將引起儲(chǔ)存數(shù)據(jù)空間的增大。 pcm的編碼規(guī)律pcm: pulse code

16、modulation 脈沖編碼調(diào)制,一般速率為64kbps,是指對(duì)語音信號(hào)直接采樣量化的一種編碼辦法,采樣速率為8000hz,每樣點(diǎn)用8bit表示。cd 用16bit 44.1khz采樣的pcm。 數(shù)字電話用的也是pcm,pcm是非線性編碼,根據(jù)g.711建議,編碼結(jié)束后需要做偶數(shù)位翻轉(zhuǎn)。即如果編碼后結(jié)果是 0110 1001 則在發(fā)送的時(shí)候需要經(jīng)過偶數(shù)位翻轉(zhuǎn)得到: 0011 1100 。pcm碼的壓縮分a律u律,在中國(guó)使用a律。pcm碼有很多種,網(wǎng)絡(luò)上主要有4種:manchester碼,差分manchester碼,ami碼,hdb3碼,2b1q碼。分別用于以太網(wǎng),isdn,ddn,電話。a律

17、壓擴(kuò)其特性可表示為: 很明顯,小信號(hào)時(shí)為線性特性,大信號(hào)時(shí)近似為對(duì)數(shù)特性。這種壓擴(kuò)特性常把壓縮、量化和編碼合為一體。a律可用13段折線逼近(相當(dāng)于a=87.6),便于用數(shù)字電路實(shí)現(xiàn)。13段折線的壓縮特性如下圖。過程為:第一步:把x(x0 部分)劃分為不均勻的8段。第一分點(diǎn)取在v/2處,然后每段都是剩下部分的1/2。;依次取第八段為vv/2 第七段為v/2v/4;第一段為v/1280。第二步:把每段均勻劃分為16等份,每一份表示一個(gè)量化級(jí),顯然8段共16x8=128= 個(gè)量化級(jí),需要二進(jìn)制7位編碼表示??梢钥闯雒總€(gè)量化級(jí)是不均勻的。在小信號(hào)的量化臺(tái)階很小,使小信號(hào)時(shí)量化噪聲減小。如果按均勻量化計(jì)

18、算,以最小臺(tái)階 為單位,最大信號(hào)需用l=128x16=2048= 個(gè)量化級(jí)表示,既需要11位編碼。這樣非均勻編碼使小信號(hào)量化臺(tái)階縮小了16倍,相當(dāng)于小信號(hào)信噪比改善了20db。第三步:把y軸均勻劃分為8段,每段均勻分為16分。這樣y也分為128個(gè)量化級(jí),與x軸的128個(gè)量化級(jí)對(duì)應(yīng)。因此,壓擴(kuò)特性各段的斜率 是不同的。第一段斜率 其他段為: 。以上分段為x取正值時(shí)的情況。而x取負(fù)值時(shí),壓擴(kuò)特性與x取正值成奇對(duì)稱。在正8段和負(fù)8段中,正1,2段和負(fù)1,2段斜率相同,合為一段。所以原來的16段折線變?yōu)?3段折線。 表1(5)編譯流程首先要掌握實(shí)驗(yàn)的編譯流程,從而在其指導(dǎo)下進(jìn)行實(shí)驗(yàn)。ac編譯器(c c

19、ompiler)將c語言源程序自動(dòng)地編譯為c54x的匯編語言源程序。b匯編器(assembler)將匯編語言源文件匯編成機(jī)器語言coff目標(biāo)文件。源文件中包括指令、匯編命令以及宏命令。c鏈接器(linker)把匯編生成的、可重新定位的coff目標(biāo)模塊組合成一個(gè)可執(zhí)行的coff目標(biāo)模塊。當(dāng)鏈接器生成可執(zhí)行模塊時(shí),它要調(diào)整對(duì)符號(hào)的引用,并解決外部引用的問題。它也可以接受來自文檔管理其中的目標(biāo)文件,以及鏈接以前運(yùn)行時(shí)所生成的輸出模塊。d文檔管理器(archiver)將一組文件(源文件或目標(biāo)文件)集中為一個(gè)文檔文件庫。匯編時(shí),可以搜索宏文件庫,并通過源文件中的宏命令來調(diào)用。也可以利用文檔管理器,將一組

20、目標(biāo)文件集中到一個(gè)目標(biāo)文件庫。通過文檔管理器來替換、添加、刪除和提取庫文件。e助記符指令,將包含的助記符指令的匯編語言源文件轉(zhuǎn)換成包含代數(shù)指令的匯編語言源文件。f建庫實(shí)用程序。用來建立用戶自己用的、c語言編寫的支持運(yùn)行的庫函數(shù)。鏈接時(shí),用rts.src中的源文件代碼和rts.lib中的目標(biāo)代碼提供標(biāo)準(zhǔn)的支持運(yùn)行的庫函數(shù)。g十六進(jìn)制轉(zhuǎn)換程序,將coff目標(biāo)文件轉(zhuǎn)換成ti、intel等目標(biāo)文件格式,可以下載到eprom編程器,以便對(duì)用戶的eprom進(jìn)行編程。h絕對(duì)列表程序?qū)㈡溄雍蟮哪繕?biāo)文件作為輸入,生成.abs輸出文件。對(duì).abs文件匯編產(chǎn)生包含絕對(duì)地址的清單。如果沒有絕對(duì)制表程序,所生成清單可能

21、是冗長(zhǎng)的,并要求進(jìn)行許多人工操作。i交叉引用制表程序利用目標(biāo)文件生成一個(gè)交叉引用清單,列出所鏈 接的源文件中的符號(hào)以及它們的定義和引用情況。 圖4三 程序及說明下面就是本程序設(shè)計(jì)的流程圖:/*/* 頭文件 */*/#include #include #include #include /*/* 變量宏定義 */*/#definesign_bit(0x80)/* sign bit for a a-law byte. */#definequant_mask(0xf)/* quantization field mask. */#definensegs(8) /* number of a-law se

22、gments. */#defineseg_shift(4) /* left shift for segment number. */#defineseg_mask(0x70)/* segment field mask. */*/* 函數(shù)聲明 */*/void delay(s16 period);void led(s16 cnt);void initcodec(void);void flashenable(void);unsigned char data2alaw(s16 pcm_val);int alaw2data(unsigned chara_val);static int search(i

23、nt val,short*table,int size);/*/* 全局變量 */*/handle hhandset; /*codec句柄設(shè)置*/s16 data; /*定義有符號(hào)的整形變量,名字是data*/s16 data1; /*定義有符號(hào)的整形變量,名字是data1*/u16 i=0; /*定義無符號(hào)的整形變量并附值為0,名字是i*/u16 temp1; /*定義無符號(hào)的整形變量,名字是temp1*/u16 j=0; /*定義無符號(hào)的整形變量并附值為0,名字是j*/u16 k,l=0; /*定義兩個(gè)無符號(hào)的整形變量并附值為0,名字是k和l*/u8 temp2; /*定義無符號(hào)的字符型變

24、量,名字是temp2*/u16 buffer15000;/*定義無符號(hào)的一維數(shù)組,名字是buffer,容量是15000*/static short seg_end8=0x1f,0x3f,0x7f,0xff,0x1ff,0x3ff,0x7ff,0xfff;/*/* 主函數(shù) */*/void main() if (brd_init(100) /*dsk板初始化函數(shù),將dsp主頻設(shè)置為100mhz*/ return; led(2); /閃燈兩次 initcodec(); /初始化codec flashenable(); /選擇片外flash為片外存儲(chǔ)器 /* delay(100); brd_led_

25、toggle(brd_led0); for(i=0x9000;i0xefff;i+) reg_write(i,*(volatile u16*)drr1_addr(handset_codec); delay(20); brd_led_toggle(brd_led1); delay(200); for(i=0x9000;i0xefff;i+) *(volatile u16*)dxr1_addr(handset_codec)=reg_read(i); delay(20); brd_led_toggle(brd_led2); */ while (1) while (!mcbsp_rrdy(handse

26、t_codec) ; /等待接收handset處的采樣 data = *(volatile u16*)drr1_addr(handset_codec); /從handset處讀取采樣 temp1=data2alaw(data); /對(duì)采樣進(jìn)行a律壓縮 /*/ /* 把低地址數(shù)據(jù)放在高八位 高地址數(shù)據(jù)放在低八位 */ /*/ i=i+1; if(i%2=1) bufferj=(temp1=30000) i=0; if(j=15000) j=0; brd_led_toggle(brd_led0); /熄滅數(shù)碼管0 表示錄音結(jié)束 delay(100); /延時(shí)100 brd_led_toggle(b

27、rd_led1); /點(diǎn)亮二極管1 表示放音開始 /*/ /* 放音部分 */ /*/ for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=15000) l=0; data1=alaw2data(temp2); while (!mcbsp_xrdy(handset_codec) ; *(volatile u16*)dxr1_addr(handset_codec) = data1; /*/ /* 放音結(jié)束 */ /*/ if(k=29999) brd_led_toggle(brd_led1); /熄滅二極管1 表示放音結(jié)束 delay(10

28、0); /延時(shí)100 brd_led_toggle(brd_led2); /點(diǎn)亮二極管2 表示程序結(jié)束 /主程序結(jié)束/*/ /* 子函數(shù) */ /*/*延時(shí)*/void delay(s16 period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; j+); /*閃燈*/void 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)

29、;/*初始化codec*/void initcodec(void) /* open handset codec */ hhandset = codec_open(handset_codec); / 獲得對(duì)編碼器的處理 /* set codec parameters */ codec_dac_mode(hhandset, codec_dac_15bit); / dac 放在15-bit模式 codec_adc_mode(hhandset, codec_adc_15bit); / adc放在15-bit模式 codec_ain_gain(hhandset, codec_ain_6db); / 模擬

30、輸入獲得6db增益 codec_aout_gain(hhandset,codec_aout_minus_6db); /模擬輸出獲得-6db增益 codec_sample_rate(hhandset,sr_16000); / 設(shè)置16khz 取樣率 /*設(shè)置flash*/void flashenable(void)cpld_ctrl2_reg|=0x0010;cpld_dmctrl_reg|=0x0040;/*a律壓縮*/unsigned char data2alaw(s16 pcm_val) intmask;intseg;unsigned charaval;if (pcm_val = 0) m

31、ask = 0xd5; / 標(biāo)記 (7th) bit = 1 else mask = 0x55; / 標(biāo)記 bit = 0 pcm_val = -pcm_val;/ 將以測(cè)量的數(shù)量轉(zhuǎn)換成分割數(shù)據(jù). seg = search(pcm_val, seg_end, 8); / 鏈接信號(hào),段和量子化數(shù)據(jù) if (seg = 8) / 超出范圍, 返回最大數(shù). return (0x7f mask);else aval = seg seg_shift;if (seg 1) & quant_mask;elseaval |= (pcm_val seg) & quant_mask;return (aval ma

32、sk);/*總程序需要調(diào)用的子程序*/static int search(int val,short*table,int size)inti;for (i = 0; i size; i+) if (val = *table+)return (i);return (size);/*a律解壓*/int alaw2data(unsigned chara_val)intt;intseg;a_val = 0x55; t = (a_val & quant_mask) seg_shift;if(seg=0) t += 8; t=(t3);if(seg0) t +=0x108; t=(t(4-seg);if(

33、seg3)t+=0x108;t=(t=(seg-4);return (a_val & sign_bit) ? t : -t);/*/* 結(jié)束 */*/四程序調(diào)試及結(jié)果1ccs程序調(diào)試運(yùn)行:(1).編譯程序之前的準(zhǔn)備工作a頭文件的添加,本實(shí)驗(yàn)中的具體路徑為:c:tic5400dsk5402include,在build options選項(xiàng)中的preprocessor(預(yù)編譯)選項(xiàng)中的include seach path中的路徑應(yīng)該與此路徑一致,否則程序編譯將報(bào)錯(cuò),報(bào)錯(cuò)的原因是某些頭文件無法找到。b還有就是library的庫文件就需要自己從ti文件夾中尋找添加。(a)drv5402.lib是軟件仿真

34、所用的仿真器所必需的庫文件;(b)dsk5402.lib是驅(qū)動(dòng)dsk板所必需的庫文件;(c)rts.lib,這個(gè)庫提供目標(biāo)dsp運(yùn)行時(shí)間支持。c添加.cmd文件(cmd文件描述見下面)。(2)選擇project/rebuild all或單擊(rebuild all)菜單條按鈕,ccs重新進(jìn)行編輯、匯編、連接工程里的所有文件。這個(gè)處理的有關(guān)信息在窗口底部一個(gè)小框里顯示。(3)默認(rèn)時(shí),.out文件編譯到位于當(dāng)前工程文件夾中的調(diào)試(debug)目錄中; 也可以通過ccs工具條選擇一個(gè)存儲(chǔ)目錄。(4)選擇file/load program.選中sound.out,并按open。(c:timyproje

35、ctssound1debug 文件夾中。)ccs將程序裝載到目標(biāo)dsp上,打開顯示程序反匯編指令的disassembly窗口。(5)選擇view/mixed source/asm,這樣可以同時(shí)查看c源程序和產(chǎn)生的匯編代碼。(6)在混合窗口單擊匯編指令(單擊有效指令,而不是指令的地址或指令所傳遞的區(qū)域),單擊f1,ccs可以尋找此指令的幫助。這是學(xué)習(xí)指令的很好的方法。(7)選擇debug/go main。從主程序開始執(zhí)行。(8)選擇debug/run或單擊(run)按鈕。(9)選擇debug/ halt,退出程序運(yùn)行。2結(jié)果分析編譯運(yùn)行結(jié)果如下圖:圖5編譯運(yùn)行無錯(cuò)誤輸入波形輸出波形結(jié)論:編譯調(diào)試過程到此就完畢了,實(shí)驗(yàn)的結(jié)果比較理想,基本滿足實(shí)驗(yàn)的基本要求。我們采用a律壓擴(kuò)法,抽樣頻率為4000hz,符合奈奎斯特抽樣定理(因?yàn)橐话闳说穆曇粼?03000hz,而正常的語音為1001100hz)。用人說話聲和mp3分別進(jìn)行實(shí)驗(yàn),效果都比較理想,失真很小,錄音時(shí)間也大概在10秒左右,符合所有的實(shí)驗(yàn)要求。五、總結(jié)從設(shè)計(jì)方案的提交開始,我們便著手準(zhǔn)備這個(gè)實(shí)驗(yàn)。雖然后來由于考試的原因我們暫時(shí)地放下一陣,但我們所查找的資料以及所準(zhǔn)備的內(nèi)容在后來都是非常有用的。這個(gè)實(shí)驗(yàn)的基本思路是:利用codec對(duì)輸入的語音數(shù)據(jù)進(jìn)行采集,進(jìn)行非均勻量化和a律壓縮后存儲(chǔ)到片內(nèi)數(shù)據(jù)存儲(chǔ)器(dar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論