語音壓縮、存儲和回放_第1頁
語音壓縮、存儲和回放_第2頁
語音壓縮、存儲和回放_第3頁
語音壓縮、存儲和回放_第4頁
語音壓縮、存儲和回放_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DSP技術(shù)課程設(shè)計語音壓縮、存儲和回放實驗報告班 級:自動化0703組 員:熊浩瀾 07212080 朱 冰 07212089指導(dǎo)老師:高海林目錄一、實驗背景3二、實驗?zāi)康?三、實驗設(shè)計要求及目標3四、實驗原理3五、實驗設(shè)計5六、實驗程序8七、實驗步驟 22八、實驗現(xiàn)象及仿真 22九、實驗心得 27十、參考文獻 28語音壓縮、存儲和回放一、 實驗背景語音信號是信息的重要形式, 語音信號處理有著廣泛的應(yīng)用領(lǐng)域。語音編碼是數(shù)字化語音傳輸和存儲的基礎(chǔ)技術(shù)。與模擬語音相比,使用語音編碼技術(shù)的數(shù)字語音傳輸和存儲系統(tǒng),具有可靠性高、抗干擾能力強、便于快速交換、易于實現(xiàn)保密和價格低廉等優(yōu)勢。但是 

2、數(shù)字信號也有自身相應(yīng)的缺點,即存儲容量需求的增加及傳輸時信道容量要求的增加。如何在現(xiàn)有的信道資源條件下,壓縮信源以提高傳輸效率,從而解決日益增加的客戶需求量與現(xiàn)有通信信道容量之間的矛盾已成為當前急待解決的問題之一。因此為了減少語音信號所占用的帶寬或存儲空間,就必須對數(shù)字語音信號進行壓縮編碼。本次實驗采用DSP C5402實驗板實現(xiàn)語音信號的壓縮存儲與解壓的。SEED-VC5402 DSK實驗板上集成了SRAM,FLASH,音頻輸入輸出接口等部件。這些外設(shè)為我們提供了極大的方便。DSP芯片是一種特別適合于進行實時數(shù)字信號處理的微處理器。它具有哈佛結(jié)構(gòu)、多總線結(jié)構(gòu)、流水線結(jié)構(gòu)、多處理單元、特殊的D

3、SP指令、指令周期短、運算精度高、硬件配置強等特點,以其獨特的結(jié)構(gòu)和快速的實現(xiàn)各種數(shù)字信號處理算法的突出優(yōu)點,發(fā)展十分迅速,并在通信、雷達、聲納、語音合成和識別等領(lǐng)域獲得了廣泛的應(yīng)用。二、 實驗?zāi)康?、熟悉TMS320C5402的系統(tǒng)結(jié)構(gòu)與原理。2、了解并運用語音壓縮算法A-Law和u-Law的語音編解碼和解碼。3、掌握用C語言對MSBSP和CODEC的編程方法。4、熟悉C語言對外設(shè)(DSK板或信號源)的訪問(軟件編程、硬件連接)。5、熟練使用軟件CCS5000對程序的完整調(diào)試過程。6、通過對比學習,了解不同的編碼方式的優(yōu)缺點。三、 實驗設(shè)計要求及目標1、使用DSP實現(xiàn)語音壓縮和解壓縮的基本算

4、法,算法類型自定,例如可以采用G.711、G.729等語音壓縮算法。2、采用A/D轉(zhuǎn)換器從MIC輸入口實時采集語音信號,進行壓縮后存儲到DSP的片內(nèi)和片外RAM存儲器中,存儲時間不小于10秒。3、存儲器存滿之后,使用DSP進行實時解壓縮,并從SPEAKER輸出口進行回放輸出。4、使用指示燈對語音存儲和回放過程進行指示。四、 實驗原理 實驗包括對語音信號的接收、采樣、存儲、壓縮、解壓和輸出幾個環(huán)節(jié)。 首先將輸入的語音數(shù)據(jù)首先進行抗混疊濾波,其中抗混疊濾波濾除高于1/2采樣頻率的信號成分,使信號帶寬限定在某個范圍內(nèi);否則,會產(chǎn)生頻譜混疊,此時信號中的高頻成分將產(chǎn)生失真。然后進行模數(shù)轉(zhuǎn)換,即把時間和

5、幅度都連續(xù)變化的一維模擬信號,變成時間和幅度都離散的數(shù)字信號, 根據(jù)采樣定理,當采樣頻率大于信號最大頻率的兩倍時,在采樣過程中就不會丟失信息,并且可以用采樣后的信號重構(gòu)原始信號。由于人能夠辨別的語音信號約在20-200Khz,實際的信號常有一些低能量的頻譜分量超過采樣頻率的一半,如濁音的頻譜超過4kHz的分量要比峰值低40dB以上;而對于清音,即使超過8kHz,頻率分量也沒有明顯下降,因此語音信號達到的頻率范圍要達到10kHz以上。雖然這樣,對語音清晰度有明顯影響的部分的最高頻率為5.7kHz左右。CCITT提出的G.711標準建議采樣率為8kHz,但這只適合電話語音的情況。在實際的語音信號處

