基于Matlab編寫的語音端點檢測_第1頁
基于Matlab編寫的語音端點檢測_第2頁
基于Matlab編寫的語音端點檢測_第3頁
基于Matlab編寫的語音端點檢測_第4頁
基于Matlab編寫的語音端點檢測_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于Matlab編寫的語音端點檢測專 業(yè): 班 級: 姓 名: 指導教師: 2011 年 6月 18 日一、實驗目的1學會MATLAB的使用,掌握MATLAB的程序設計方法;3掌握語音處理的基本概念、基本理論和基本方法;4掌握基于MATLAB編程實現(xiàn)帶噪語音信號端點檢測;5學會用MATLAB對信號進行分析和處理。二、實驗內容簡介:可利用時域分析(短時能量、短時過零率、短時自相關)方法的某一個特征或某幾個特征的結合,判定某一語音信號的端點,尤其在有噪聲干擾時,如何準確檢測語音信號的端點,這在語音處理中是富有挑戰(zhàn)性的一個課題。 要求:(1)錄制語音,讀入文件,繪制波形 (2)分幀,繪制能量曲線和短

2、時過零率曲線 (3)根據(jù)上述端點檢測原理,實現(xiàn)端點檢測 (4)界面三課程設計原理端點檢測是語音信號處理過程中非常重要的一步,它的準確性直接影響到語音信號處理的速度和結果,因此端點檢測方法的研究一直是語音信號處理中的熱點。本設計使用傳統(tǒng)的短時能量和過零率相結合的語音端點檢測算法利用短時過零率來檢測清音用短時能量來檢測濁音,兩者相配合便實現(xiàn)了信號信噪比較大情況下的端點檢測。算法對于輸入信號的檢測過程可分為短時能量檢測和短時過零率檢測兩個部分。算法以短時能量檢測為主,短時過零率檢測為輔。根據(jù)語音的統(tǒng)計特性,可以把語音段分為清音、濁音以及靜音(包括背景噪聲)三種。在本算法中,短時能量檢測可以較好地區(qū)分

3、出濁音和靜音。對于清音,由于其能量較小,在短時能量檢測中會因為低于能量門限而被誤判為靜音;短時過零率則可以從語音中區(qū)分出靜音和清音。將兩種檢測結合起來,就可以檢測出語音段(清音和濁音)及靜音段1、短時能量計算定義n時刻某語音信號的短時平均能量為:式中N為窗長,可見短時平均能量為為一幀樣點值的甲醛平方和。特殊地,當窗函數(shù)為矩形窗時,有2、短時過零率過零就是指信號通過零值。過零率就是每秒內信號值通過零值的次數(shù)。對于離散時間序列,過零則是指序列取樣值改變符號,過零率則是每個樣本的改變符號的次數(shù)。對于語音信號,則是指在一幀語音中語音信號波形穿過橫軸(零電平)的次數(shù)??梢杂孟噜弮蓚€取樣改變符號的次數(shù)來計

4、算。如果窗的起點是n=0,短時過零率Z為波形穿過橫軸(零電平)的次數(shù)短時過零可以看作信號頻率的簡單度量濁音的短時平均幅度最大,無聲的短時平均幅度最小,清音的短時過零率最大,無聲居中,濁音的短時過零率最小。3、 短時自相關函數(shù)1、是偶函數(shù);2、s(n)是周期的,那么R(k)也是周期的;3、可用于基音周期估計和線性預測分析4、判斷語音信號的起點和終點利用短時平均幅度和短時過零率可以判斷語音信號的起點和終點。語音端點檢測方法可采用測試信號的短時能量或短時對數(shù)能量、聯(lián)合過零率等特征參數(shù),并采用雙門限判定法來檢測語音端點,即利用過零率檢測清音,用短時能量檢測濁音,兩者 配合。首先為短時能量和過零率分別確

5、定兩個門限,一個是較低的門限數(shù)值較小,對信號的 變化比較敏感,很容易超過;另一個是比較高的門限,數(shù)值較大。低門限被超過未必是語音 的開始,有可能是很短的噪聲引起的,高門限被超過并且接下來的自定義時間段內的語音超首先,可根據(jù)濁語音情況下短時平均幅度M的概率密度函數(shù)P(M/V)確定一個閾值參數(shù)MH, MH的值定得比較高。當一幀輸入信號的M值超過MH時,就可以十分肯定該幀語音信號不是無聲,而有相當大的可能性是濁音由N1向前和N2向后繼續(xù)用短時過零率Z進行搜索。根據(jù)無聲情況下短時過零率Z的均值,設置一個參數(shù)Z0,如果由N1向前搜索時Z始終大于Z0的3倍,則認為這些信號仍屬于語音段,直至Z突然下降到低于

