dsp語音信號處理課程設計_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  摘要1</b></p><p><b>  第一章緒論2</b></p><p>  1.1 簡析數(shù)字信號2</p><p>  1.2 課程設計的目標2</p><p>

2、  1.3課程設計的內容及要求2</p><p>  第二章語音信號處理理論基礎4</p><p>  2.1簡述語音信號4</p><p>  2.2基礎知識概述4</p><p>  第三章 系統(tǒng)方案論證5</p><p>  3.1 設計方案分析5</p><p><

3、;b>  3.2實驗原理5</b></p><p>  第四章 GUI設計實現(xiàn)8</p><p>  4.1原理圖及程序8</p><p>  第五章 總結與心得體會17</p><p><b>  參考文獻18</b></p><p><b>  摘要<

4、;/b></p><p>  數(shù)字信號處理(Digital Signal Processing)技術,從20世紀60年代以來,隨著計算機科學和信息科學、集成芯片制造工藝的飛速發(fā)展,數(shù)字處理技術應運而生并得以快速發(fā)展。 語言是人們進行信息溝通的主要方式之一,它具有直接、自然、方便等優(yōu)點。語音則是語言的物理層表達方式。語音處理主要是對語音進行機器處理,以達到傳輸、自動識別、機器理解等目的。本文首先對語音信號處理

5、進行了概述,其中包括各種處理技術、發(fā)展及應用。接下來主要介紹了語音識別方面的知識。根據(jù)語音識別系統(tǒng)的基本構成模型,介紹了預處理、端點檢測到模板匹配各個部分所涉及到的語音數(shù)字信號處理原理和方法。重點研究了孤立詞識別系統(tǒng)的原理、構成及各部分的實現(xiàn)算法。</p><p>  論文中首先對語音信號的基本處理問題進行了分析和對比,然后在自己設計的基于TMS320VC5402的DSP實際系統(tǒng)上,進行了語音處理過程的濾波、采樣

6、、傅立葉變換和譜包絡提取的算法實現(xiàn)研究,討論了在算法的DSP實現(xiàn)方法,分析了運行實驗結果。在此基礎上,對GSM系統(tǒng)中的編碼、回聲抵消、說話人識別和交通車輛內部的噪聲抵消應用進行了研究。最后對DSP實現(xiàn)語音信號處理的存在的問題和發(fā)展前景進行了展望。</p><p><b>  緒論</b></p><p>  1.1 簡析數(shù)字信號</p><p>

7、;  數(shù)字信號處理(Digital Signal Processing,簡稱DSP)是一門涉及多門學科并廣泛應用于很多科學與工程領域的新興學科。20世紀60年代以來,隨著計算機和信息技術的飛速發(fā)展,有力地推動和促進了DSP技術的發(fā)展進程。在過去的二十多年時間里,DSP技術已經在通信等領域得到了極為廣泛的應用。步入2l世紀以后,信息社會已經進入了數(shù)字化時代,DSP技術已成為數(shù)字化社會最重要的技術之一。DSP可以代表數(shù)字信號處理(DigJt

8、al Signal Processing),也可以代表數(shù)字信號處理器(Digital Signal Processor),其實兩者是不可分割的。前者是理論與計算方法的技術,后者是實現(xiàn)這些技術的通用或專用可編程微處理器:蒼:片。隨著DSP芯片的快速發(fā)展,應用越來越廣泛,DSP這一英文縮寫己被大家公認為數(shù)字信號處理器的代名詞。</p><p>  1.2 課程設計的目標</p><p>  D

9、SP作為專用的微處理器,它主要的目標,尤其是早期誕生的時候,主要是用于數(shù)字信號處理,內部結構一丌始采用了和普通的MCU不太一樣的哈佛結構,主要特點就是分離數(shù)據(jù)流和指令流,并且在內部使用乘法累加器的運算內核和流水線結構。在MCU做乘法運算,需要數(shù)十個指令周期的時候,DSP一開始就擁有使用單指令的乘法運算能力。所以自從一出現(xiàn),就被一些運算密集型的嵌入式或者脫機應用所關注。經過這么多年的發(fā)展,DSP的內部結構發(fā)生了很多的變化llJ,比如說與通

