randn('state',0);
Fs = 1000;
t = 0:1/Fs:.3;
x = cos(2*pi*t*200) + randn(size(t));
% 200Hz cosine plus noise
pwelch(x,33,32,[],Fs,'twosided')
[Pxx,f]=pwelch(x,window,noverlap,nfft,fs)
Welch方法是一种修正周期图功率谱密度估计方法,它通过选取的窗口对数据进行加窗处理,先分段求功率谱之后再进行平均。其中窗口的长度N表示每次处理的分段数据长度,Noverlap是指相邻两段数据之间的重叠部分长度。N越大得到的功率谱分辨率越高(越准确),但方差加大(及功率谱曲线不太平滑);N越小,结果的方差会变小,但功率谱分辨率较低(估计结果不太准确)。
1. 将信号分为多段,每段之间可以有overlapping,也可以没有。
2. 每一段加窗
3. 每一段做谱分析
4. 求平均。
关于 信号到底要分多少段?每一段长度多少?我的理解,这个问题的回答,需要考虑频域分辨率。 当然,每一段时间跨度越大,频域分辨率就越高。如果整个信号不分段,那么频域分辨率最高。当然分段也是为了考虑噪声的影响。分得段越多,噪声越小。 有时候,如果一个信号本身不太长,那么如果有overlapping,显然可以比不overlapping的时候的频域分辨率高。 总结一下,每一段的长度,和overlapping 的长度,需要平衡噪音,频域分辨率。
另外注意的是,pwelch里面NFFT,即FFT的个数,是可以变化的。但是最大长度不能超过每一段的点数。当然,很多情况下我们把NFFT等于每一段的点数,这样可以得到最高的频域分辨率。 如果NFFT = 每一段的一半,频域分辨率低一倍。
2. 每一段加窗
3. 每一段做谱分析
4. 求平均。
关于 信号到底要分多少段?每一段长度多少?我的理解,这个问题的回答,需要考虑频域分辨率。 当然,每一段时间跨度越大,频域分辨率就越高。如果整个信号不分段,那么频域分辨率最高。当然分段也是为了考虑噪声的影响。分得段越多,噪声越小。 有时候,如果一个信号本身不太长,那么如果有overlapping,显然可以比不overlapping的时候的频域分辨率高。 总结一下,每一段的长度,和overlapping 的长度,需要平衡噪音,频域分辨率。
另外注意的是,pwelch里面NFFT,即FFT的个数,是可以变化的。但是最大长度不能超过每一段的点数。当然,很多情况下我们把NFFT等于每一段的点数,这样可以得到最高的频域分辨率。 如果NFFT = 每一段的一半,频域分辨率低一倍。
帮助里面
noverlap must be less than the length of the window you specify,
the (default) length N of the FFT is the larger of 256 and the next power of 2 greater than the length of the segment.
noverlap must be less than the length of the window you specify,
the (default) length N of the FFT is the larger of 256 and the next power of 2 greater than the length of the segment.