6、3Z0值時,這時可以確定語音的精確起點(為了保證可靠,由N1 向前搜索時間不超過25ms)。對終點做同樣的處理。采取這一算法的原因在于, N1以前可能是一段清輔音段(如f,s),它的能量相當弱,依靠能量不可能把他們與無聲段區(qū)別開,而他們的過零率明顯高于無聲,因而能用這個參數(shù)來精確的判斷二者的分割點,也就是語音真正的起點。四、實驗步驟及分步結果 1.界面設計 2.程序設計(1).打開語音文件function openbutton_Callback(hObject, eventdata, handles)clc;axes(handles.wavaxes);cla reset;box on;set(

7、gca,'XTickLabel','YTickLabel',);axes(handles.Energeaxes);cla reset;box on;set(gca,'XTickLabel','YTickLabel',);axes(handles.Zerorateaxes);cla reset;box on;set(gca,'XTickLabel','YTickLabel',);set(handles.T1edit,'string',0);set(handles.T2edit,'

8、;string',0);set(handles.T3edit,'string',0);%´ò¿ª´ý´¦ÀíµÄÓïÒôÎļþ filename,pathname=uigetfile('*.wav','All Wav Files','Ñ¡ÔñÓïÒô&#

9、206;ļþ'); if filename = 0 return;%Èç¹ûûÓÐÑ¡ÔñеÄÎļþ£¬Ôò·µ»Ø end file=fullfile(pathname,filename);%ÎļþÃû si

10、gnal,fs,bit=wavread(file);%¶ÁÈ¡Ñ¡ÔñµÄÓïÒôÊý¾Ý axes(handles.wavaxes) plot(signal)%ÏÔʾ²¨ÐÎ handles.wavsignal=signal; %update handles structure guidata(hObject,handles);預處理

11、預處理程序function prebutton_Callback(hObject, eventdata, handles)% hObject handle to prebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)signal=handles.wavsignal;signal=filter(1,-0.9375,1,signal);%Ô¤&

12、#188;ÓÖØÂ˲¨axes(handles.wavaxes)plot(signal)%ÏÔʾԤ¼ÓÖغó²¨ÐÎtitle('Ô¤¼ÓÖØÂ˲¨ºóÓïÒô²¨

13、8;Î');handles.wavsignal=signal;framelength=256;%´°³¤£»framenumber=fix(length(signal)/framelength);%×ÜÖ¡Êýfor i=1:framenumber; framesignal(i,1:framelength)=signal(i-1)*framelength+1:i*framelength);%·ÖÖ¡´

14、6;Àíendhandles.framesignal=framesignal;%Update handles structureguidata(hObject,handles);短時能量短時能量function Energebutton_Callback(hObject, eventdata, handles)% hObject handle to Energebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with

15、handles and user data (see GUIDATA)framesignal=handles.framesignal;framenumber=size(framesignal,1);%»ñµÃÊý¾ÝèåÊýfor i=1:framenumber; E(i)=0; E(i)=sum(framesignal(i,:).2);%¼ÆËã¶ÌʱÄÜÁ

16、91;endaxes(handles.Energeaxes)%c=1 2 3 4 5 6 4 3 3 3 3;plot(E);%½«ÄÜÁ¿Ö»ÏÔʾÔÚÄÜÁ¿´°¿Úhandles.E=E;%Update handles structureguidata(hObject,handles); % - Executes on button press in Zerorateb

