Welch 法对 Bartlett 法进行了两方面的修正,一是选择适当的窗函数 w(n),并再周期图计算
前直接加进去,加窗的优点是无论什么样的窗函数均可使谱估计非负。二是在分段时,可使
各段之间有重叠,这样会使方差减小。
Matlab 代码示例:
clear;
Fs=1000;
n=0:1/Fs:1;
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
window=boxcar(100); %矩形窗
window1=hamming(100); %海明窗
window2=blackman(100); %blackman 窗
noverlap=20; %数据无重叠
range='half'; %频率间隔为[0 Fs/2],只计算一半的频率
[Pxx,f]=pwelch(xn,window,noverlap,nfft,Fs,range);
[Pxx1,f]=pwelch(xn,window1,noverlap,nfft,Fs,range);
[Pxx2,f]=pwelch(xn,window2,noverlap,nfft,Fs,range);
plot_Pxx=10*log10(Pxx);
plot_Pxx1=10*log10(Pxx1);
plot_Pxx2=10*log10(Pxx2);
figure(1)
plot(f,plot_Pxx);
pause;
figure(2)
plot(f,plot_Pxx1);
pause;
figure(3)
plot(f,plot_Pxx2);
关于 pwelch:
Welch 法 (pwelch)
[Pxx,F] = pwelch(x,window,noverlap,nfft,fs)
x, 为进行功率谱估计的输入有限长序列
window,用于指定采用的窗函数(boxcar, hamming, blackman)
noverlap,重叠点数
nfft,设定 FFT 算法的长度
fs, 采样频率
Pxx,为输出的功率谱估计值
F,为得到的频率点
Welch 方法是一种修正周期图功率谱密度估计方法,它通过选取的窗口对数据进行加窗处
理,先分段求功率谱之后再进行平均。其中窗口的长度 N 表示每次处理 的分段数据长度,
Noverlap 是指相邻两段数据之间的重叠部分长度。N 越大得到的功率谱分辨率越高(越准确),
但方差加大(及功率谱曲线不太平 滑);N 越小,结果的方差会变小,但功率谱分辨率较低(估
计结果不太准确)。
pwelch 的算法基本上是这样:
1. 将信号分为多段,每段之间可以有 overlapping,也可以没有。
2. 每一段加窗
3. 每一段做谱分析
4. 求平均。