本书内容分为三部分。第一部分是介绍数字信号处理中的Z变换、离散傅里叶变换DFT和快速傅里叶变换FFT以及数字滤波器,这是数字信号处理的基础,也是初学者问题zui多的部分。在该部分中对于常出现的问题都列举案例说明错误发生的原因和解决的方法。第二部分介绍数字信号处理中常用的一些方法,例如包络、平滑、极值等,又给出对DFT延伸中的一些方法和应用,并给出FFT的内插和谐波参数的估算等。第三部分介绍了功率谱的估算,给出了非参数法和参数法的功率谱估算。各章都结合内容给出相应的案例进行说明。
本书特点是主要通过案例说明在数字信号处理基础部分编程中常出现的错误和解决方法。本书适用于数字信号处理的初学者,亦可供高年级本科生、研究生和科研工程技术人员参考。
第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 线性系统的Z 变换……………………………………………………………………… 5
1.1.5 Z 变换特性…………………………………………………………………………… 5
1.1.6 Z 逆变换……………………………………………………………………………… 6
1.2 DFT的由来……………………………………………………………………………… 9
1.3 DFT的性质…………………………………………………………………………… 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函数…………………………………………… 22
2.1.5 案例2.2:如何经IFFT后得到实数序列……………………………………………… 26
2.1.6 案例2.3:如何使实数序列在时间域上位移后也为实数序列…………………………… 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 频谱分析过程中的混叠现象、栅栏现象和泄漏现象……………………………………… 53
2.2.7 案例2.9:同样经矩形窗截断,为什么有的发生泄漏而有的没有发生泄漏………………… 56
2.2.8 窗函数……………………………………………………………………………… 58
2.2.9 案例2.10:加窗函数后频谱幅值变了,如何修正………………………………………… 61
2.2.10 分辨率……………………………………………………………………………… 63
2.2.11 案例2.11:如何选择采样频率和信号长度…………………………………………… 65
2.2.12 案例2.12:FFT中的补零问题………………………………………………………… 67
2.2.13 快速卷积和快速相关………………………………………………………………… 73
2.2.14 案例2.13:能否用循环相关计算延迟量……………………………………………… 79
参考文献……………………………………………………………………………………… 84
第3章 数字滤波器的设计…………………………………………………………………… 85
3.1 数字滤波器基础………………………………………………………………………… 85
3.1.1 数字滤波器的传递函数……………………………………………………………… 85
3.1.2 数字滤波器的频率响应分析…………………………………………………………… 87
3.1.3 数字滤波器的分类…………………………………………………………………… 88
3.1.4 数字滤波器的构成…………………………………………………………………… 90
3.2 典型模拟低通滤波器…………………………………………………………………… 93
3.2.1 巴特沃斯模拟低通滤波器……………………………………………………………… 93
3.2.2 切比雪夫Ⅰ型和Ⅱ型模拟低通滤波器………………………………………………… 94
3.2.3 椭圆型模拟低通滤波器……………………………………………………………… 96
3.2.4 模拟原型低通滤波器的频率变换……………………………………………………… 97
3.2.5 模拟滤波器设计的MATLAB函数…………………………………………………… 97
3.2.6 案例3.1:巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和椭圆型滤波器的相同和不同之处… 102
3.2.7 案例3.2:设计模拟滤波器的几种编程方法的相同和不同之处………………………… 104
3.2.8 案例3.3:在频带变换的模拟滤波器设计中,怎样计算Wn和Bs ……………………… 105
3.3 利用脉冲响应不变法设计IIR数字滤波器………………………………………… 107
3.3.1 脉冲响应不变法变换原理…………………………………………………………… 107
3.3.2 模拟滤波器的数字化方法…………………………………………………………… 108
3.3.3 混叠失真…………………………………………………………………………… 109
3.3.4 用脉冲响应不变法设计数字滤波器的优缺点………………………………………… 110
3.4 利用双线性变换法设计IIR数字滤波器…………………………………………… 111
3.4.1 双线性变换法的变换原理…………………………………………………………… 111
3.4.2 双线性变换法的优缺点……………………………………………………………… 113
3.4.3 利用双线性变换法设计数字滤波器的步骤…………………………………………… 114
3.5 陷波器与全通滤波器………………………………………………………………… 115
3.5.1 陷波器……………………………………………………………………………… 115
3.5.2 全通滤波器………………………………………………………………………… 116
3.6 IIR数字滤波器设计的MATLAB函数…………………………………………… 118
3.7 IIR滤波器设计的案例……………………………………………………………… 123
3.7.1 案例3.4:用留数求得脉冲不变法数字滤波器与调用impinvar函数得到的是否一样…… 123
3.7.2 案例3.5:在调用bilinear函数时为何有的Fs处用实际频率值,有的却用Fs=1 ……… 125
3.7.3 案例3.6:为什么不能用impinvar函数……………………………………………… 128
3.7.4 案例3.7:为什么滤波器的输出会溢出或没有数值…………………………………… 131
3.7.5 案例3.8:用bilinear函数时,如果Wp和Ws都没有先做预畸会有什么结果…………… 137
3.7.6 案例3.9:如何把任意S系统转换为Z系统…………………………………………… 138
3.7.7 案例3.10:把滤波器的滤波过程用差分方程的运算来完成…………………………… 142
3.7.8 案例3.11:滤波函数filter的调用格式为[y,zf]=filter(b,a,x,zf),其中的zi和zf有何作用
……………………………………………………………………………………… 148
3.7.9 案例3.12:如何使用数字陷波器滤除工频信号………………………………………… 151
3.7.10 案例3.13:如何设计数字全通滤波器对IIR滤波器进行相位补偿…………………… 153
3.7.11 案例3.14:为什么零相位滤波在起始和结束两端都受瞬态效应的影响……………… 154
3.8 线性相位与FIR系统的相位特性…………………………………………………… 158
3.9 FIR型数字滤波器的窗函数设计法………………………………………………… 161
3.9.1 理想数字滤波器的单位脉冲响应…………………………………………………… 162
3.9.2 FIR型数字滤波器的矩形窗设计法…………………………………………………… 162
3.9.3 窗函数设计法……………………………………………………………………… 165
3.10 FIR型数字滤波器的频率采样设计法……………………………………………… 167
3.10.1 预期频率特性的设置方法…………………………………………………………… 167
3.10.2 频率采样法的设计过程…………………………………………………………… 167
3.10.3 频率采样法的改进………………………………………………………………… 168
3.11 最优等波纹FIR滤波器的设计…………………………………………………… 169
3.11.1 最小最大化问题的设计…………………………………………………………… 170
3.11.2 对极值数目的限制………………………………………………………………… 171
3.11.3 Parks-McClellan算法……………………………………………………………… 172
3.12 FIR滤波器设计中的MATLAB函数……………………………………………… 172
3.13 FIR滤波器设计的案例……………………………………………………………… 176
3.13.1 案例3.15:在窗函数法设计FIR中如何选择窗函数和阶数N ………………………… 176
3.13.2 案例3.16:用ideal_lp函数和fir1函数设计的滤波器是否相同……………………… 178
3.13.3 案例3.17:用凯泽窗设计FIR滤波器的优点………………………………………… 181
3.13.4 案例3.18:为什么FIR滤波器不适用于设计数字陷波器……………………………… 183
3.13.5 案例3.19:通过FIR滤波器的输出,延迟量如何校正………………………………… 185
3.13.6 案例3.20:通过fir2函数设计任何响应的FIR滤波器……………………………… 188
3.13.7 案例3.21:通过firpm 函数设计的FIR滤波器为什么达不到指标要求………………… 190
3.13.8 案例3.22:如何设计多频带的FIR滤波器…………………………………………… 194
3.13.9 案例3.23:如何用FIR滤波器设计数字微分器……………………………………… 197
3.13.10 案例3.24:如何用FIR滤波器设计数字希尔伯特变换器…………………………… 198
3.14 用FDATool设计数字滤波器……………………………………………………… 200
3.14.1 IIR滤波器设计…………………………………………………………………… 200
3.14.2 FIR滤波器设计…………………………………………………………………… 209
3.14.3 SOS系数的进一步说明…………………………………………………………… 211
3.14.4 案例3.25:如何把SOS或Hd转变为滤波器的系数………………………………… 212
3.15 用fdesign和design设计数字滤波器……………………………………………… 215
3.15.1 案例3.26:为什么在使用design函数时常会出现“invaliddesignmethod” …………… 222
3.15.2 案例3.27:用fdesign+design的方法与前几节介绍的经典方法设计的滤波器是否相同
…………………………………………………………………………………… 226
3.15.3 案例3.28:用fdesign+design方法有什么优点……………………………………… 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 消除趋势项函数…………………………………………………………………… 244
4.1.2 案例4.1:基线漂移的修正…………………………………………………………… 244
4.2 寻找信号中的峰值和谷值…………………………………………………………… 247
4.2.1 MATLAB中峰谷值检测的函数……………………………………………………… 247
4.2.2 案例4.2:已知一个脉动信号,如何求信号的周期……………………………………… 248
4.2.3案例4.3:如何利用findpeaks函数求谷值……………………………………………… 249
4.2.4 案例4.4:在findpeakm 函数用?q?参数时如何进行内插……………………………… 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 提取信号中的特殊区间……………………………………………………………… 268
4.4.1 寻找特殊区间的MATLAB函数……………………………………………………… 268
4.4.2 案例4.8:如何从一组数据中取得波谷的开始位置和结束位置………………………… 269
4.5 平滑处理……………………………………………………………………………… 272
4.5.1 案例4.9:五点三次平滑法…………………………………………………………… 272
4.5.2 案例4.10:在带噪数据中如何寻找极小值———介绍MATLAB自带的平滑函数smooth
……………………………………………………………………………………… 274
4.5.3 案例4.11:在Savitzky-Golay平滑滤波时如何选择窗长和阶数………………………… 278
4.6 数据的延拓…………………………………………………………………………… 282
4.6.1 自回归模型的基本理论……………………………………………………………… 282
4.6.2 前向预测与后向预测………………………………………………………………… 284
4.6.3 前向预测与后向预测的MATLAB函数……………………………………………… 285
4.6.4 案例4.12:如何消除信号经零相位滤波后两端的瞬态效应…………………………… 287
4.6.5 案例4.13:消除希尔伯特变换的端点效应…………………………………………… 289
参考文献……………………………………………………………………………………… 291
第5章 DFT的拓展………………………………………………………………………… 292
5.1 短时傅里叶变换……………………………………………………………………… 292
5.1.1 短时傅里叶变换和短时傅里叶逆变换………………………………………………… 292
5.1.2 短时傅里叶变换的MATLAB函数…………………………………………………… 293
5.1.3 案例5.1:调用tfrstft函数后用什么方法作STFT的谱图……………………………… 295
5.1.4 案例5.2:如何通过spectrogram 得到一些特定频率的频谱…………………………… 303
5.1.5 案例5.3:能否对信号的STFT谱图再逆变换转成时间序列…………………………… 308
5.2 细化FFT(Zoom-FFT) ……………………………………………………………… 310
5.2.1 经典的复调制频谱细化分析方法…………………………………………………… 310
5.2.2 复解析带通滤波器的复调制频谱细化分析方法……………………………………… 312
5.2.3 细化频谱分析的MATLAB函数……………………………………………………… 316
5.2.4 案例5.4:在函数exzfft_ma中频率刻度是如何计算的………………………………… 318
5.2.5 案例5.5:如何利用细化频谱提取间谐波的频率……………………………………… 321
5.3 线性调频Z 变换(CZT)……………………………………………………………… 322
5.3.1 线性调频Z 变换的原理……………………………………………………………… 322
5.3.2 MATLAB的线性调频Z 变换函数…………………………………………………… 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函数…………………………………… 333
5.4.5 案例5.7:如何产生DTMF编码和如何利用Goertzel算法在带噪DTMF中提取出数值
……………………………………………………………………………………… 334
参考文献……………………………………………………………………………………… 342
笫6章 DFT的内插………………………………………………………………………… 344
笫7章 谐波分析……………………………………………………………………………… 387
第8章 功率谱的估算………………………………………………………………………… 422
附 录 MATLAB函数速查表……………………………………………………………… 474