17、utton.function Zeroratebutton_Callback(hObject, eventdata, handles)% hObject handle to Zeroratebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)framesignal=handles.framesignal;framenumber=size(framesignal,1

18、);%ÓïÒôÊý¾ÝÖ¡Êýframelength=size(framesignal,2);%»ñÈ¡ÓïÒôÖ¡³¤for i=1:framenumber; Z(i)=0; for j=2:framelength-1; Z(i)=Z(i)+abs(sign(framesignal(i,j)-sign(framesignal(i,j-1);%¼&

19、#198;Ëã¶Ìʱ¹ýÁãÂÊ endendaxes(handles.Zerorateaxes)%ÏÔʾ֡¹ýÁãÂÊÇúÏßplot(Z)handles.Z=Z;handles.framelength=framelength;%Update handles structureguidata(hObject,h

20、andles);短時過零率短時過零率function Zeroratebutton_Callback(hObject, eventdata, handles)% hObject handle to Zeroratebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)framesignal=handles.framesignal;framenumber=size(f

21、ramesignal,1);%ÓïÒôÊý¾ÝÖ¡Êýframelength=size(framesignal,2);%»ñÈ¡ÓïÒôÖ¡³¤for i=1:framenumber; Z(i)=0; for j=2:framelength-1; Z(i)=Z(i)+abs(sign(framesignal(i,j)-sign(framesignal(i,j

22、-1);%¼ÆËã¶Ìʱ¹ýÁãÂÊ endendaxes(handles.Zerorateaxes)%ÏÔʾ֡¹ýÁãÂÊÇúÏßplot(Z)handles.Z=Z;handles.framelength=framelength;%Update handles structureguida

23、ta(hObject,handles);設定門限1.2閾值設置門限1.2(編輯框2)function T2edit_Callback(hObject, eventdata, handles)% hObject handle to T2edit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)clcaxes(handles.Energeaxes);cla reset;box

24、on;set(gca,'XTicklabel','YTicklabel',);%ÔÚÊäÈëеÄa,bֵʱ£¬ÒªÇå¿ÕEnergeaxesÀïµÄͼÏñTL=get(handles.T1edit,'string');%»

25、1;µÃTLÖµTH=get(handles.T2edit,'string');%»ñµÃTHÖµTL=str2num(TL);%½«×Ö·ûÀàÐÍת»¯³ÉÊýÖµÀàÐÍTH=str2num(TH);E=handles.E;MeanE=

26、mean(E(1:10);%ÇóÇ°10Ö¡µÄÄÜÁ¿¾ùÖµaxes(handles.Energeaxes)plot(E)hold online(1 length(E),TL TL,'Color','r');%ÓúìÏß»­³öTLÖµhold online(1 length(E)

27、,TH,TH,'Color','b');%ÓÃÀ¶Ïß»­³öTHÖµhandles.TL=TL;handles.TH=TH;%Update handles structureguidata(hObject,handles);編輯框3門限3function T3edit_Callback(hObject, eventdata, handles)% hObject handle to T3edit (see GCBO)% eventdata re

28、served - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)clc axes(handles.Zerorateaxes);cla reset;box on;set(gca,'XTickLabel','YtickLabel',);v=get(handles.T3edit,'string');v=1*str2num(v);Z=handles.Z;MeanZ=mean(Z(1:10);Var

29、Z=std(Z(1:10);ZT=min(v,MeanZ+VarZ);axes(handles.Zerorateaxes)plot(Z)hold online(1,length(Z),ZT,ZT,'Color','b');handles.ZT=ZT;guidata(hObject,handles);端點檢測端點檢測function Detectpointbutton_Callback(hObject, eventdata, handles)TL=handles.TL;%¼ÓÔØÊý¾Ý

30、;TH=handles.TH;ZT=handles.ZT;Z=handles.Z;E=handles.E;startflag=1;startframe=11;mins=min(handles.wavsignal);maxs=max(handles.wavsignal);axes(handles.wavaxes);plot(handles.wavsignal);accustartflag=1;accustartframe=startframe-15;i=accustartframe;k=0;i=11;while(startflag)%ÓöÌÊ&

31、#177;ÄÜÁ¿³õ²½¼ÆËãÆðʼµã if(E(i)>TL)&(E(i+1)>TH) startframe=i; startflag=0;%±ê־λÇåÁãÍ˳öÑ­»· while(accustartf

32、lag)%ÓöÌʱ¹ýÁãÂʽøÒ»²½¼ÆËãÆðʼµã if(Z(i)>ZT); k=k+1; if(k=3) accustartflag=0; accustartframe=i-3 startframe=accustartframe; end else k=0; end i=i+1;end else

33、 i=i+1; endend endflag=1;endframe=length(E);i=endframe;accuendflag=1;accuendframe=endframe+15;i=accuendframe;k=0;j=size(E);for i=11:j-1;%ÓɶÌʱÄÜÁ¿´ÖÅÐÖÕÖ¹µã if(i=1) break; end if(E(i)>TL)&(E(i

34、-1)>TH) endframe=i; while(accuendflag)%ÓɶÌʱ¹ýÁãÂʽøÒ»²½¼ÆËãÖÕÖ¹µã if(i>length(Z) break; end if(Z(i)>ZT) k=k+1; if(k=3) accuendflag=0; accuendframe=i;

35、 endframe=accuendframe; endflag=0; end else k=0; end i=i+1; end else i=i-1; endendhold online(startframe*256 startframe*256,-0.5 0.5,'Color','b');%»­³öÆðʼµãhold online(endframe*256 endframe*256,-0.5 0.5,'Color','r');%

36、»­³öÖÕÖ¹µã五、實驗結論分析:(1) 從圖中明顯可以看出,濁音信號的具有明顯的周期性,其自相關函數(shù)和平均幅度差函數(shù)也表現(xiàn)出周期性。清音信號稍微差一點,但不是很明顯,主要是由于清音信號的位置找的不是很好。(2) 濁音:短時能量大、短時平均幅度大、短時過零率低;清音:短時能量小、短時平均幅度小、短時過零率高。(3) 門限值的選取對語音檢測結果有很大影響。(4) 僅僅根據(jù)能量判斷是比較粗糙的,還需根據(jù)過零率進行判斷。因為清音和噪聲的短時平均過零率比背景噪聲的平均過零率要高出好幾倍。六,實驗心得

37、 這次的實驗,,給我最大的收獲就是培養(yǎng)了獨立思考和動手的能力,還有就是實驗的靈活性,總得來說就是在獨立與創(chuàng)新這二個環(huán)節(jié),我更加掌握MATLAB的程序設計方法,進一步的了解了掌握基于MATLAB編程實現(xiàn)帶噪語音信號端點檢測的原理,這充分鍛煉了我們獨立的動手能力和獨立的解決所遇到的問題,讓我對這門課程又有了新的理解。七參考資料1.王永琦 MATLAB與音視頻技術 北京 清華大學出版社 2013年11月第一版 :91-103.2.韓紀慶 張磊 鄭鐵然 語音信號處理 北京 清華大學出版社 2004年9月第一版 附源代碼:function varargout = duandianjiance(varar

38、gin)% DUANDIANJIANCE MATLAB code for duandianjiance.fig% DUANDIANJIANCE, by itself, creates a new DUANDIANJIANCE or raises the existing% singleton*.% H = DUANDIANJIANCE returns the handle to a new DUANDIANJIANCE or the handle to% the existing singleton*.% DUANDIANJIANCE('CALLBACK',hObject,ev

39、entData,handles,.) calls the local% function named CALLBACK in DUANDIANJIANCE.M with the given input arguments.% DUANDIANJIANCE('Property','Value',.) creates a new DUANDIANJIANCE or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI

40、before duandianjiance_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to duandianjiance_OpeningFcn via varargin.% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)&

41、quot;.% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help duandianjiance% Last Modified by GUIDE v2.5 29-Dec-2014 14:40:22% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui

42、_Singleton, . 'gui_OpeningFcn', duandianjiance_OpeningFcn, . 'gui_OutputFcn', duandianjiance_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_

43、mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before duandianjiance is made visible.function duandianjiance_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject

44、handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to duandianjiance (see VARARGIN)% Choose default command line output for duandianjiancehandles.output = hObject;% Update han

45、dles structureguidata(hObject, handles);% UIWAIT makes duandianjiance wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = duandianjiance_OutputFcn(hObject, eventdata, handles) % varargout cell array for r

46、eturning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout1 = handles.output;% - Executes on button pres

47、s in prebutton.function prebutton_Callback(hObject, eventdata, handles)% hObject handle to prebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)signal=handles.wavsignal;signal=filter(1,-0.9375,1,signal);%預加重

48、濾波axes(handles.wavaxes)plot(signal)%顯示預加重后波形title('預加重濾波后語音波形');handles.wavsignal=signal;framelength=256;%窗長;framenumber=fix(length(signal)/framelength);for i=1:framenumber; framesignal(i,1:framelength)=signal(i-1)*framelength+1:i*framelength);endhandles.framesignal=framesignal;%Update handl

49、es structureguidata(hObject,handles);% - Executes on button press in openbutton.function openbutton_Callback(hObject, eventdata, handles)% hObject handle to openbutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUID

50、ATA)%當打開新的語音文件后,將3個軸對象清空,將各個門限值設置為零clc;axes(handles.wavaxes);cla reset;box on;set(gca,'XTickLabel','YTickLabel',);axes(handles.Energeaxe);cla reset;box on;set(gca,'XTickLabel','YTickLabel',);axes(handles.Zerorateaxes);cla reset;box on;set(gca,'XTickLabel','

51、;YTickLabel',);set(handles.T1edit,'string',0);set(handles.T2edit,'string',0);set(handles.T3edit,'string',0);%打開待處理的語音文件 filename,pathname=uigetfile('*.wav','All Wav Files','選擇語音文件'); if filename = 0 return;%如果沒有選擇新的文件,則返回 end file=fullfile(pathname

52、,filename);%文件名 signal,fs,bit=wavread(file);%讀取選擇的語音數(shù)據(jù) axes(handles.wavaxes) plot(signal)%顯示波形 handles.wavsignal=signal; %update handles structure guidata(hObject,handles);% - Executes on button press in Energebutton.function Energebutton_Callback(hObject, eventdata, handles)% hObject handle to Ener

53、gebutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)framesignal=handles.framesignal;framenumber=size(framesignal,1);%獲得數(shù)據(jù)楨數(shù)for i=1:framenumber; E(i)=0; E(i)=sum(framesignal(i,:).2);%計算短時能量endaxes(handles.Ene

54、rgeaxes)%c=1 2 3 4 5 6 4 3 3 3 3;plot(E);%將能量只顯示在能量窗口handles.E=E;%Update handles structureguidata(hObject,handles);% - Executes on button press in Zeroratebotton.function Zeroratebotton_Callback(hObject, eventdata, handles)% hObject handle to Zeroratebotton (see GCBO)% eventdata reserved - to be def

