語音壓縮存儲及回放實驗報告_第1頁
語音壓縮存儲及回放實驗報告_第2頁
語音壓縮存儲及回放實驗報告_第3頁
語音壓縮存儲及回放實驗報告_第4頁
語音壓縮存儲及回放實驗報告_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、DSP課程設計實 驗 報 告 語音壓縮、存儲和回放目 錄一、設計任務書封面1二、設計內容與要求3三、設計算法原理說明4四、程序設計、調試與結果分析7CMD程序,C語言程序7調試過程15波形與數(shù)據(jù)顯示16五、設計(安裝)與調試的體會17 六、參考文獻18語音的壓縮、存儲與回放一、 設計要求與目標(1)使用DSP實現(xiàn)語音壓縮和解壓縮的基本算法,算法類型自定,例如可以采用G.711、G.729等語音壓縮算法。(2)采用A/D轉換器從MIC輸入口實時采集語音信號,進行壓縮后存儲到DSP的片內和片外RAM存儲器中,存儲時間不小于10秒。(3)存儲器存滿之后,使用DSP進行實時解壓縮,并從SPEAKER輸

2、出口進行回放輸出。(4)使用指示燈對語音存儲和回放過程進行指示。發(fā)揮部分:使用多種算法進行語音的壓縮、存儲和解壓縮,比較它們之間的優(yōu)缺點。二、 實驗目的1、通過本實驗掌握5402DSP片上外設多通道緩沖串行口mcbsp。2、學習掌握tlc320ad50CODEC編譯碼器的內部結構、工作原理。3、學習A律語音壓縮以及C語言下的編程方法。三、實驗原理 1語音采集與輸出模塊語音采集與輸出模塊采用的是TI公司推出的一款高性能的立體聲音頻Codec芯片TLC320AD50C,內置耳機輸出放大器,支持MIC和LINE IN兩種輸入方式(二選一),且對輸入和輸出都具有可編程增益調節(jié)。AD50的模數(shù)轉換(AD

3、Cs)和數(shù)模轉換(DACs)部件高度集成在芯片內部,采用了先進的Sigmadelta過采樣技術,可以在8K到96K的頻率范圍內提供16bit、20bit、24bit和32bit的采樣,ADC和DAC的輸出信噪比分別可以達到90dB和100dB。與此同時,AD50還具有很低的能耗,回放模式下功率僅為23mW,省電模式下更是小于15uW。由于具有上述優(yōu)點,使得AD50是一款非常理想的音頻模擬I/O器件,可以很好的應用在隨聲聽(如CD,MP3)、錄音機等數(shù)字音頻領域2。由TLC320AD50C組成的語音輸入與輸出模塊不僅采樣率高最高可達96K,且外圍電路簡單,性價比高。2語音編碼(1)概念: 語音編

4、碼一般分為兩類:一類是波形編碼,一類是被稱為“聲碼器技術”的編碼。 PCM編碼即脈沖編碼調制。 波形編碼的最簡單形式就是脈沖編碼調制(Pulse code modulation),這種方式將語音變換成與其幅度成正比的二進制序列,而二進制數(shù)值往往采用脈沖表示,并用脈沖對采樣幅 度進行編碼,所以叫做脈沖編碼調制。 脈沖編碼調制沒有考慮語音的性質,所以信號沒有得到壓縮。 (2)量化: 脈沖編碼調制用同等的量化級數(shù)進行量化,即采用均勻量化,而均勻量化是基本的量化方 式。但是均勻量化有缺點,在信號動態(tài)范圍較大而方差較小的時候,其信噪比會下降 。 國際上有兩種非均勻量化的方法:A律和u律,u律是最常用的一

5、種。在美國,7位u律是長途電話質量的標準。 而我國采用的是A律壓縮,而且有標準的A律PCM編碼芯片。 (3)DPCM&ADPCM: 降低傳輸比特率的方法之一是減少編碼的信息量,這要消除語音信號中的冗余度。相鄰的語音樣本之間存在明顯的相關性,因此對相鄰樣本間的差信號進行編碼,便可使信息量得到壓縮。因為差分信號比原語音信號的動態(tài)范圍和平均能量都小。這種編碼叫Differential PCM,簡稱DPCM,即差分脈沖編碼調制。 ADPCM即自適應差分脈沖編碼調制,是包括短時預測的編碼系統(tǒng)。CCITT(國際電報電話咨詢委員會)在1984年提出的32 kbit/s的編碼器建議就是采用ADPCM作為長途傳

6、輸中的國際通用語音編碼方案。這種ADPCM編碼方案達到64 kbit/s PCM的語音傳輸質量,并具有很好的抗誤碼性能。 (4)a律壓縮a律壓縮示意圖A律壓縮編碼表A律壓縮編碼表線性輸入編碼壓縮編碼0000000wxyza000wxyz0000001wxyza001wxyz000001wxyzab010wxyz00001wxyzabc011wxyz0001wxyzabcd100wxyz001wxyzabcde101wxyz01wxyzabcdef110wxyz1wxyzabcdefg111wxyz采用DSP可以直接對PCM編碼后的語音信號進行律和A律壓縮。圖1是DSP硬件實現(xiàn)數(shù)據(jù)壓縮解壓的簡單

