功率谱估计是一种对信号的功率谱密度进行估计的方法,用于表征信号的能量特征随频率的变化关系,是信号处理领域的常用分析方法。具体可以分为三类:
主要分为四章介绍功率谱估计,本章对功率谱估计的基本定义即自相关估计及直接法估计进行描述。
对于随机过程 x ( t ) \mathrm{x}(\mathrm{t}) x(t),定义其自相关函数为 R X ( t , s ) = E ( x ( t ) x ( s ) ) R_{\mathrm{X}}(t, s)=E(x(t) x(s)) RX(t,s)=E(x(t)x(s)),基于自相关的功率谱估计的定义是自相关函数的傅里叶变换,即
S x ( ω ) = ∫ − ∞ + ∞ R x ( u ) exp ( − j ω u ) d u S_{x}(\omega)=\int_{-\infty}^{+\infty} R_{x}(u) \exp (-j \omega u) d u Sx(ω)=∫−∞+∞Rx(u)exp(−jωu)du
其中 S X ( ω ) S_{\mathrm{X}}(\omega) SX(ω)代表功率谱。对于一个确定信号(周期信号或者非周期信号),傅里叶变换的积分是绝对收敛的,因此可以直接做傅里叶变换进行分析。但是对于随机信号,一般随机信号是宽平稳的,导致其与绝对可积矛盾,傅里叶积分发散,因此牺牲掉相位改为有限区间取模求平方运算而得,如下所示。
X ( ω ) = 1 T E ∣ ∫ − T 2 T 2 X ( t ) exp ( − j ω t ) d t ∣ 2 = 1 T E ( ∫ − T 2 T 2 X ( t ) exp ( − j ω t ) d t ) ( ∫ − T 2 T 2 X ( s ) exp ( − j ω s ) d s ) X(\omega)=\frac{1}{T} E\left|\int_{-\frac{T}{2}}^{\frac{T}{2}} X(t) \exp (-j \omega t) d t\right|^{2}=\frac{1}{T} E\left(\int_{-\frac{T}{2}}^{\frac{T}{2}} X(t) \exp (-j \omega t) d t\right)\left(\int_{-\frac{T}{2}}^{\frac{T}{2}} X(s) \exp (-j \omega s) d s\right) X(ω)=T1E∣∣∣∣∣∫−2T2TX(t)exp(−jωt)dt∣∣∣∣∣2=T1E(∫−2T2TX(t)exp(−jωt)dt)(∫−2T2TX(s)exp(−jωs)ds)
进而换算可得
X ( ω ) = 1 T ∫ − T 2 T 2 ∫ − T 2 T 2 E ( x ( t ) X ( s ) ‾ ) exp ( − j ω ( t − s ) ) d t d s X(\omega)=\frac{1}{T} \int_{-\frac{T}{2}}^{\frac{T}{2}} \int_{-\frac{T}{2}}^{\frac{T}{2}} E(x(t) \overline{X(s)}) \exp (-j \omega(t-s)) d t d s X(ω)=T1∫−2T2T∫−2T2TE(x(t)X(s))exp(−jω(t−s))dtds
因此相关函数和功率谱密度构成一对傅里叶变换对,即
{ S X ( ω ) = ∫ − ∞ ∞ R X ( I ) exp ( − j ω t ) d τ R X ( I ) = 1 2 π ∫ − ∞ ∞ S X ( ω ) exp ( j ω τ ) d τ \left\{\begin{array}{l}{S_{X}(\omega)=\int_{-\infty}^{\infty} R_{X}(I) \exp (-j \omega t) d \tau} \\ {R_{X}(I)=\frac{1}{2 \pi} \int_{-\infty}^{\infty} S_{X}(\omega) \exp (j \omega \tau) d \tau}\end{array}\right. {SX(ω)=∫−∞∞RX(I)exp(−jωt)dτRX(I)=2π1∫−∞∞SX(ω)exp(jωτ)dτ
以上是针对数据无限长且连续的情况,但是实际情况下数据是离散且有限的,因此所以在面对相关函数的时候就存在问题。对于离散信号,相关函数为 R x ( k ) = ∑ i = − ∞ + ∞ X i + k X i \mathrm{R}_{\mathrm{x}}(k)=\sum_{i=-\infty}^{+\infty} X_{i+k} X_{i} Rx(k)=∑i=−∞+∞Xi+kXi,由于是有限长的,因此当k大时就没有值,无意义。因为这个不是无偏估计,有误差,因此对离散有限信号的相关函数进行修改为
R ^ X ( k ) = ∑ i = 1 N − k X i + k X i N − k \hat{R}_{X}(k)=\frac{\sum_{i=1}^{N-k} X_{i+k} X_{i}}{N-k} R^X(k)=N−k∑i=1N−kXi+kXi
这个估计是具有无偏性的,因此根据功率谱和相关函数是具备傅里叶变换的关系进行计算,可以得到估计的功率谱有两式,1式为
S ^ X ( ω ) = ∑ k = − ( N − 1 ) N − 1 R ^ X ( k ) exp ( − j ω k ) \hat{S}_{X}(\omega)=\sum_{k=-(N-1)}^{N-1} \hat{R}_{X}(k) \exp (-j \omega k) S^X(ω)=k=−(N−1)∑N−1R^X(k)exp(−jωk)
其中 R ^ X ( k ) = 1 N − k ∑ i = 1 N − k X i + k X i \hat{R}_{X}(k)=\frac{1}{N-k} \sum_{i=1}^{N-k} X_{i+k} X_{i} R^X(k)=N−k1∑i=1N−kXi+kXi
2式为
S ^ X ( ω ) = ∑ k = − ( N − 1 ) N − 1 ( 1 N ∑ i = k + 1 N X i X i − k ∗ ) exp ( − j ω k ) \hat{S}_{X}(\omega)=\sum_{k=-(N-1)}^{N-1}\left(\frac{1}{N} \sum_{i=k+1}^{N} X_{i} X_{i-k}^{*}\right) \exp (-j \omega k) S^X(ω)=k=−(N−1)∑N−1(N1i=k+1∑NXiXi−k∗)exp(−jωk)
这两个在于归一化因子不同,2式相较于1式增大偏差减小方差,并且2式的功率谱一定为正,1式不一定为正,因此用2式进行分析。
那么对2式取期望获得功率谱密度为
S X ( ω ) = ∑ k = − ( N − 1 ) N − 1 ( N − ∣ k ∣ N ) R X ( k ) exp ( − j ω k ) S_{X}(\omega)=\sum_{k=-(N-1)}^{N-1}\left(\frac{N-|k|}{N}\right) R_{X}(k) \exp (-j \omega k) SX(ω)=k=−(N−1)∑N−1(NN−∣k∣)RX(k)exp(−jωk)
理想的功率谱密度为
S X ( ω ) = ∑ k = − ∞ K = + ∞ R X ( k ) exp ( − j ω k ) S_{X}(\omega)=\sum_{k=-\infty}^{K=+\infty} R_{X}(k) \exp (-j \omega k) SX(ω)=k=−∞∑K=+∞RX(k)exp(−jωk)
相当于是在无限域上加了个三角窗 1 − ∣ K ∣ N 1-\frac{\vert{K}\vert}{N} 1−N∣K∣
一共有两个面临的问题:
因为加窗的问题会产生分辨率变低,频谱泄露的问题(频带主瓣宽->分辨率低,频谱泄露是固定频率周围有抖动,比如30Hz正弦信号在FFT的30Hz附近有明显的波峰旁瓣,分去了主瓣的能量),如下图所示,如果数据长度越趋近无限,则分辨率越好,中间部分越来越窄,泄露越少。
但是当数据长度越长的时候,功率谱的均值越来越趋向于固定值(准确),比如白噪声越来越趋向于delta,而方差则始终不趋向于0,因为高斯白噪声均值为0方差为 δ 2 \delta^{2} δ2,彼此相关函数为 E ( X i X j ) = δ i j \mathrm{E}(\mathrm{XiXj})=\delta \mathrm{ij} E(XiXj)=δij。因此对高斯白噪声做功率谱分析的时候理论上是一个直线,但是实际上由于方差的原因会存在剧烈抖动。可见实验部分。
换句话说,这是因为估计的功率谱公式用瞬时值代替了均值,这是根本原因,因此在应用过程中需要对期望和方差做trade off。
本章主要对直接法这种改进方法进行描述
周期图法在matlab中使用periodogram函数,其原理是将随机信号 X N X_{N} XN的N个点观察数据视为能量有限的信号,直接进行傅里叶变换,然后再取其幅值的平方,并除以长度N,公式如下所示:
P ^ P E R ( ω ) = 1 N ∣ X N ( ω ) ∣ 2 \widehat{P}_{P E R}(\omega)=\frac{1}{N}\left|X_{N}(\omega)\right|^{2} P PER(ω)=N1∣XN(ω)∣2
其实并未解决关键的期望和方差的tradeoff问题,它的做法是将x输入信号分段时允许重叠求功率谱后再进行平均,即分帧平移的做法。Matlab调用函数为
[Pxx,f]=pwelch(x,window,noverlap,nfft,fs)
本节主要有两个实验。
本实验主要对白噪声的功率谱进行测试,用周期图法测试功率谱的准确性与信号长度的关系,实际中是否有信号越长功率谱越稳定这个关系,在Matlab软件中用如下代码运行即可
clc;clear;close all;
% 实验一:白噪声功率谱验证实验
N1 = 512;%取长度512的数据
N2 = 1024;
N3 = 2048;
figure;
subplot(3,1,1);plot(abs(fft(randn(1,N1))).^2/N1);axis tight;
subplot(3,1,2);plot(abs(fft(randn(1,N2))).^2/N2);axis tight;
subplot(3,1,3);plot(abs(fft(randn(1,N3))).^2/N3);axis tight;
代码运行结果为
可见当数据长度变长时,功率谱估计仍旧存在抖动,即均值越来越准,但方差始终不趋于零,也就是对于常用的功率谱估计方法窗口长度越长仍然存在方差即抖动。
输入信号为
X ( n ) = c o s ( 80 π n ) + 3 c o s ( 180 π n ) + v X(n) = cos(80\pi n)+3cos(180\pi n)+v X(n)=cos(80πn)+3cos(180πn)+v
其中v为高斯白噪声,在Matlab中使用randn
函数生成,代码为
clc;clear;close all;
% 实验二:功率谱性能对比实验
Fs = 500;n = 0:1/Fs:1;
xn = cos(2*pi*40*n)+3*cos(2*pi*90*n)+randn(size(n));%固有频率 40Hz 90Hz
时域波形图为
相关信息法、周期图法、Pwelch法的功率谱估计部分代码为
%经典谱估计,自相关函数的傅里叶变换即为功率谱
nfft = 512;cxn = xcorr(xn,'unbiased')/length(xn);CXk = fft(cxn,nfft);
Pxx = abs(CXk);index = 0:round(nfft/2-1);
k = index*Fs/nfft;% 横轴坐标
plot_Pxx = 10*log10(Pxx(index+1));
%周期图谱估计
window = boxcar(length(xn));%矩形窗
[Pxx,f] = periodogram(xn,window,nfft,Fs);
% welch法谱估计
window1 = hamming(100);%海明窗
noverlap = 20;%步长20
range = 'onesided';
[Pxx1,f] = pwelch(xn,window1,noverlap,nfft,Fs,range);
对比图为
可见三种方法能够精准估计功率谱,周期图法功率谱估计由于矩形窗截断存在频谱泄露的问题。pwelch法功率谱估计解决了频谱泄露的问题,但是降低了精度并且没有解决方差的问题。具体使用哪种方法在科研项目中需要多次实验才能确定。
本章主要对功率谱估计的经典方法和直接法进行了介绍,下一章介绍基于AR模型的功率谱估计的原理和应用,进一步提升了谱估计的精度。