55、ined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)framesignal=handles.framesignal;framenumber=size(framesignal,1);%語音數(shù)據(jù)幀數(shù)framelength=size(framesignal,2);%獲取語音幀長for i=1:framenumber; Z(i)=0; for j=2:framelength-1; Z(i)=Z(i)+abs(sign(framesignal(i,j)-sign(fra

56、mesignal(i,j-1); endendaxes(handles.Zerorateaxes)plot(Z)handles.Z=Z;%Update handles structureguidata(hObject,handles);% - Executes on button press in Detectpointbutton.function Detectpointbutton_Callback(hObject, eventdata, handles)% hObject handle to Detectpointbutton (see GCBO)% eventdata reserved

57、 - to be defined in a future version of MATLAB %handles structure with handles and user data (see GUIDATA)function T1edit_Callback(hObject, eventdata, handles)% hObject handle to T1edit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and u

58、ser data (see GUIDATA)% Hints: get(hObject,'String') returns contents of T1edit as text% str2double(get(hObject,'String') returns contents of T1edit as a double% - Executes during object creation, after setting all properties.function T1edit_CreateFcn(hObject, eventdata, handles)% hO

59、bject handle to T1edit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,&#

60、39;BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');endfunction T2edit_Callback(hObject, eventdata, handles)% hObject handle to T2edit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles s

61、tructure with handles and user data (see GUIDATA)clcaxes(handles.Energeaxes);cla reset;box on;set(gca,'XTicklabel','YTicklabel',);%在輸入新的a,b值時,要清空Energeaxes里的圖像a=get(handles.T1edit,'string');%獲得值b=get(handles.T2edit,'string');%獲得值a=str2num(a);b=str2num(b);E=handles.E;M

62、eanE=mean(E(1:10);%求前10幀的能量均值MINE=min(E);%計算能量最小值MAXE=max(E);%計算能量的最大值%計算TL(低能量閾值)和TH(高能量閾值)I1=a*(MAXE-MINE)+MINE;%I1=×(MAXE-MINE)+MINE;I2=b*MINE;%I2=×MINE;TL=min(I1,I2);TH=5*TL;axes(handles.Energeaxes)plot(E)hold onLine(1 length(E),TL TL','Color','b');%用紅線畫出TL值hold online(1 length(E),TH,TH','Color','g');%用藍線畫出TH值handles.TL=TL;handles.TH

溫馨提示

  • 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

提交評論