6、理中,采樣頻率一般為8k到10kHz。經(jīng)DSP采集并存入RAM存儲器中,即是語音存儲過程。通過定義適當大的緩沖區(qū),將壓縮后的8位數(shù)據(jù)經(jīng)過相應(yīng)的整合,存儲到16位的RAM中,這種操作目的主要是充分利用存儲器中的資源,以保證能夠錄入足夠多的語音數(shù)據(jù)。利用緩沖區(qū)的目的是進行音效實時處理系統(tǒng)中各模塊是同時進行處理的,一部分信號正在ADC中進行轉(zhuǎn)換,而另一部分信號則在DSP處理器中同時進行算法處理,即整個系統(tǒng)是以流水線的方式進行工作的。語音信號的幅度(發(fā)音強度)并非均勻分布,由于小信號占的比例比大信號大很多,因此可以進行非均勻量化。達到這一目標的基本做法是,對大信號使用大的量化間隔,而小信號則使用小的臺

7、階。這是我們使用ITU-T G.711的PCM A律和µ律語音壓縮標準可以分別將13比特和14比特壓縮為8比特,達到語音壓縮的目的。u/A 律壓縮解壓編碼是國際電報電話協(xié)會(CCIT)最早推出的G711語音壓縮解壓編碼的一種格式的主要內(nèi)容。其中歐洲和中國等國家采用A律壓縮解壓編碼,美國和日本采用u律壓縮解壓編碼。兩個算法使用了非線性,把量化間隔變換成人耳能檢測的線性空間。本實驗中分別采用A律和律語音壓縮算法來實現(xiàn)。A- Law編碼解碼方式:A律限制采樣值為12+1比特,將壓縮后的格式碼定義為PSSSQQQQ ,相當于將正負值輸入分成8 個區(qū)段(07) 。其中P為符號位,0代表正,1代

8、表負;SSS 表示3位高位的區(qū)段碼;QQQQ表示區(qū)段內(nèi)小格碼,區(qū)分不同輸入的范圍值。這種編碼方式使壓縮、解壓縮變得簡潔而有效率。A律壓縮編碼表線性輸入編碼壓縮編碼0000000wxyza000wxyz0000001wxyza001wxyz000001wxyzab010wxyz00001wxyzabc011wxyz0001wxyzabcd100wxyz001wxyzabcde101wxyz01wxyzabcdef110wxyz1wxyzabcdefg111wxyz數(shù)據(jù)解壓時DSP將壓縮的8位數(shù)據(jù)解壓成16位的DSP通用數(shù)據(jù)格式。其中低13位為解壓后的數(shù)據(jù),高3位為0。DSP將解壓后的數(shù)據(jù)放在緩沖

9、串口的發(fā)送寄存器中。只要運行發(fā)送指令緩沖串口就會將數(shù)據(jù)發(fā)送出去。-Law編碼解碼方式律壓縮與A律壓縮的主要區(qū)別在與u律壓縮是將十六位的數(shù)據(jù)近似為14位數(shù)據(jù),精度上有一定的提高。基本上的壓縮方式和A律相同。律壓縮編碼表線性輸入編碼壓縮編碼 00000001abcd1000abcd 0000001abcd10001abcd 000001abcd100010abcd 00001abcd1000011abcd 0001abcd10000100abcd 001abcd100000101abcd 01abcd1000000110abcd 1abcd10000000111abcd通過解壓縮,將8位還原成相應(yīng)

10、的語音數(shù)據(jù),在經(jīng)過AD50C將數(shù)字信號還原成語音信號(即模擬信號)通過多通道緩沖串口輸出,達到放音的目的。五、 實驗設(shè)計硬件部分:DSK包括: 主芯片1枚:100 MHz TMS320VC5402 DSPRAM 1枚:1個軟件等待的64K×16bit的SRAM(CY7C1021V33)FLASH 1枚:256K×16bit 的 FLASH存儲器(AM39VF400A)接口2個:一個連接到PC機并口的主機端接口HPI和用于仿真的JTAG測試總線控制器信號采集和輸出端口:麥克風/耳機音頻接口擴展板接口:用于擴展外部設(shè)備,例如lcd液晶顯示器等TI 公司的TMS320C5402(

11、以下簡稱C5402)芯片內(nèi)部多總線結(jié)構(gòu)保證在一個機器周期內(nèi)可以多次訪問程序空間和數(shù)據(jù)空間;指令執(zhí)行時的多重流水線結(jié)構(gòu)將指令周期降低到了最小值;多處理單元可以在一個指令周期內(nèi)同時進行運算,而這種結(jié)構(gòu)恰好滿足了數(shù)字信號處理中的一些特殊要求如FIR、IIR、FFT等運算;7種有效靈活的尋址方式,僅為10ns的指令執(zhí)行周期。所以我們選用其作為我們實驗應(yīng)用芯片。定點DSP芯片C5402用來實現(xiàn)對實時性要求較高的各種語音處理算法。A/D、D/A 功能由一片音頻模擬接口芯片AD50C 完成。其內(nèi)部集成了16 位A/D 和D/A 轉(zhuǎn)換器;采樣頻率為222.05kHz,可通過外部編程來設(shè)置。通過I/O口實現(xiàn)數(shù)據(jù)