10、用處理器的結合、并行化和專業(yè)化。與通用處理器的結合,就是在DSP芯片早面,用DSP的內核做運算密集型的數(shù)字信號處理的運算,在芯片內同時有通用的處理器內核做管理運算,這樣形成的新的DSP產品,不僅有強的運算能力,還有好的事務處理能力。Dsp的應用現(xiàn)在已經很廣泛了,像汽車、嵌入式的通信系統(tǒng)和安全加密,很多的安全加密產品,實際上加密算法是不占用計算機資源,是用DSP做的一個板子插到計算機里進行加密運算。隨著DSP技術的不斷發(fā)展,DSP處理器的

11、性能也在不斷提高。</p><p>  1.3課程設計的內容及要求</p><p><b>  課程設計內容:</b></p><p>  根據(jù)設計要求分析系統(tǒng)功能,掌握設計中所需理論(采樣頻率、采樣位數(shù)的概念,采樣定理; 時域信號的FFT分析;數(shù)字濾波器設計原理和方法,各種不同類型濾波器的性能比較),闡明設計原理。集語音信號,并對其

12、進行FFT頻譜分析,畫出信號的時域波形圖和頻譜圖。 對所采集的語音信號加入干擾噪聲,對語音信號進行回放,感覺加噪前后聲音的變化,分析原因,得出結論。并對其進行FFT頻譜分析,比較加噪前后語音信號的波形及頻譜,對所得結果進行分析,闡明原因,得出結論。根據(jù)待處理信號特點,設計合適數(shù)字濾波器,繪制所設計濾波器的幅頻和相頻特性。用所設計的濾波器對含噪語音信號進行濾波。對濾波后的語音信號進行FFT頻譜分析。畫出處理過程中所得各種波形及頻譜圖。對語

13、音信號進行回放,感覺濾波前后聲音的變化。比較濾波前后語音信號的波形及頻譜,對所得結果和濾波器性能進行頻譜分析,闡明原因,得出結論。設計處理系統(tǒng)的用戶界面,在所設計的系統(tǒng)界面上可以選擇濾波器的參數(shù),顯示濾波器的頻率響應,選擇信號等。</p><p><b>  課程設計要求:</b></p><p>  1.本次課程設計要求利用MATLAB對語音信號進行數(shù)字信號處理和分

14、析,要求學生采集語音信號后,在MATLAB軟件平臺進行頻譜分析;并對所采集的語音信號加入干擾噪聲,對加入噪聲的信號進行頻譜分析,設計合適的濾波器濾除噪聲,恢復原信號。 </p><p>  2.基本教學要求:每組一臺電腦(附話筒和耳機), 電腦安裝MATLAB7.1版本以上軟件。</p><p>  語音信號處理理論基礎</p><p><b>  2.1

15、簡述語音信號</b></p><p>  語音信號處理是研究用數(shù)字信號處理技術對語音信號進行處理的一門學科,它是一門新興的學科,同時又是綜合性的多學科領域和涉及面廣的交叉學科。語音信號處理是許多信息領域應用的核心技術之一,是目前發(fā)展速度最快的信息科學技術領域中的一個。</p><p><b>  2.2基礎知識概述</b></p><p

16、>  在研究分析各種語音信號處理技術集應用之前,必須了解有關語音信號的一些基本特性。為了對語音信號進行數(shù)字處理,需要建立一個能夠精確描述語音產生過程和語音全部特征的數(shù)字模型,即根據(jù)語音的長生過程建立一個又實用又便于分析的語音信號模型。發(fā)音語音學只要研究語音產生機理,借助儀器觀察發(fā)音器官,以確定發(fā)音部位和發(fā)音方法。聲音是一種波,能被人耳聽到,它的振動頻率在20~20000hz之間。自然界中包含各種各樣的聲音,如風聲、雷聲、雨聲等。&

17、lt;/p><p>  根據(jù)語音信號的產生模型,可以將其豕一個線性非時變系統(tǒng)的輸出表示,即看做是聲門激勵信號和聲道沖激響應的卷積。在語音信號數(shù)字處理所涉及的各個領域中,根據(jù)語音信號求解聲門激勵和聲道響應具有非常重要的意義。</p><p>  同態(tài)稱為同態(tài)濾波,它實現(xiàn)了將卷積關系變換為求和關系的分享處理。眾所周知,為了分離加性組合信號,常用采用線性濾波方法。而為了分離非加性組合信號,常采用同態(tài)

