Matlab 信号处理工具箱谱估计专题 频谱分析Spectral estimation〔谱估计〕的目标是基于一个有限的数据集合描述一个信号的功率〔在频率上的〕分布.功率谱估计在很多场合下都是有用的,包括对宽带噪声湮没下的信号的检测.从数学上看,一个平稳随机过程的power spectrum〔功率谱〕和correlation sequence〔相关序列〕通过discrete-time Fourier transform〔离散时间傅立叶变换〕构成联系.从normalized frequency〔归一化角频率〕角度看,有下式注:,其中.其matlab近似为X=fft/sqrt,在下文中就是指matlab fft函数的计算结果了使用关系可以写成物理频率的函数,其中是采样频率相关序列可以从功率谱用IDFT变换求得:序列在整个Nyquist间隔上的平均功率可以表示为上式中的以与被定义为平稳随机信号的power spectral density 〔功率谱密度〕一个信号在频带上的平均功率可以通过对PSD在频带上积分求出从上式中可以看出是一个信号在一个无穷小频带上的功率浓度,这也是为什么它叫做功率谱密度.PSD的单位是功率〔e.g 瓦特〕每单位频率.在的情况下,这是瓦特/弧度/抽或只是瓦特/弧度.在的情况下单位是瓦特/赫兹.PSD对频率的积分得到的单位是瓦特,正如平均功率所期望的那样.对实信号,PSD是关于直流信号对称的,所以的就足够完整的描述PSD了.然而要获得整个Nyquist间隔上的平均功率,有必要引入单边PSD的概念:信号在频带上的平均功率可以用单边PSD求出频谱估计方法Matlab 信号处理工具箱提供了三种方法PSD直接从信号本身估计出来.最简单的就是periodogram〔周期图法〕,一种改进的周期图法是Welch's method.更现代的一种方法是multitaper method〔多椎体法〕.Parametric methods 〔参量类方法〕这类方法是假设信号是一个由白噪声驱动的线性系统的输出.这类方法的例子是Yule-Walker autoregressive method和Burg method.这些方法先估计假设的产生信号的线性系统的参数.这些方法想要对可用数据相对较少的情况产生优于传统非参数方法的结果.Subspace methods 〔子空间类〕又称为high-resolution methods〔高分辨率法〕或者super-resolution methods〔超分辨率方法〕基于对自相关矩阵的特征分析或者特征值分解产生信号的频率分量.代表方法有multiple signal classification method或eigenvector method.这类方法对线谱〔正弦信号的谱〕最合适,对检测噪声下的正弦信号很有效,特别是低信噪比的情况.Nonparametric Methods非参数法下面讨论periodogram, modified periodogram, Welch, 和 multitaper法.同时也讨论CPSD函数,传输函数估计和相关函数.Periodogram周期图法一个估计功率谱的简单方法是直接求随机过程抽样的DFT,然后取结果的幅度的平方.这样的方法叫做周期图法.一个长L的信号的PSD的周期图估计是注:这里运用的是matlab里面的fft的定义不带归一化系数Matlab FFT函数未做归一化,所以要除以L其中实际对的计算可以只在有限的频率点上执行并且使用FFT.实践上大多数周期图法的应用都计算N点PSD估计,其中选择N是大于L的下一个2的幂次是明智的,要计算我们直接对补零到长度为N.假如L>N,在计算前,我们必须绕回模N.作为一个例子,考虑下面1001元素信号,它包含了2个正弦信号和噪声randn<'state',0>;fs = 1000; % Sampling frequencyt = <0:fs>/fs; % One second worth of samplesA = [1 2]; % Sinusoid amplitudes f = [150;140]; % Sinusoid frequencies xn = A*sin<2*pi*f*t> + 0.1*randn>;注意:最后三行表明了一个方便的表示正弦之和的方法,它等价于:xn = sin<2*pi*150*t> + 2*sin<2*pi*140*t> + 0.1*randn>;对这个PSD的周期图估计可以通过产生一个周期图对象〔periodogram object〕来计算Hs = spectrum.periodogram<'Hamming'>;估计的图形可以用psd函数显示.psd平均功率通过用下述求和去近似积分 求得[P##,F] = psd;Pow = > * sumPow =2.5059你还可以用单边PSD去计算平均功率[P##o,F] = psd;Pow = >> * sumPow = 2.5011周期图性能下面从四个角度讨论周期图法估计的性能:泄漏,分辨率,偏差和方差.频谱泄漏考虑有限长信号,把它表示成无限长序列乘以一个有限长矩形窗的乘积的形式经常很有用:因为时域的乘积等效于频域的卷积,所以上式的傅立叶变换是前文中导出的表达式说明卷积对周期图有影响.正弦数据的卷积影响最容易理解.假设是M个复正弦的和其频谱是对一个有限长序列,就变成了所以在有限长信号的频谱中,Dirac函数被替换成了形式为的项,该项对应于矩形窗的中心在的频率响应.一个矩形窗的频率响应形状是一个sinc信号,如下所示该图显示了一个主瓣和若干旁瓣,最大旁瓣大约在主瓣下方13.5dB处.这些旁瓣说明了频谱泄漏效应.无限长信号的功率严格的集中在离散频率点处,而有限长信号在离散频率点附近有连续的功率.因为矩形窗越短,它的频率响应对Dirac冲击的近似性越差,所以数据越短它的频谱泄漏越明显.考虑下面的100个采样的序列randn<'state',0>fs = 1000; % Sampling frequencyt = <0:fs/10>/fs; % One-tenth of a second worth of samplesA = [1 2]; % Sinusoid amplitudesf = [150;140]; % Sinusoid frequenciesxn = A*sin<2*pi*f*t> + 0.1*randn>;Hs = spectrum.periodogram;psd注意到频谱泄露只视数据长度而定.周期图确实只对有限数据样本进行计算,但是这和频谱泄露无关.分辨率分辨率指的是区分频谱特征的能力,是分析谱估计性能的关键概念.要区分两个在频率上离得很近的正弦,要求两个频率差大于任何一个信号泄漏频谱的主瓣宽度.主瓣宽度定义为主瓣上峰值功率一半的点间的距离〔3dB带宽〕.该宽度近似等于两个频率为的正弦信号,可分辨条件是上例中频率间隔10Hz,数据长度要大于100抽才能使得周期图中两个频率可分辨.下图是只有67个数据长度的情况randn<'state',0>fs = 1000; % Sampling frequencyt = <0:fs/15>./fs; % 67 samplesA = [1 2]; % Sinusoid amplitudesf = [150;140]; % Sinusoid frequenciesxn = A*sin<2*pi*f*t> + 0.1*randn>;Hs=spectrum.periodogram;psd上述对分辨率的讨论都是在高信噪比的情况进行的,因此没有考虑噪声.当信噪比低的时候,谱特征的分辨更难,而且周期图上会出现一些噪声的伪像,如下所示randn<'state',0>fs = 1000; % Sampling frequencyt = <0:fs/10>./fs; % One-tenth of a second worth of samplesA = [1 2]; % Sinusoid amplitudesf = [150;140]; % Sinusoid frequenciesxn = A*sin<2*pi*f*t> + 2*randn>;Hs=spectrum.periodogram;psd估计偏差周期图是对PSD的有偏估计.期望值可以是该式和频谱泄漏中的式相似,除了这里的表达式用的是平均功率而不是幅度.这暗示了周期图产生的估计对应于一个有泄漏的PSD而非真正的PSD.注意本质上是一个三角Bartlett窗〔事实是两个矩形脉冲的卷积是三角脉冲.〕这导致了最大旁瓣峰值比主瓣峰值低27dB,大致是非平方矩形窗的2倍.周期图估计是渐进无偏的.这从早期的一个观察结果可以明显看出,随着记录数据趋于无穷大,矩形窗对频谱对Dirac函数的近似也就越来越好.然而在某些情况下,周期图法估计很差劲即使数据够长,这是因为周期图法的方差,如下所述.周期图法的方差L趋于无穷大,方差也不趋于0.用统计学术语讲,该估计不是无偏估计.然而周期图在信噪比大的时候仍然是有用的谱估计器,特别是数据够长.Modified Periodogram修正周期图法在fft前先加窗,平滑数据的边缘.可以降低旁瓣的高度.旁瓣是使用矩形窗产生的陡峭的剪切引入的寄生频率,对于非矩形窗,结束点衰减的平滑,所以引入较小的寄生频率.但是,非矩形窗增宽了主瓣,因此降低了频谱分辨率.函数periodogram允许指定对数据加的窗,例如默认的矩形窗和Hamming窗randn<'state',0>fs = 1000; % Sampling frequencyt = <0:fs/10>./fs; % One-tenth of a second worth of samplesA = [1 2]; % Sinusoid amplitudesf = [150;140]; % Sinusoid frequenciesxn = A*sin<2*pi*f*t> + 0.1*randn>;Hrect = spectrum.periodogram;psd;Hhamm = spectrum。