12、的傳輸。將語音采集數(shù)據(jù)存放在片上RAM中。語音通過麥克與dsk板連接輸入,通過耳機與dsk板連接輸出。AD50是單片音頻接口芯片(AIC)。它內(nèi)部集成了16位的D/A和A/D轉(zhuǎn)換器,采樣速率最高可達22.05kb/s,其采樣速率可通過DSP編程來設(shè)置。在DAC之前有一個插值濾波器以保證輸出信號平滑和ADC之后有一個抽取濾波器以提高輸入信號的信噪比。AD50內(nèi)部有7個數(shù)據(jù)和控制寄存器,用于編程控制它們的工作狀態(tài)。它的數(shù)據(jù)傳輸模式和采樣速率都可以通過DSP對其控制寄存器的編程來實現(xiàn),因此,在許多場合下,AD50都作為DSP的AIC來實現(xiàn)音頻處理。 C5402 與AD50C 的接口設(shè)計如圖所示:AD

13、50C 工作在主機模式(M/S=1),提供SCLK(數(shù)據(jù)移位時鐘)和FS(幀同步脈沖)。C5402 工作于從機模式,其引腳BCLKX1、BCLKR1、BFSX1 和BFSR1 都設(shè)置為輸入,接收數(shù)據(jù)和發(fā)送數(shù)據(jù)時均采用外部時鐘和移位脈沖。C5402 的McBSP 與外設(shè)AD50C 的通信數(shù)據(jù)經(jīng)過DR1 和DX1 引腳傳輸,控制信號由BCLKX1、BCLKR1、BFSX1 和BFSR1 4 個引腳實現(xiàn)。AD50C 對輸入的語音信號進行采集、A/D 轉(zhuǎn)換之后通過中斷方式傳送給DSP,每一次中斷直接讀取A/DC 的輸出值,對其做需要的處理。 C5402 與AD50C 的連接軟件部分:1、TMS320V

14、C5402 mcbsp的串口的初始化首先將DSP的串口1復(fù)位,再對串口1的16個寄存器進行編程,使串口1工作在以下狀態(tài):禁止SPI模式,但數(shù)據(jù)相,每幀一字,每字16位,幀同步脈沖低電平有效,并且?guī)叫盘柡鸵莆恍盘栍型獠繒r鐘產(chǎn)生。 hHandset = codec_open(HANDSET_CODEC); 此語句調(diào)用了函數(shù)codec_open()對串口1進行了初步設(shè)置,設(shè)置成功返回codec的句柄放在變量 hHandset中,作為調(diào)用其他函數(shù)的實參。2、AD50的初始化:該初始化過程調(diào)用了5個函數(shù)對AD50的5項參數(shù)進行了設(shè)置,包括adc和dac的工作模式,模擬輸入和輸出的增益;以及AD,DA

15、的轉(zhuǎn)換速率。codec_dac_mode(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 fro

16、m DAC */codec_sample_rate(hHandset,SR_8000); /* 8KHz sampling rate */3、從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) ;/* Read sample from and write back to handset codec */ data=*(volatile int*)DRR

17、1_ADDR(HANDSET_CODEC); pre=int2alaw(data); /*or pre=int2ulaw(data);*/ data=alaw2int(pre); /*or data=ulaw2int(pre);*/ *(volatile int*)DXR1_ADDR(HANDSET_CODEC)=data;流程圖:開始初始化Board板成功?調(diào)用_led_display(2)使燈都閃兩次初始化Codec片選FLASH為外部存儲器等待接受Instance處的采樣LED燈0亮開始錄音采樣送voice_sample壓縮存儲voice_sampleLED燈1熄滅放音結(jié)束讀取,解壓縮并