18、濾波技術。同態(tài)濾波是一咱非線性濾波,但它服從廣義疊加原理。</p><p>  加性信號可以用線性系統(tǒng)來處理,這種系統(tǒng)滿足疊加性。但是許多信號,其組成各分量不是按加法原則組合起來的。如語音信號、圖像信號、地震信號、通信中的衰落信號、調制信號都不是加性信號,而是乘積性信號或卷積性信號。此時不能用線性系統(tǒng),而必須用滿足其相應組合原則的非線性系統(tǒng)來處理。而同態(tài)信號處理就是非線性問題轉化為線性問題來處理。按被處理的信號來

19、分類,大體分為乘積同態(tài)處理和卷積同態(tài)處理和卷積同態(tài)處理兩種。第三章 系統(tǒng)方案論證</p><p>  3.1 設計方案分析 </p><p>  信號的傅立葉表示在信號的分析與處理中起著重要的作用。因為對于線性系統(tǒng)來說,可以很方便地確定其對正弦或復指數(shù)和的響應,所以傅立葉分析方法能完善地解決許多信號分析和處理問題。另外,傅立葉表示使信號的某些特性變得更明顯,因此,它能更深入地說明信號的

20、各項紅物理現(xiàn)象。</p><p>  由于語音信號是隨著時間變化的,通常認為,語音是一個受準周期脈沖或隨機噪聲源激勵的線性系統(tǒng)的輸出。輸出頻譜是聲道系統(tǒng)頻率響應與激勵源頻譜的乘積。聲道系統(tǒng)的頻率響應及激勵源都是隨時間變化的,因此一般標準的傅立葉表示雖然適用于周期及平穩(wěn)隨機信號的表示,但不能直接用于語音信號。由于語音信號可以認為在短時間內,近似不變,因而可以采用短時分析法。</p><p>

21、  本實驗要求掌握傅里葉分析原理,會利用已學的知識,編寫程序估計短時譜、倒譜,畫出語譜圖,并分析實驗結果,在此基礎上,借助頻域分析方法所求得的參數(shù)分析語音信號的基音周期或共振峰。</p><p><b>  3.2實驗原理</b></p><p><b>  1、短時傅立葉變換</b></p><p>  由于語音信號是短

22、時平穩(wěn)的隨機信號,某一語音信號幀的短時傅立葉變換的定義為:</p><p><b> ?。?.1)</b></p><p>  其中w(n-m)是實窗口函數(shù)序列,n表示某一語音信號幀。令n-m=k',則得到</p><p><b> ?。?.2)</b></p><p><b> 

23、 于是可以得到</b></p><p><b>  (2.3)</b></p><p><b>  假定</b></p><p><b> ?。?)</b></p><p><b>  則可以得到</b></p><p>

24、;<b>  (5)</b></p><p>  同樣,不同的窗口函數(shù),將得到不同的傅立葉變換式的結果。由上式可見,短時傅立葉變換有兩個變量:n和ω,所以它既是時序n的離散函數(shù),又是角頻率ω的連續(xù)函數(shù)。與離散傅立葉變換逼近傅立葉變換一樣,如令ω=2πk/N,則得離散的短時傅立葉吧如下:</p><p><b>  (6)</b></p>

25、;<p><b>  2、語譜圖</b></p><p>  水平方向是時間軸,垂直方向是頻率軸,圖上的灰度條紋代表各個時刻的語音短時譜。語譜圖反映了語音信號的動態(tài)頻率特性,在語音分析中具有重要的實用價值。被成為可視語言。</p><p>  語譜圖的時間分辨率和頻率分辨率是由窗函數(shù)的特性決定的。時間分辨率高,可以看出時間波形的每個周期及共振峰隨時間的變

26、化,但頻率分辨率低,不足以分辨由于激勵所形成的細微結構,稱為寬帶語譜圖;而窄帶語譜圖正好與之相反。</p><p>  寬帶語譜圖可以獲得較高的時間分辨率,反映頻譜的快速時變過程;窄帶語譜圖可以獲得較高的頻率分辨率,反映頻譜的精細結構。兩者相結合,可以提供帶兩與語音特性相關的信息。語譜圖上因其不同的灰度,形成不同的紋路,稱之為“聲紋”。聲紋因人而異,因此可以在司法、安全等場合得到應用。</p>&l

27、t;p><b>  3、復倒譜和倒譜</b></p><p>  復倒譜是x(n)的Z變換取對數(shù)后的逆Z變換,其表達式如下:</p><p><b>  (7)</b></p><p>  倒譜c(n)定義為x(n)取Z變換后的幅度對數(shù)的逆Z變換,即</p><p><b> ?。?

