關(guān)于我們
書單推薦
新書推薦
|
MATLAB數(shù)字信號處理85個實用案例精講:入門到進階 本書內(nèi)容分為三部分。第一部分是介紹數(shù)字信號處理中的Z變換、離散傅里葉變換DFT和快速傅里葉變換FFT以及數(shù)字濾波器,這是數(shù)字信號處理的基礎(chǔ),也是初學者問題zui多的部分。在該部分中對于常出現(xiàn)的問題都列舉案例說明錯誤發(fā)生的原因和解決的方法。第二部分介紹數(shù)字信號處理中常用的一些方法,例如包絡、平滑、極值等,又給出對DFT延伸中的一些方法和應用,并給出FFT的內(nèi)插和諧波參數(shù)的估算等。第三部分介紹了功率譜的估算,給出了非參數(shù)法和參數(shù)法的功率譜估算。各章都結(jié)合內(nèi)容給出相應的案例進行說明。 本書特點是主要通過案例說明在數(shù)字信號處理基礎(chǔ)部分編程中常出現(xiàn)的錯誤和解決方法。本書適用于數(shù)字信號處理的初學者,亦可供高年級本科生、研究生和科研工程技術(shù)人員參考。 在書店和圖書館里,關(guān)于數(shù)字信號處理的書籍很多,MATLAB和數(shù)字信號處理應用方面的書籍也有很多種了,那為什么我還要寫一本有關(guān)MATLAB在數(shù)字信號處理應用方面的書籍呢? 我自本世紀初退休以后總想著還可以做些什么,希望還能發(fā)揮余熱。因為對數(shù)字信號處理和應用一直有著濃厚的興趣,正好那時有位朋友介紹我到論壇上幫助網(wǎng)友解答相關(guān)的問題,從此就走上了這樣一條“不歸路”。這十幾年來我一直在幾個論壇社區(qū)中參與解答各類有關(guān)數(shù)字信號處理的問題,其中在MATLAB中文論壇社區(qū)中待的時間最長。我在這十多年間解答了數(shù)千個問題。在解答問題的過程中,我發(fā)現(xiàn)大多都是基礎(chǔ)性的問題或與數(shù)字信號處理的內(nèi)容有關(guān),或與MATLAB的使用有關(guān),或二者兼有。同學們往往是已經(jīng)學習了數(shù)字信號處理這門課,也學習了MATLAB 編程的課,但在理解和認識上還不到位,所以遇到實戰(zhàn)編程時就會犯這樣或那樣的錯誤;而目前已出版的書籍中鮮有對這些問題或錯誤的處理方法,所以同學們面對出現(xiàn)的錯誤往往不知所措。MATLAB 中文論壇(或其他論壇)正是提供了這樣一個平臺,同學們可以把問題貼在論壇上,由版主或熱心人士來幫忙解決問題。 由于許多具體問題的解決方法在以往出版的書籍中少有涉及,所以我把這十多年來解答的問題總結(jié)成一些案例,整理出版。本書不是純粹地介紹數(shù)字信號處理,也不是純粹地介紹MATLAB,而是針對初學者在使用MATLAB編寫信號處理程序時常犯的錯誤提出解決方法,內(nèi)容既涉及數(shù)字信號處理,也涉及MATLAB編程。 雖然國內(nèi)外科學編程的語言有許多種,但在國內(nèi)還是以MATLAB為主,許多大專院校也都開設學習MATLAB語言的課程。它的主要特點除了編程簡單外,還可以應用于各個學科中,不僅用于自然科學,還能應用于人文科學;同時它還有功能強大的工具箱(由全世界的精英為工具箱做貢獻)。一些基礎(chǔ)性的處理程序都已包含在工具箱中,不需要用戶去從事這方面的開發(fā)工作,這樣就省去了大量的重復性工作。對于用戶來說,只需考慮怎么利用工具箱來實現(xiàn)自己的想法和算法。MATLAB是一種方便、實用、高效的計算機語言。近幾年來又支持代碼轉(zhuǎn)換,可自動生成可讀、可運行、可移植的C/C++代碼,這樣方便用戶在MATLAB平臺上建模仿真,然后移植到硬件中去實現(xiàn)。 本書的內(nèi)容安排如下。 第1章講述Z 變換和離散傅里葉變換,給出Z 變換的定義和基本性質(zhì),它是離散時間信號與系統(tǒng)分析和處理的主要理論工具。另外還介紹了離散傅里葉變換的導出及基本性質(zhì)。 第2章介紹快速傅里葉變換,包括按時間抽選的基2的FFT算法和按頻率抽選的基2的FFT算法。另外還介紹了譜分析和窗函數(shù),給出了譜分析的基本方法。 第3章介紹數(shù)字濾波器的設計,講述了無限長單位脈沖響應(IIR)數(shù)字濾波器的設計方法(包括脈沖響應不變法、雙線性變換法及原型變換)和有限長單位脈沖響應(FIR)數(shù)字濾波器的設計方法(包括窗函數(shù)法、頻率采樣設計法和最優(yōu)等波紋法等),并介紹了利用FDATool及Fdesign+design函數(shù)設計數(shù)字濾波器的方法。 第4章介紹信號處理中一些實用的方法,包括消除趨勢項、極大點和極小點的尋找、包絡提取、數(shù)據(jù)平滑、尋找特殊區(qū)間和數(shù)據(jù)延拓等。 第5章介紹DFT的拓展,包括短時傅里葉變換(STFT)、細化傅里葉變換(ZoomFFT)、線性調(diào)頻Z 變換(CZT)和Goertzel算法。 第6章介紹FFT的內(nèi)插,以狄里克萊核與窗函數(shù)為基礎(chǔ),介紹了比值校正法、能量重心校正法、相位差校正法和全相位校正技術(shù)。 第7章為諧波分析,介紹了單峰譜線插入、雙峰譜線插入和Prony方法。 第8章為功率譜的估算,介紹了非參數(shù)法的功率譜估算(包含相關(guān)圖法、周期圖法和改進周期圖法)、參數(shù)法的功率譜估算(包含最大熵譜法、自相關(guān)法、協(xié)方差法、Burg算法估計法和改進協(xié)方差法等),講述了通用的功率譜估算spectrum 和psd函數(shù),最后介紹了傳遞函數(shù)和相干函數(shù)的估算方法。 本書中經(jīng)常會調(diào)用某些不是MATLAB自帶的函數(shù),但它們已被集中在basic_tbx工具箱中。在運行本書的程序前,建議讀者把該工具箱設置在工作路徑下(用setpath設置)。本書的所有函數(shù)和程序都已在MATLABR2009a上調(diào)試通過。 在本書的寫作過程中,作者得到了北京航空航天大學出版社的陳守平編輯以及MATLAB中文論壇的支持與鼓勵,在此向他們表示最真誠的謝意! 此外,還要感謝我的家人,她們的默默支持和付出,使我能順利完成本書的寫作,在此向我的家人表示最衷心的感謝! 本書為讀者免費提供程序源代碼,以二維碼的形式印在扉頁及序言后,請掃描二維碼下載。讀者也可以通過網(wǎng)址http://pan.baidu.com/s/1jI9D3ls從“百度云”下載全部資料。同時,北京航空航天大學出版社聯(lián)合MATLAB 中文論壇為本書設立了在線交流平臺,網(wǎng)址:http://www.ilovematlab.cn/forum-259-1.html。我們希望借助這個平臺實現(xiàn)與廣大讀者面對面交流,解決大家在閱讀本書過程中遇到的問題,分享彼此的學習經(jīng)驗,從而達到共同進步 的目的。 由于編寫時間倉促,加之作者學識所限,書中如有錯誤或疏漏之處,懇請廣大讀者和各位專家批評指正。本書勘誤網(wǎng)址:http://www.ilovematlab.cn/thread-481275-1-1.html。 作 者 2016年5月 宋知用,曾在中國科學院聲學研究所工作20多年,長期從事電聲信號和數(shù)字信號處理工作。具有十余年的MATLAB編程經(jīng)驗,出版的圖書有《MATLAB數(shù)字信號處理85個實用案例精講——入門到進階》和《MATLAB在語音信號分析和合成中的應用》。過去十余年中,宋知用一直活躍在MATLAB中文論壇及其他科技平臺中,至今已回答并解決各種數(shù)字信號處理問題逾4000個。 第1章 Z 變換和離散傅里葉變換……………………………………………………………… 1 1.1 Z 變換…………………………………………………………………………………… 1 1.1.1 Z 變換的表示式………………………………………………………………………… 1 1.1.2 Z 變換的收斂域………………………………………………………………………… 3 1.1.3 基本Z 變換對………………………………………………………………………… 4 1.1.4 線性系統(tǒng)的Z 變換……………………………………………………………………… 5 1.1.5 Z 變換特性…………………………………………………………………………… 5 1.1.6 Z 逆變換……………………………………………………………………………… 6 1.2 DFT的由來……………………………………………………………………………… 9 1.3 DFT的性質(zhì)…………………………………………………………………………… 13 參考文獻……………………………………………………………………………………… 15 第2章 快速傅里葉變換和頻譜分析………………………………………………………… 16 2.1 快速傅里葉變換(FFT)………………………………………………………………… 16 2.1.1 基2時間抽取FFT算法……………………………………………………………… 17 2.1.2 基2頻率抽取FFT算法……………………………………………………………… 19 2.1.3 快速傅里葉逆變換(IFFT)算法………………………………………………………… 22 2.1.4 案例2.1:快速傅里葉變換的MATLAB函數(shù)…………………………………………… 22 2.1.5 案例2.2:如何經(jīng)IFFT后得到實數(shù)序列……………………………………………… 26 2.1.6 案例2.3:如何使實數(shù)序列在時間域上位移后也為實數(shù)序列…………………………… 31 2.2 離散信號的譜分析……………………………………………………………………… 38 2.2.1 案例2.4:頻譜圖中頻率刻度(橫坐標)的設置………………………………………… 39 2.2.2 案例2.5:如何計算正弦信號的幅值和初始相角………………………………………… 42 2.2.3 案例2.6:怎樣認識一個單頻的正弦信號的相位譜……………………………………… 45 2.2.4 案例2.7:為什么FFT后得到的頻譜大部分都為0 …………………………………… 48 2.2.5 案例2.8:如何把頻譜圖的縱坐標設置為分貝刻度……………………………………… 50 2.2.6 頻譜分析過程中的混疊現(xiàn)象、柵欄現(xiàn)象和泄漏現(xiàn)象……………………………………… 53 2.2.7 案例2.9:同樣經(jīng)矩形窗截斷,為什么有的發(fā)生泄漏而有的沒有發(fā)生泄漏………………… 56 2.2.8 窗函數(shù)……………………………………………………………………………… 58 2.2.9 案例2.10:加窗函數(shù)后頻譜幅值變了,如何修正………………………………………… 61 2.2.10 分辨率……………………………………………………………………………… 63 2.2.11 案例2.11:如何選擇采樣頻率和信號長度…………………………………………… 65 2.2.12 案例2.12:FFT中的補零問題………………………………………………………… 67 2.2.13 快速卷積和快速相關(guān)………………………………………………………………… 73 2.2.14 案例2.13:能否用循環(huán)相關(guān)計算延遲量……………………………………………… 79 參考文獻……………………………………………………………………………………… 84 第3章 數(shù)字濾波器的設計…………………………………………………………………… 85 3.1 數(shù)字濾波器基礎(chǔ)………………………………………………………………………… 85 3.1.1 數(shù)字濾波器的傳遞函數(shù)……………………………………………………………… 85 3.1.2 數(shù)字濾波器的頻率響應分析…………………………………………………………… 87 3.1.3 數(shù)字濾波器的分類…………………………………………………………………… 88 3.1.4 數(shù)字濾波器的構(gòu)成…………………………………………………………………… 90 3.2 典型模擬低通濾波器…………………………………………………………………… 93 3.2.1 巴特沃斯模擬低通濾波器……………………………………………………………… 93 3.2.2 切比雪夫Ⅰ型和Ⅱ型模擬低通濾波器………………………………………………… 94 3.2.3 橢圓型模擬低通濾波器……………………………………………………………… 96 3.2.4 模擬原型低通濾波器的頻率變換……………………………………………………… 97 3.2.5 模擬濾波器設計的MATLAB函數(shù)…………………………………………………… 97 3.2.6 案例3.1:巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和橢圓型濾波器的相同和不同之處… 102 3.2.7 案例3.2:設計模擬濾波器的幾種編程方法的相同和不同之處………………………… 104 3.2.8 案例3.3:在頻帶變換的模擬濾波器設計中,怎樣計算Wn和Bs ……………………… 105 3.3 利用脈沖響應不變法設計IIR數(shù)字濾波器………………………………………… 107 3.3.1 脈沖響應不變法變換原理…………………………………………………………… 107 3.3.2 模擬濾波器的數(shù)字化方法…………………………………………………………… 108 3.3.3 混疊失真…………………………………………………………………………… 109 3.3.4 用脈沖響應不變法設計數(shù)字濾波器的優(yōu)缺點………………………………………… 110 3.4 利用雙線性變換法設計IIR數(shù)字濾波器…………………………………………… 111 3.4.1 雙線性變換法的變換原理…………………………………………………………… 111 3.4.2 雙線性變換法的優(yōu)缺點……………………………………………………………… 113 3.4.3 利用雙線性變換法設計數(shù)字濾波器的步驟…………………………………………… 114 3.5 陷波器與全通濾波器………………………………………………………………… 115 3.5.1 陷波器……………………………………………………………………………… 115 3.5.2 全通濾波器………………………………………………………………………… 116 3.6 IIR數(shù)字濾波器設計的MATLAB函數(shù)…………………………………………… 118 3.7 IIR濾波器設計的案例……………………………………………………………… 123 3.7.1 案例3.4:用留數(shù)求得脈沖不變法數(shù)字濾波器與調(diào)用impinvar函數(shù)得到的是否一樣…… 123 3.7.2 案例3.5:在調(diào)用bilinear函數(shù)時為何有的Fs處用實際頻率值,有的卻用Fs=1 ……… 125 3.7.3 案例3.6:為什么不能用impinvar函數(shù)……………………………………………… 128 3.7.4 案例3.7:為什么濾波器的輸出會溢出或沒有數(shù)值…………………………………… 131 3.7.5 案例3.8:用bilinear函數(shù)時,如果Wp和Ws都沒有先做預畸會有什么結(jié)果…………… 137 3.7.6 案例3.9:如何把任意S系統(tǒng)轉(zhuǎn)換為Z系統(tǒng)…………………………………………… 138 3.7.7 案例3.10:把濾波器的濾波過程用差分方程的運算來完成…………………………… 142 3.7.8 案例3.11:濾波函數(shù)filter的調(diào)用格式為[y,zf]=filter(b,a,x,zf),其中的zi和zf有何作用 ……………………………………………………………………………………… 148 3.7.9 案例3.12:如何使用數(shù)字陷波器濾除工頻信號………………………………………… 151 3.7.10 案例3.13:如何設計數(shù)字全通濾波器對IIR濾波器進行相位補償…………………… 153 3.7.11 案例3.14:為什么零相位濾波在起始和結(jié)束兩端都受瞬態(tài)效應的影響……………… 154 3.8 線性相位與FIR系統(tǒng)的相位特性…………………………………………………… 158 3.9 FIR型數(shù)字濾波器的窗函數(shù)設計法………………………………………………… 161 3.9.1 理想數(shù)字濾波器的單位脈沖響應…………………………………………………… 162 3.9.2 FIR型數(shù)字濾波器的矩形窗設計法…………………………………………………… 162 3.9.3 窗函數(shù)設計法……………………………………………………………………… 165 3.10 FIR型數(shù)字濾波器的頻率采樣設計法……………………………………………… 167 3.10.1 預期頻率特性的設置方法…………………………………………………………… 167 3.10.2 頻率采樣法的設計過程…………………………………………………………… 167 3.10.3 頻率采樣法的改進………………………………………………………………… 168 3.11 最優(yōu)等波紋FIR濾波器的設計…………………………………………………… 169 3.11.1 最小最大化問題的設計…………………………………………………………… 170 3.11.2 對極值數(shù)目的限制………………………………………………………………… 171 3.11.3 Parks-McClellan算法……………………………………………………………… 172 3.12 FIR濾波器設計中的MATLAB函數(shù)……………………………………………… 172 3.13 FIR濾波器設計的案例……………………………………………………………… 176 3.13.1 案例3.15:在窗函數(shù)法設計FIR中如何選擇窗函數(shù)和階數(shù)N ………………………… 176 3.13.2 案例3.16:用ideal_lp函數(shù)和fir1函數(shù)設計的濾波器是否相同……………………… 178 3.13.3 案例3.17:用凱澤窗設計FIR濾波器的優(yōu)點………………………………………… 181 3.13.4 案例3.18:為什么FIR濾波器不適用于設計數(shù)字陷波器……………………………… 183 3.13.5 案例3.19:通過FIR濾波器的輸出,延遲量如何校正………………………………… 185 3.13.6 案例3.20:通過fir2函數(shù)設計任何響應的FIR濾波器……………………………… 188 3.13.7 案例3.21:通過firpm 函數(shù)設計的FIR濾波器為什么達不到指標要求………………… 190 3.13.8 案例3.22:如何設計多頻帶的FIR濾波器…………………………………………… 194 3.13.9 案例3.23:如何用FIR濾波器設計數(shù)字微分器……………………………………… 197 3.13.10 案例3.24:如何用FIR濾波器設計數(shù)字希爾伯特變換器…………………………… 198 3.14 用FDATool設計數(shù)字濾波器……………………………………………………… 200 3.14.1 IIR濾波器設計…………………………………………………………………… 200 3.14.2 FIR濾波器設計…………………………………………………………………… 209 3.14.3 SOS系數(shù)的進一步說明…………………………………………………………… 211 3.14.4 案例3.25:如何把SOS或Hd轉(zhuǎn)變?yōu)闉V波器的系數(shù)………………………………… 212 3.15 用fdesign和design設計數(shù)字濾波器……………………………………………… 215 3.15.1 案例3.26:為什么在使用design函數(shù)時常會出現(xiàn)“invaliddesignmethod” …………… 222 3.15.2 案例3.27:用fdesign+design的方法與前幾節(jié)介紹的經(jīng)典方法設計的濾波器是否相同 …………………………………………………………………………………… 226 3.15.3 案例3.28:用fdesign+design方法有什么優(yōu)點……………………………………… 230 3.16 三分之一倍頻程濾波器……………………………………………………………… 233 3.16.1 案例3.29:以FFT IFFT分析方法求出三分之一倍頻程濾波器各頻帶的聲壓級……… 234 3.16.2 案例3.30:以降采樣方法求出三分之一倍頻程濾波器各頻帶的聲壓級……………… 237 3.16.3 案例3.31:用fdesign+design方法求出三分之一倍頻程濾波器各頻帶的聲壓級……… 240 參考文獻……………………………………………………………………………………… 242 第4章 信號處理中簡單實用的方法………………………………………………………… 243 4.1 最小二乘法擬合消除趨勢項………………………………………………………… 243 4.1.1 消除趨勢項函數(shù)…………………………………………………………………… 244 4.1.2 案例4.1:基線漂移的修正…………………………………………………………… 244 4.2 尋找信號中的峰值和谷值…………………………………………………………… 247 4.2.1 MATLAB中峰谷值檢測的函數(shù)……………………………………………………… 247 4.2.2 案例4.2:已知一個脈動信號,如何求信號的周期……………………………………… 248 4.2.3案例4.3:如何利用findpeaks函數(shù)求谷值……………………………………………… 249 4.2.4 案例4.4:在findpeakm 函數(shù)用?q?參數(shù)時如何進行內(nèi)插……………………………… 251 4.3 信號中包絡的提取…………………………………………………………………… 256 4.3.1 希爾伯特變換……………………………………………………………………… 256 4.3.2 案例4.5:用希爾伯特變換計算信號的包絡…………………………………………… 259 4.3.3 案例4.6:用求極大值和極小值的方法來計算信號的包絡線…………………………… 262 4.3.4 案例4.7:用倒譜法來計算語音信號頻譜的包絡線…………………………………… 266 4.4 提取信號中的特殊區(qū)間……………………………………………………………… 268 4.4.1 尋找特殊區(qū)間的MATLAB函數(shù)……………………………………………………… 268 4.4.2 案例4.8:如何從一組數(shù)據(jù)中取得波谷的開始位置和結(jié)束位置………………………… 269 4.5 平滑處理……………………………………………………………………………… 272 4.5.1 案例4.9:五點三次平滑法…………………………………………………………… 272 4.5.2 案例4.10:在帶噪數(shù)據(jù)中如何尋找極小值———介紹MATLAB自帶的平滑函數(shù)smooth ……………………………………………………………………………………… 274 4.5.3 案例4.11:在Savitzky-Golay平滑濾波時如何選擇窗長和階數(shù)………………………… 278 4.6 數(shù)據(jù)的延拓…………………………………………………………………………… 282 4.6.1 自回歸模型的基本理論……………………………………………………………… 282 4.6.2 前向預測與后向預測………………………………………………………………… 284 4.6.3 前向預測與后向預測的MATLAB函數(shù)……………………………………………… 285 4.6.4 案例4.12:如何消除信號經(jīng)零相位濾波后兩端的瞬態(tài)效應…………………………… 287 4.6.5 案例4.13:消除希爾伯特變換的端點效應…………………………………………… 289 參考文獻……………………………………………………………………………………… 291 第5章 DFT的拓展………………………………………………………………………… 292 5.1 短時傅里葉變換……………………………………………………………………… 292 5.1.1 短時傅里葉變換和短時傅里葉逆變換………………………………………………… 292 5.1.2 短時傅里葉變換的MATLAB函數(shù)…………………………………………………… 293 5.1.3 案例5.1:調(diào)用tfrstft函數(shù)后用什么方法作STFT的譜圖……………………………… 295 5.1.4 案例5.2:如何通過spectrogram 得到一些特定頻率的頻譜…………………………… 303 5.1.5 案例5.3:能否對信號的STFT譜圖再逆變換轉(zhuǎn)成時間序列…………………………… 308 5.2 細化FFT(Zoom-FFT) ……………………………………………………………… 310 5.2.1 經(jīng)典的復調(diào)制頻譜細化分析方法…………………………………………………… 310 5.2.2 復解析帶通濾波器的復調(diào)制頻譜細化分析方法……………………………………… 312 5.2.3 細化頻譜分析的MATLAB函數(shù)……………………………………………………… 316 5.2.4 案例5.4:在函數(shù)exzfft_ma中頻率刻度是如何計算的………………………………… 318 5.2.5 案例5.5:如何利用細化頻譜提取間諧波的頻率……………………………………… 321 5.3 線性調(diào)頻Z 變換(CZT)……………………………………………………………… 322 5.3.1 線性調(diào)頻Z 變換的原理……………………………………………………………… 322 5.3.2 MATLAB的線性調(diào)頻Z 變換函數(shù)…………………………………………………… 324 5.3.3 案例5.6:CZT能細化頻譜嗎………………………………………………………… 324 5.4 Goertzel算法………………………………………………………………………… 329 5.4.1 Goertzel算法簡介…………………………………………………………………… 329 5.4.2 DTMF信號簡介…………………………………………………………………… 331 5.4.3 Goertzel算法對DTMF的應用……………………………………………………… 332 5.4.4 Goertzel算法和DTMF編解碼的MATLAB函數(shù)…………………………………… 333 5.4.5 案例5.7:如何產(chǎn)生DTMF編碼和如何利用Goertzel算法在帶噪DTMF中提取出數(shù)值 ……………………………………………………………………………………… 334 參考文獻……………………………………………………………………………………… 342 笫6章 DFT的內(nèi)插………………………………………………………………………… 344 笫7章 諧波分析……………………………………………………………………………… 387 第8章 功率譜的估算………………………………………………………………………… 422 附 錄 MATLAB函數(shù)速查表……………………………………………………………… 474
你還可能感興趣
我要評論
|