18、送voice_sample1LED燈1亮開始放音LED燈0熄滅錄音結(jié)束是否六、 實驗程序1、A律壓縮源代碼/*/* 頭文件 */*/#include <type.h>#include <board.h>#include <codec.h>#include <mcbsp54.h>/*/* 變量宏定義 */*/#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */#define QUANT_MASK (0xf) /* Quantization field mask. */#define NSE

19、GS (8) /* Number of A-law segments. */#define SEG_SHIFT (4) /* Left shift for segment number. */#define SEG_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(unsign

20、ed 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;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); /

21、閃燈兩次 initcodec(); /初始化codec flashenable(); /選擇片外FLASH為片外存儲器 while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset處的采樣 if (i=0) brd_led_toggle(BRD_LED0); /點亮二極管0,表示錄音開始 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<<=8); /*奇數(shù)數(shù)據(jù)左移8位 temp1=abcdefgh00000000bufferj=temp1*/ else bufferj=(bufferj|temp1); /*偶數(shù)數(shù)據(jù)與temp1取或 組成新的數(shù)據(jù)bufferj=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); /點亮二極管1

23、表示放音開始 /*/* 放音部分 */*/ for(k=0;k<44000;k+)if(k%2=0) temp2=(bufferl>>8)&0x0ff;elsetemp2=bufferl&0x0ff;l+;if(l>=22000)l=0;data1=alaw2data(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /*/* 放音結(jié)束 */*/if(k=44000) brd_led_toggle(BRD_LED1);

24、 /熄滅二極管1 表示放音結(jié)束 /主程序結(jié)束/*/ /* 子函數(shù) */ /*/*延時*/void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period>>1; 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);/*初始化codec*/v

25、oid initcodec(void) /* Open Handset 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_mode(hHandset, CODEC_ADC_15BIT); / ADC in 15-bit mode codec_ain_gain(hHandset, CODEC_AIN_6

26、dB); / 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 /*設(shè)置flash*/void flashenable(void)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;/*a律壓縮*/unsigned char data2alaw(s16

27、pcm_val) Int mask;Int seg;unsigned char aval;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, seg_end, 8); / Combine the sign, segment, and quantization bits. if (seg >= 8

28、) / out of range, 返回最大數(shù). return (0x7F mask);else aval = seg << SEG_SHIFT;if (seg < 2)aval |= (pcm_val >> 1) & QUANT_MASK;elseaval |= (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;

29、 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) << 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&g

30、t;>(4-seg);if(seg>3)t+=0x108;t=(t<<=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/*/* 結(jié)束 */*/2、律壓縮源代碼/*/* 頭文件 */*/ #include <type.h> #include <board.h>#include <codec.h>#include <mcbsp54.h>/* 宏定義 */#defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */#defineQUA

31、NT_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 c

32、har ulawcom(s16 pcm_val);int ulawexp(unsigned char a_val);/*/* 全局變量 */*/HANDLE hHandset;s16 data;s16 data1;u16 i=0;u16 temp1;u16 j=0;u16 k,l=0;u8 temp2;u16 buffer22000;/*/* 主函數(shù) */*/void main() if (brd_init(100) return; led(2); /閃燈兩次 initcodec(); /初始化codec /flashenable(); /選擇片外FLASH為片外存儲器 while (1) w

33、hile (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset處的采樣 brd_led_toggle(BRD_LED0); data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /從handset處讀取采樣 temp1=ulawcom(data); /對采樣進行u律壓縮 /*/ /* 把低地址數(shù)據(jù)放在高八位 高地址數(shù)據(jù)放在低八位 */ /*/ i=i+1; if(i%2=1) bufferj=(temp1<<=8); /*奇數(shù)數(shù)據(jù)左移8位 temp1=abcdefgh00000000bufferj=temp

34、1*/ else bufferj=(bufferj|temp1); /*偶數(shù)數(shù)據(jù)與temp1取或 組成新的數(shù)據(jù) bufferj=abcdefghabcdefgh*/ j+; /j加1 if(i>=44000) i=0; if(j>=22000) j=0; brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /點亮二極管1 表示放音開始 /*/ /* 放音部分 */ /*/ for(k=0;k<44000;k+) if(k%2=0) temp2=(bufferl>>8)&0x0ff; else temp2

35、=bufferl&0x0ff; l+; if(l>=22000) l=0; data1=ulawexp(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /*/ /* 放音結(jié)束 */ /*/ brd_led_toggle(BRD_LED0); brd_led_toggle(BRD_LED1); /主程序結(jié)束/*/ /* 子函數(shù) */ /*/*延時*/void delay(s16 period) int i, j; for(i=0; i<p

36、eriod; i+) for(j=0; j<period>>1; 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);/*初始化codec*/void initcodec(void) /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); / Acquire

37、 handle to codec /* Set codec parameters */ codec_dac_mode(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_sam

溫馨提示

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

評論

0/150

提交評論