28、)</b></p><p>  在時域上,語音產生模型實際上是一個激勵信號與聲道沖激響應的卷積。對于濁音,激勵信號可以由周期脈沖序列表示;對于清音,激勵信號可以由隨機噪聲序列表示。聲道系統(tǒng)相當于參數(shù)緩慢變化的零極點線性濾波器。這樣經過同態(tài)處理后,語音信號的復倒譜,激勵信號的復倒譜,聲道系統(tǒng)的復倒譜之間滿足下面的關系:</p><p><b> ?。?)</b&g

29、t;</p><p>  由于倒譜對應于復倒譜的偶部,因此倒譜與復倒譜具有同樣的特點,很容易知道語音信號的倒譜,激勵信號的倒譜以及聲道系統(tǒng)的倒譜之間滿足下面關系:</p><p><b>  (10)</b></p><p>  濁音信號的倒譜中存在著峰值,它的出現(xiàn)位置等于該語音段的基音周期,而清音的倒譜中則不存在峰值。利用這個特點我們可以進行

30、清濁音的判斷,并且可以估計濁音的基音周期。</p><p>  第四章 GUI設計實現(xiàn)</p><p><b>  4.1原理圖及程序</b></p><p><b>  一 按鈕放置</b></p><p>  function varargout = jy01(varargin)</p&g

31、t;<p>  % JY01 M-file for jy01.fig</p><p>  % JY01, by itself, creates a new JY01 or raises the existing</p><p>  % singleton*.</p><p><b>  %</b></p&

32、gt;<p>  % H = JY01 returns the handle to a new JY01 or the handle to</p><p>  % the existing singleton*.</p><p><b>  %</b></p><p>  % JY01('CA

33、LLBACK',hObject,eventData,handles,...) calls the local</p><p>  % function named CALLBACK in JY01.M with the given input arguments.</p><p><b>  %</b></p><p>  %

34、 JY01('Property','Value',...) creates a new JY01 or raises the</p><p>  % existing singleton*. Starting from the left, property value pairs are</p><p>  % applied

35、 to the GUI before jy01_OpeningFcn gets called. An</p><p>  % unrecognized property name or invalid value makes property application</p><p>  % stop. All inputs are passed to jy01_Op

36、eningFcn via varargin.</p><p><b>  %</b></p><p>  % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one</p><p>  % instance to run (s

37、ingleton)".</p><p><b>  %</b></p><p>  % See also: GUIDE, GUIDATA, GUIHANDLES</p><p>  % Edit the above text to modify the response to help jy01</p><p>

38、;  % Last Modified by GUIDE v2.5 01-Jul-2005 13:30:37</p><p>  % Begin initialization code - DO NOT EDIT</p><p>  gui_Singleton = 1;</p><p>  gui_State = struct('gui_Name',

39、 mfilename, ...</p><p>  'gui_Singleton', gui_Singleton, ...</p><p>  'gui_OpeningFcn', @jy01_OpeningFcn, ...</p><p>  'gui_OutputFcn', @jy01_OutputFc

40、n, ...</p><p>  'gui_LayoutFcn', [] , ...</p><p>  'gui_Callback', []);</p><p>  if nargin && ischar(varargin{1})</p><p>  gui_State.gui_Call

41、back = str2func(varargin{1});</p><p><b>  end</b></p><p>  if nargout</p><p>  [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});</p><p><b>

42、;  else</b></p><p>  gui_mainfcn(gui_State, varargin{:});</p><p><b>  end</b></p><p>  % End initialization code - DO NOT EDIT</p><p>  % --- Executes

43、 just before jy01 is made visible.</p><p><b>  圖4-1 放置按鈕</b></p><p><b>  二 修改屬性 </b></p><p>  function jy01_OpeningFcn(hObject, eventdata, handles, varargin)

44、</p><p>  % This function has no output args, see OutputFcn.</p><p>  % hObject handle to figure</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</

45、p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  % varargin command line arguments to jy01 (see VARARGIN)</p><p>  % Choose default command line outpu

46、t for jy01</p><p>  handles.output = hObject;</p><p>  % Update handles structure</p><p>  guidata(hObject, handles);</p><p>  % UIWAIT makes jy01 wait for user respons

47、e (see UIRESUME)</p><p>  % uiwait(handles.figure1);</p><p>  % --- Outputs from this function are returned to the command line.</p><p><b>  圖4-2 修改程序</b></p><

48、;p><b>  三 運行程序 </b></p><p>  function varargout = jy01_OutputFcn(hObject, eventdata, handles) </p><p>  % varargout cell array for returning output args (see VARARGOUT);</p>

