語音信號處理是數(shù)字信號處理的一個重要分支。本書含有許多數(shù)字信號處理的方法和 MATLAB函數(shù)。 全書共10章。第1~4章介紹語音信號處理的一些基本分析方法和手段,以及相應(yīng)的MATLAB函數(shù);第5~ 9章介紹語音信號預(yù)處理和特征的提取,包括消除趨勢項和基本的減噪方法,以及端點檢測、基音的提取和共 振峰的提取,并利用語音信號處理的基本方法,給出了多種提取方法和相應(yīng)的 MATLAB程序;第10章結(jié)合 各種參數(shù)的檢測介紹了語音信號的合成、語音信號的變速和變調(diào)處理,還介紹了時域基音同步疊加( TD PSOLA)的語音合成,并給出了相應(yīng)的MATLAB程序。附錄A中給出了調(diào)試復(fù)雜程序的方法和思路。
本書可作為從事語音信號處理的本科高年級學(xué)生、研究生或科研工程技術(shù)人員的輔助讀物,也可作為從 事信號處理研究與應(yīng)用的科研工程技術(shù)人員的參考用書。
前 言
我與計算機打交道已有40多年。在20世紀70年代初開始接觸計算機,最早使用的是晶體管的108乙機,用5孔電報紙帶上機,用機器語言編程,調(diào)試一個小程序可能需要數(shù)周甚至數(shù)月。隨著技術(shù)的發(fā)展,我曾使用過Nova1200、z80、Intel8086 / 80286 / 80386等,而編程使用的計算機語言也從匯編到BASIC、FORTRAN 等。數(shù)字信號處理最基礎(chǔ)的是快速傅里葉變換和數(shù)字濾波器,但在不同的機種用不同的編程語言都需要編制相應(yīng)的基礎(chǔ)性處理程序,這些都極其耗費時間和精力。
21世紀初我偶然接觸到MATLAB語言,立刻被它的功能所吸引。MATLAB除了編程簡單外,還有強大的工具箱(全世界的精英都為工具箱做貢獻)。一些基礎(chǔ)性的處理程序都已包含在工具箱中,不需要用戶去從事這方面的開發(fā)工作,這樣節(jié)省了大量的重復(fù)性的工作。對于用戶來說,只須考慮怎樣利用工具箱來實現(xiàn)自己的想法和算法。MATLAB的程序大部分不需要編譯、鏈接等一套煩瑣的過程,輸入程序后就能運行。MATLAB是一種方便、實用、高效的計算機語言。
互聯(lián)網(wǎng)的發(fā)展形成了很多以MATLAB為基礎(chǔ)的科技討論社區(qū)。在這些論壇社區(qū)里集中了來自社會各界和高校各學(xué)科各專業(yè)的MATLAB使用者、愛好者。我從2002年開始在國內(nèi)一些成立較早的論壇社區(qū)如研學(xué)論壇和振動論壇等的信號處理版塊中參與各類問題的解答。MATLAB中文論壇成立后,同樣在信號處理版塊經(jīng)常與各種程度的MATLAB使用者打交道,解答使用者通常會遇到的一些問題。我發(fā)現(xiàn)在對語音信號進行處理的過程中,有好多用戶對于怎么把MATLAB應(yīng)用于語音處理不甚熟悉,這些因素促使我萌生了編寫本書的想法。
運用MATLAB處理語音信號至少需要掌握三方面的知識:語音信號處理的基礎(chǔ)理論、數(shù)字信號處理的基礎(chǔ)理論和MATLAB的編程技術(shù)。本書的目的是幫助本科高年級學(xué)生和碩士研究生盡快掌握怎么把MATALB應(yīng)用于語音信號的分析和合成中去,因此書中介紹了語音信號處理的基礎(chǔ)知識,介紹了語音分析和合成的基本方法,以及相應(yīng)的MATLAB函數(shù)和程序,讀者以這些方法、函數(shù)和程序為基礎(chǔ),進一步去解決自己的問題,可少走一些彎路。書中介紹的各種方法都還有繼續(xù)改善和拓展的空間,使它們更加完善,取得更好的效果。本書也適合于從事數(shù)字信號處理的廣大高校師生和科研工作人員作為參考用書。但閱讀本書的讀者應(yīng)掌握數(shù)字信號處理的基本知識,以及MATLAB編程的基本技能。
本書介紹語音信號分析和合成處理的基礎(chǔ)、原理、方法和應(yīng)用。全書共10章,具體內(nèi)容如下:
第1章介紹語音信號處理的基礎(chǔ)知識,如發(fā)音器官與聽覺器官、語音信號的數(shù)學(xué)模型和語音信號感知特性等。
第2章和第3章介紹語音信號特征分析的基本處理技術(shù),包括時域分析、頻域分析、同態(tài)分析、DCT和MFCC分析、小波和小波包變換的分析以及EMD分析等方法。
第4章介紹線性預(yù)測分析方法。介紹了線性預(yù)測的模型、方程的建立、線性預(yù)測的自相關(guān)和自協(xié)方差解、線性預(yù)測的格型法解、由線性預(yù)測導(dǎo)出的其他參數(shù)和線譜對分析法等。
第5章介紹了帶噪語音信號及預(yù)處理。介紹了信噪比的概念和帶噪語音信號的產(chǎn)生,以及最小二乘法消除趨勢項和數(shù)字濾波等。
第6章介紹語音端點的檢測方法。首先從能量和過零率導(dǎo)出通用的雙門限單參數(shù)和雙參數(shù)的端點檢測,接著介紹相關(guān)法、方差法、譜距離法、譜熵法、能零比和能熵比法、小波變換和EMD分解法等的端點檢測,最后給出在低信噪比下端點檢測的方法。
第7章介紹語音信號的減噪。介紹了利用自適應(yīng)濾波器減噪、基本譜減法和改進譜減法的減噪,以及維納濾波減噪等方法。
第8章介紹語音信號的基音檢測技術(shù)。首先介紹了在基音檢測中的端點檢測和預(yù)濾波,接著分別介紹了倒譜法、自相關(guān)法、平均幅度差函數(shù)法和線性預(yù)測等方法的基音檢測。這些方法中雖在基音檢測后都進行了平滑處理,但在基音周期中都會有野點發(fā)生。這里提出了主體延伸的基音檢測方法,并詳細說明了該方法的原理和處理步驟,改善了基音檢測的結(jié)果。本章的最后介紹了帶噪語音的基音檢測技術(shù)。
第9章介紹語音的共振峰檢測。首先介紹了在共振峰檢測中的預(yù)加重和端點檢測,接著介紹了倒譜法和線性預(yù)測法的共振峰檢測,并在線性預(yù)測的基礎(chǔ)上進一步介紹了簡單LPC和改進的LPC對連續(xù)語音的共振峰檢測。本章最后介紹了HHT法的共振峰檢測。
第10章介紹語音信號的合成算法。首先介紹了數(shù)據(jù)接疊的三種方法,在此基礎(chǔ)上介紹了頻譜參數(shù)的語音合成、線性預(yù)測系數(shù)和預(yù)測誤差的語音合成、線性預(yù)測系數(shù)和基音參數(shù)的語音合成、基音和共振峰的語音合成。通過合成技術(shù)又介紹了語音信號的變速和變調(diào)算法,最后介紹了波形拼接合成技術(shù)以及時域基音同步疊加(TD PSOLA)的合成方法。
在附錄A 中以主體延伸基音檢測法為例,說明了程序的調(diào)試和修改方法,以幫助讀者調(diào)試和修改程序使之成為適合自己的應(yīng)用函數(shù)和程序。
本書中除第1章外的各章均附有函數(shù)和程序。書中經(jīng)常會調(diào)用的一些函數(shù)(自編函數(shù)或取自其他應(yīng)用工具箱中的函數(shù)),已集中在basic_tbx工具箱中,在運行本書的程序前請把該工具箱設(shè)置(用set path設(shè)置)在工作路徑下。當要運行EMD處理時,要把emd工具箱設(shè)置在工作路徑下;當要運行主體延伸基音檢測時,要把Pitch_ztlib工具箱設(shè)置在工作路徑下;當要進行時域基音同步疊加語音合成時,要把psola_lib工具箱設(shè)置在工作路徑下;當要應(yīng)用本書提供的語音數(shù)據(jù)時,最好把speech_signal設(shè)置在工作路徑下。本書的所有函數(shù)和程序都在MATLAB R2009a版本下調(diào)試通過。
本書的讀者作者在線交流平臺為http://www.ilovematlab.cn/forum
173 1.html。本書作者將通過該平臺與廣大讀者交流,解決大家在閱讀本書過程中遇到的問題,分享彼此的學(xué)習(xí)經(jīng)驗,從而達到共同進步的目的。
在編寫本書的過程中,作者得到了MATLAB中文論壇創(chuàng)始人張延亮(math)博士的指導(dǎo)和幫助,也得到了北京航空航天大學(xué)出版社陳守平編輯的支持與鼓勵,中國語音學(xué)會會長、中國社會科學(xué)院人類學(xué)與民族學(xué)研究所鮑懷翹教授對本書的編寫提出了不少寶貴意見,在此向他們表示衷心的感謝。
由于編寫時間倉促,加之作者學(xué)識所限,書中如有錯誤和疏漏之處,懇請廣大讀者和各位專家批評指正。
宋知用 曾在中國科學(xué)院聲學(xué)研究所工作20多年,長期從事電聲信號和數(shù)字信號處理工作。具有十余年的MATLAB編程經(jīng)驗,出版的圖書有《MATLAB數(shù)字信號處理85個實用案例精講入門到進階》和《MATLAB在語音信號分析和合成中的應(yīng)用》。過去十余年中,宋知用一直活躍在MATLAB中文論壇及其他科技平臺中,至今已回答并解決各種數(shù)字信號處理問題逾4500個。