7、流程,DSP將傳輸來的壓縮后的數(shù)據(jù)進行解壓成16位或者32位,然后對解壓后的數(shù)據(jù)進行分析、處理,最后將處理后的數(shù)據(jù)按照要求壓縮成8位的數(shù)據(jù)格式輸出到相應設備,供其他設備讀取。圖1 數(shù)據(jù)壓縮解壓流程圖2是DSP將數(shù)據(jù)解壓的值,DSP將壓縮的8位數(shù)據(jù)解壓成16位的DSP通用數(shù)據(jù)格式,其中高13位為解壓后的數(shù)據(jù),低3位補0。這是因為6711的A律壓縮只能對13位數(shù)據(jù)操作。DSP將解壓后的數(shù)據(jù)放在緩沖串口的發(fā)送寄存器中,只要運行發(fā)送指令,緩沖串口就會將數(shù)據(jù)發(fā)送出去。緩沖串口對接收數(shù)據(jù)的解壓過程和壓縮過程完全相反。圖3是律數(shù)據(jù)解壓的示意圖。圖2 A律數(shù)據(jù)解壓圖3 律數(shù)據(jù)解壓DSP內部的緩沖串口(McBS

8、Ps)帶有硬件實現(xiàn)的律A律壓縮解壓,用戶只需要在相應寄存器中進行設置就可以了。在進行A律壓縮時,采樣后的12位數(shù)據(jù),默認其最高位為符號位,壓縮時要保持最高位即符號位不變,原數(shù)據(jù)的后11位要壓縮成7位。這7位碼由3位段落碼和4位段內碼組成。具體的壓縮變換后的數(shù)據(jù)根據(jù)后11位數(shù)據(jù)大小決定。表2 A律數(shù)據(jù)壓縮表除對串行口數(shù)據(jù)實現(xiàn)壓擴處理外,這套硬件在McBSP不使用時還可以當作一個特殊的處理單元對內部數(shù)據(jù)實現(xiàn)壓擴處理,他有兩種實現(xiàn)方法。法一:當串行口的發(fā)送和接受部分都處于復位狀態(tài)時,DRR1和DXR1內部通過壓擴邏輯連接在一起,數(shù)據(jù)從DXR1寫入并根據(jù)XCOMPAND處理,然后根據(jù)RCOMPAND再

9、處理,在4個CPU時鐘后從DRR1中讀出數(shù)據(jù)。該處理比軟件實現(xiàn)快,不利之處在于處理完后沒有同步信息通知CPU和DMA。法二:在數(shù)據(jù)環(huán)回模式下,McBSP也實現(xiàn)了一種內連。數(shù)據(jù)處理與第一種方法相同,但它可以提供中斷信號(或同步事件)給CPU(或DMA)。這里數(shù)據(jù)處理的時間是根據(jù)串行口的比特律確定的。另外,在通常情況下McBSP先傳輸信號的高位后傳輸?shù)臀唬窃谧珠L為8比特的數(shù)據(jù)傳輸時,McBSP提供了比特倒序的功能,即可以先傳輸?shù)臀缓髠鬏敻呶?。在本實驗中,我們通過軟件編程來完成線性碼轉換成A律。語音信號通常是小信號概率大,大信號出現(xiàn)的概率小,為提高小信號時的量化信躁比,壓縮比特速率,可為非線性量

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

11、D轉換器D/A轉換器語音經(jīng)A/D轉換器輸入數(shù)據(jù)壓縮數(shù)據(jù)存儲解壓縮經(jīng)D/A轉換器回放結束存儲器的分配(5402.cmd)MEMORY PAGE 0: VECS: origin = 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,

12、 length = 0300h /* DMA buffer */ DATA: origin = 1100h, length = 0080h /* Internal Data 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 *

13、/ HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */ HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by Host and DSP */ EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */SECTIONS .cinit PRAM PAGE 0 .text PRAM PAGE 0 .vectors VECS PAGE 0 init

14、_var PRAM PAGE 0 detect PRAM PAGE 0 vrcprg PRAM PAGE 0 matprg 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 EXRAM

15、 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 /* table for hamming */ lgwtab EXRAM

16、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 */ costab EXRAM PAGE 1 /* table for cosine */ V23 INRAM PAGE 1 FSK

17、 INRAM PAGE 1 hpibuff0 HPRAM0 PAGE 1 hpibuff1 HPRAM1 PAGE 1 hpibuff2 HPRAM2 PAGE 1 dma_buff DMARAM PAGE 1/*主程序設計*/*語音采集及回放程序*/*用A律進行壓縮及解壓*/*采用AD50進行A/D,D/A轉換 */ /*燈循環(huán)閃爍程序開始*/*L0:錄音*/*L1:放音*/ #include /* 頭文件*/#include #include #include /* 宏定義 */#defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */#de