49、;<p>  % hObject handle to figure</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)&

50、lt;/p><p>  % Get default command line output from handles structure</p><p>  varargout{1} = handles.output;</p><p>  % --- Executes on button press in pushbutton2.</p><p>

51、;<b>  圖4-3 運行程序</b></p><p>  四 各按鈕相應功能展示及程序</p><p>  圖4-4 運行結果組圖</p><p><b>  程序:</b></p><p>  function pushbutton2_Callback(hObject, eventdata,

52、handles)</p><p>  % hObject handle to pushbutton2 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with han

53、dles and user data (see GUIDATA)</p><p>  [x]=wavread('01.wav');</p><p><b>  sound(x);</b></p><p>  subplot(4,1,1);</p><p><b>  plot(x);</b

54、></p><p>  axis([1 length(x) -1 1]);</p><p>  ylabel('Speech');</p><p>  enhance=filter([1-0.9375],1,x);</p><p>  FrameLen=240; FrameInc=80;</p><

55、p>  yframe=enframe(x,FrameLen,FrameInc);</p><p>  amp1=sum(abs(yframe),2);</p><p>  subplot(4,1,2);</p><p>  plot(amp1);</p><p>  axis([1 length(amp1) 0 max(amp1)]);

56、</p><p>  ylabel('Amp');</p><p>  legend('amp1=¡Æ©¦x©¦');</p><p>  amp2=sum(abs(yframe.*yframe),2);</p><p>  subplot(4,1,3

57、);</p><p>  plot(amp2);</p><p>  axis([1 length(amp2) 0 max(amp2)]);</p><p>  ylabel('Energy');</p><p>  legend('amp1=¡Æ©¦x*x©¦

58、;');</p><p>  tmp1=enframe(x(1:end-1),FrameLen,FrameInc);</p><p>  tmp2=enframe(x(2:end),FrameLen,FrameInc);</p><p>  signs=(tmp1.*tmp2)<0;</p><p>  diffs=(tmp1-

59、tmp2)>0.02;</p><p>  zcr=sum(signs.*diffs,2);</p><p>  subplot(4,1,4);</p><p>  plot(zcr);</p><p>  axis([1 length(zcr) 0 max(zcr)]);</p><p>  ylabel(&#

60、39;ZCR');</p><p>  legend('zcr');</p><p>  function f=enframe(x,win,inc)</p><p>  nx=length(x(:));</p><p>  nwin=length(win);</p><p>  if (nwin

61、 == 1)</p><p>  len = win;</p><p><b>  else</b></p><p>  len = nwin;</p><p><b>  end</b></p><p>  if (nargin < 3)</p><

62、;p>  inc = len;</p><p><b>  end</b></p><p>  nf = fix((nx-len+inc)/inc);</p><p>  f=zeros(nf,len);</p><p>  indf= inc*(0:(nf-1)).';</p><p&

63、gt;  inds = (1:len);</p><p>  f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));</p><p>  if (nwin > 1)</p><p>  w = win(:)';</p><p>  f = f .* w(ones(nf,1),:);&l

64、t;/p><p><b>  end</b></p><p>  % --- Executes on button press in pushbutton3.</p><p>  function pushbutton3_Callback(hObject, eventdata, handles)</p><p>  % hO

65、bject handle to pushbutton3 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)<

66、;/p><p>  [our]=wavread('01.wav');</p><p>  specgram_hw3p20(our,1024,512,10000);</p><p>  specgram_hw3p20(our,512,256,10000);</p><p>  function [spec] = specgram_h

67、w3p20(x, winlgh, frmlgh, sampling_rate); </p><p>  % specgram_hw3p20(x, winlgh, frmlgh, sampling_rate)</p><p><b>  %</b></p><p>  % function to compute a spectrogram <

68、;/p><p><b>  %</b></p><p>  % x = input waveform </p><p>  % winlgh = window length in samples</p><p>  % frmlgh = frame length in samples</p><p&g

69、t;  % sampling_rate = samples/sec</p><p>  % PARAMETERS</p><p>  %sampling_rate = 10000; % sampling rate</p><p>  lfft = 1024; % FFT length </p><p>  lfft2 =

70、lfft/2;</p><p>  %winlgh = 200; % (128) window length (in samples)</p><p>  %frmlgh = 10; % frame interval (in samples)</p><p>  noverlap = winlgh - frmlgh;</p>&l