18、fineQUANT_MASK(0xf)/* Quantization field mask. */#defineNSEGS(8) /* Number of A-law segments. */#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

19、 char data2alaw(s16 pcm_val);int alaw2data(unsigned chara_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;u8 temp2;u16 buffer20000;static short seg_end8=0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF;/* 主函數(shù) */void mai

20、n() if (brd_init(100) return; led(2); /閃燈兩次 initcodec(); /初始化codec flashenable(); /選擇片外FLASH為片外存儲器 /* delay(100); brd_led_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+) *(volat

21、ile u16*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i); delay(20); brd_led_toggle(BRD_LED2); */ while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset處的采樣 brd_led_toggle(BRD_LED0); data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /從handset處讀取采樣 temp1=data2alaw(data); /對采樣進行a律壓縮 /* 把低地址數(shù)據(jù)放在高八位 高地址數(shù)據(jù)放在低八位

22、*/ i=i+1; if(i%2=1) bufferj=(temp1=40000) i=0; if(j=20000) j=0; brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /點亮二極管1 表示放音開始 /* 放音部分 */ for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=20000) l=0; data1=alaw2data(temp2); / a律解壓 while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADD

23、R(HANDSET_CODEC) = data1; /將數(shù)據(jù)寫入D/A轉換器 /* 放音結束 */ brd_led_toggle(BRD_LED0); brd_led_toggle(BRD_LED1); /主程序結束 /* 子函數(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); /切換LED指示燈0的顯示狀態(tài)delay(1000);brd_led_togg

24、le(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);/*初始化codec*/void initcodec(void) /* Open Handset Codec 獲取設置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_mod

25、e(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_8000); / 8KHz sampling rate /*設置flash*/void flashenable(v

26、oid)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;/*a律壓縮*/unsigned char data2alaw(s16 pcm_val) intmask;intseg;unsigned charaval;if (pcm_val = 0) mask = 0xD5; / 標記 (7th) bit = 1 else mask = 0x55; / 標記 bit = 0 pcm_val = -pcm_val;/ Convert the scaled magnitude to segment number. seg = search(pcm_val,

27、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 1) & QUANT_MASK;elseaval |= (pcm_val seg) & QUANT_MASK;return (aval mask);/*alaw的子程序*/static int search(int val,short*table,int size)inti;for (i =

28、 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(seg3)t+=0x108;t=(t=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/* 結束 */四操作過程 1將

29、工程文件夾放入C盤要求目錄下。2. 打開CCS,Project open,打開工程文件。3進行編譯,連接。4根據(jù)錯誤提示,對build option進行正確的設置,修改頭文件路徑。5再編譯,連接,顯示沒有錯誤。6load program-run,此時三盞燈循環(huán)亮,之后程序開始,第一盞燈亮開始錄音,一段時間后第二盞燈亮開始放音,然后又開始錄音。依次循環(huán)。五調試過程與運行結果1.觀察數(shù)據(jù)結果Viewwatch window我們輸入buffer,顯示此數(shù)組的值,如圖D所示。2觀察數(shù)據(jù)圖形ViewGraphTime Frequency可以加入斷點,然后按Animate 動態(tài)顯示。分別觀察語音輸入(存放

30、在變量data中)波形,壓縮后波形(temp1),解壓后輸出波形(data1),圖形分別為A,B,C。3觀察存儲器中數(shù)據(jù)ViewMemory經(jīng)過多次調試,使錄音時間在保持音質的前提下達到5-6秒。A輸入波形(data)B壓縮后波形(temp1)C解壓縮后輸出波形(data1)Dwatch window中的值五實驗總結 經(jīng)歷了這次實驗,我想我們充分認識到了壓力帶給人的巨大動力。確定做語音壓縮,存儲與回放實驗后,查了大量A律,u律壓縮方法的資料,并學習了CCS環(huán)境下的操作、調試與運行。由于之前對DSP很不了解,這方面學習我們去實驗室操作了不少時間,終于熟悉了它的操作步驟與簡單調試方法。然后具體針對語音壓縮回放實驗,我們經(jīng)歷了比較大的挫折。首先借了板子后怎么都不能和計算機連接,換了好幾臺電腦都不行,換了板子后終于可以了,但問題是語音不能錄入,很疑惑,編譯下載都沒問題,最后發(fā)現(xiàn)是耳機的問題。終于能錄入后,我們很激動,接下來就是觀察波形與數(shù)據(jù)了。分別看了輸入與經(jīng)壓縮后波形,發(fā)現(xiàn)沒什么區(qū)別,而且有連續(xù)整段波形全在橫軸上方或下方,經(jīng)分析后我們修改了顯示點數(shù),將256改為128,則波形變疏,同時也能看出壓縮后的變化,只是不太明顯,說明A律壓縮不會有很大失真,效果較好。對比輸入輸出波形,發(fā)現(xiàn)很相

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論