71、t;p>  % x = x(1:4500);</p><p>  x = 2.0*x/max(abs(x));</p><p>  etime = length(x)/sampling_rate;</p><p>  %-----------------------------------------------------------------------

72、----%</p><p>  spec = abs(specgram(x, lfft, sampling_rate, winlgh, noverlap));</p><p>  subplot(211);</p><p>  plot((1:length(x))/sampling_rate,x)</p><p>  xlabel('

73、Time (s)');</p><p>  title('SPEECH');</p><p>  axis([0 etime -2.5 2.5]);</p><p><b>  grid;</b></p><p>  subplot(212)</p><p>  image

74、sc(0:.010:etime, 0:1000:(sampling_rate/2), log10(abs(spec)));axis('xy')</p><p>  xlabel('Time (ms)'),ylabel('Frequency (Hz)');</p><p>  title('SPECTROGRAM');<

75、;/p><p>  --- Executes on button press in pushbutton4.</p><p>  function pushbutton4_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton4 (see GCBO)</p&

76、gt;<p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p><b>  clc; </b><

77、;/p><p><b>  clear;</b></p><p><b>  tic, </b></p><p>  [y,fs]=wavread('01.wav'); </p><p>  L=length(y); </p><p>  fw=y.*hammin

78、g(L);</p><p>  r=real(log(fft(fw,L)))</p><p>  pfw=cceps(fw);</p><p>  rpfw=rceps(fw);</p><p>  z=rpfw(1:30);</p><p>  p=pfw(31:L)</p><p>  lo

79、gz=real(exp(fft(z,L)));</p><p>  logp=real(fft(p));</p><p>  subplot(3,2,1);plot(y);title('ԭʼ²¨ÐÎ')</p><p>  subplot(3,2,3);plot(pf

80、w);title('¸´µ¹Æ×')</p><p>  subplot(3,2,5);plot(rpfw);title('ʵµ¹Æ×')</p><p>  subplot(3,2,6);plot(logz);title('&#

81、181;¹Æ×ÓòÂ˲¨ºóµÄ¶ÔÊý·ù¶ÈÆ×')</p><p>  subplot(3,2,4);plot(r);title('¶Ô

82、02;ý·ù¶ÈÆ×')</p><p>  subplot(3,2,2);plot(fw);title('¼Óº£Ã÷´°ºóµÄ²¨ÐÎ')</p>

83、;<p>  % --- Executes on button press in pushbutton5.</p><p>  function pushbutton5_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton5 (see GCBO)</p>

84、<p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  speech1_10k=wavread('01.wav&

85、#39;,[1024 1273]);%È¡250µãµÄÓïÒôÐźÅ</p><p>  sw=speech1_10k.*hamming(250);%a¼ÓººÃ÷´° </p>

86、<p>  Rsw=xcorr(sw');%a×ÔÏà¹Ø </p><p>  t=0.1:0.1:25;subplot(1,2,1);plot(t,sw);xlabel('ms');title('¼Ó´°ºóʱÓ&#

87、242;²¨ÐÎ'); </p><p>  subplot(1,2,2); t=0.1:0.1:length(Rsw)/10;plot(t,Rsw);xlabel('ms');title('¼Ó´°ºó×Թز¨

88、8;Î'); </p><p>  Rsw4=[Rsw(250:253);Rsw(249:252);Rsw(248:251);Rsw(247:250)];%Éú³É4*4 ×ÔÏà¹ØÕó </p><p>  Rsw6=[Rsw(250:255);Rs

89、w(249:254);Rsw(248:253);Rsw(247:252);Rsw(246:251);Rsw(245:250)];%Éú³É6*6×ÔÏà¹ØÕó </p><p>  rea4=inv(Rsw4)*Rsw(251:254)';%ÇóÔ

90、4;²âϵÊý4 </p><p>  rea6=inv(Rsw6)*Rsw(251:256)';%ÇóÔ¤²âϵÊý6 </p><p>  A4=sqrt(Rsw(250)-Rsw(251:254)*rea4);%&

91、#199;óÔöÒæ </p><p>  A6=sqrt(Rsw(250)-Rsw(251:256)*rea6);%ÇóÔöÒæ </p><p>  w=pi/512:pi/512:pi;%Éú³ÉÊä³&#

92、246;ƵÂÊ·¶Î§ </p><p>  j=sqrt(-1); </p><p>  FW4=rea4'*[exp(-j*w);exp(-j*w*2);exp(-j*w*3);exp(-j*w*4)];%ÔÚƵÂÊ·

93、2;ΧÇóÔ¤²âƵÏì </p><p>  FW6=rea6'*[exp(-j*w);exp(-j*w*2);exp(-j*w*3);exp(-j*w*4);exp(-j*w*5);exp(-j*w*6)];%ÔÚƵÂÊ

94、;·¶Î§ÇóÔ¤²âƵÏì </p><p>  HW4=A4./(1-FW4);%ÓÉÔ¤²âƵÏìÇó </p><p>

95、  HW6=A6./(1-FW6);%ÓÉÔ¤²âƵÏìÇó </p><p>  FW2=fft(sw,1024);%ÐźŸµÁ¢Ò¶±ä»» &l

96、t;/p><p>  FW3=FW2(1:512); </p><p>  w=(1/1024:1/1024:0.5)*10000; </p><p>  subplot(2,2,1);plot(w,log(abs(FW3)));xlabel('ƵÂÊhz');title('¼Ó

97、80;°ºóÐźÅƵÆ×'); </p><p>  subplot(2,2,2);plot(w,log(abs(HW4)),'g');xlabel('ƵÂÊhz');title('4¼«&#

98、181;ãÄ£ÐÍƵÂÊÏìÓ¦'); </p><p>  subplot(2,2,3);plot(w,log(abs(HW6)),'r');xlabel('ƵÂÊhz');title('6&

99、#188;«µãÄ£ÐÍƵÂÊÏìÓ¦'); </p><p>  subplot(2,2,4);plot(w,log(abs(FW3)),w,log(abs(HW4)),w,log(abs(HW6)));xlabel('Ƶ&

100、#194;Êhz');title('ÈýÕ߱ȽÏ');</p><p>  % --- Executes on button press in pushbutton6.</p><p>  function pushbutton6_Callback(hObject, eve

101、ntdata, handles)</p><p>  % hObject handle to pushbutton6 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure

102、with handles and user data (see GUIDATA)</p><p><b>  clear</b></p><p>  Y=wavread('01.wav',[1 1800]);</p><p>  x1=Y(271:510);x2=Y(271:510);x3=Y(271:510);</p&g

103、t;<p><b>  %×ÔÏà¹Ø·¨</b></p><p>  r=zeros(1,240);</p><p>  for k=1:240</p><p>  for n=1:240-k</p><p>  r(k)=r

104、(k)+x1(n)*x1(n+k);</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  j=1:240;</b></p><p>  subplot(2,2,2);plot(j,r);title('

105、15;ÔÏà¹Ø·¨´¦ÀíºóµÄ²¨ÐÎ')</p><p>  subplot(2,2,1);plot(j,x1);title('Ô­º¯Êý&

106、#39;)</p><p><b>  %Èýµçƽ·¨</b></p><p>  for k1=1:1:240</p><p>  if x2(k1)>0</p><p><b>  x2(k1)=1;</b>

107、;</p><p>  else if x2(k1)==0</p><p><b>  x2(k1)=0;</b></p><p>  else if x2(k1)<0</p><p>  x2(k1)=-1;</p><p><b>  end</b></p&g

108、t;<p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  j=1:240;</b></p><p>  subplot(2,2,3);plot(

109、j,x2);title('Èýµçƽ·¨´¦ÀíºóµÄ²¨ÐÎ')</p><p>  %ÖÐÐÄÏû²¨·

110、;¨</p><p>  for k1=1:1:240</p><p>  ma=abs(max(x3));</p><p>  tc=0.6*ma;</p><p>  if x3(k1)>tc</p><p>  x3(k1)=x3(k1)-tc;</p><p>  els

111、e if x3(k1)<-tc</p><p>  x3(k1)=x3(k1)+tc;</p><p><b>  else</b></p><p><b>  x3(k1)=0;</b></p><p><b>  end</b></p><p>

112、;<b>  end</b></p><p><b>  end</b></p><p><b>  j=1:240;</b></p><p>  subplot(2,2,4);plot(j,x3);title('ÖÐÐÄÏû

113、8;¨·¨´¦ÀíºóµÄ²¨ÐÎ')</p><p>  % --- Executes on button press in pushbutton7.</p><p>  function pushbutton7_Callback(

114、hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton7 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles

115、 structure with handles and user data (see GUIDATA)</p><p><b>  clear</b></p><p><b>  clc</b></p><p>  winsize=256; % ´°³¤ </p>&

116、lt;p>  winsize=256; % ´°³¤ </p><p>  n=0.04; % ÔëÉùˮƽ </p><p>  [speech,fs,nbits]=wavread('01.wav'); % ¶ÁÈ

117、ëÊý¾Ý </p><p>  size=length(speech); </p><p>  numofwin=floor(size/winsize); % Ö¡Êý </p><p><b>  %¼Ó´° </b&

118、gt;</p><p>  ham=hamming(winsize)'; %Generates Hamming Window </p><p>  hamwin=zeros(1,size); %Vector for window gain </p><p>  enhanced=zeros(1,size); %Vector for enhanced spee

119、ch </p><p>  %²úÉú´øÔëÐźŠ</p><p>  x=speech'+ n*randn(1,size); %Contaminates signal with white noise </p><p>  %

120、12;ëÉù¹À¼Æ </p><p>  noisy=n*randn(1,winsize); %Sample of noise </p><p>  N = fft(noisy); </p><p>  nmag= abs(N); %Estimated noise magnitude spect

121、rum </p><p>  for q=1:2*numofwin-1 </p><p>  frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2); %50 percent overlap </p><p>  hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamw

122、in(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham; %Window gain </p><p>  %¶Ô´øÔëÓïÒô½øÐÐDFT </p><p>  y=fft(frame.*ham); &

123、lt;/p><p>  mag = abs(y); %Magnitude Spectrum </p><p>  phase = angle(y); %Phase Spectrum </p><p>  %·ù¶ÈÆ×¼õ </p><p>  for i=1:win

124、size </p><p>  if mag(i)-nmag(i)>0 </p><p>  clean(i)= mag(i)-nmag(i); </p><p>  else;clean(i)=0; </p><p><b>  end </b></p><p><b>  en

125、d </b></p><p>  %ÔÚƵÓòÖÐÖØкϳÉÓïÒô </p><p>  fff=exp(j*phase);</p><p>  

126、spectral=clean.*fff; </p><p>  %IDFT²¢ÖصþÏà¼Ó </p><p>  enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+

127、(q-1)*winsize/2)+real(ifft(spectral)); </p><p><b>  end </b></p><p>  % ³ýÈ¥Hamming´°ÒýÆðµÄÔöÒæ </p

128、><p>  for i=1:size </p><p>  if hamwin(i)==0 </p><p>  enhanced(i)=0; </p><p><b>  else </b></p><p>  enhanced(i)=enhanced(i)/hamwin(i); </p&g

129、t;<p><b>  end </b></p><p><b>  end </b></p><p>  SNR1 = 10*log10(var(speech')/var(noisy)); %¼ÓÔëÓïÒôÐÅÔ

130、ë±È </p><p>  SNR2 = 10*log10(var(speech')/var(enhanced-speech')); %ÔöÇ¿ÓïÒôÐÅÔë±È </p><p>  wavwrite

131、(x,fs,nbits,'noisy.wav'); %Êä³ö´øÔëÐźŠ</p><p>  wavwrite(enhanced,fs,nbits,'enhanced.wav'); %Êä³öÔö

132、Ç¿ÓïÒô </p><p>  subplot(3,1,1);plot(speech'); %ԭʼÓïÒô²¨ÐÎ </p><p>  title(['Original Voice (n

133、=',num2str(n),')' ]); </p><p>  specgram(speech'); %ԭʼÓïÒôÓïÆ× </p><p>  title(['Original Voice (n=',num2str

134、(n),')' ]); </p><p>  subplot(3,1,2); plot(x); </p><p>  title(['Noise Added (SNR=',num2str(SNR1),'dB)']); </p><p>  specgram(x); %¼ÓÔë&#

135、211;ïÒôÓïÆ× </p><p>  title(['Noise Added (SNR=',num2str(SNR1),'dB)']); </p><p>  subplot(3,1,3);plot(enhanced); </p><p>  title([

136、'Improved Voice (SNR=',num2str(SNR2),'dB SNR=',num2str(SNR2-SNR1),'dB)']); </p><p>  specgram(enhanced); </p><p>  title(['Improved Voice (SNR=',num2str(SNR2),

137、9;dB SNR=',num2str(SNR2-SNR1),'dB)']); pause; </p><p>  sound(speech);pause;</p><p>  sound(x);pause;</p><p>  sound(enhanced);</p><p>  % --- Executes on b

138、utton press in pushbutton8.</p><p>  function pushbutton8_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton8 (see GCBO)</p><p>  % eventdata reserved

溫馨提示

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

評論

0/150

提交評論