![3e99a9f6b38d900ec1024b4ebfaddf9a.png](https://i-blog.csdnimg.cn/blog_migrate/3049a7d9bace1abcabcd0126dafd54c6.png)
要使用的函数是pwelch,形式是
[pxx,f] = pwelch(x,window,noverlap,NFFT,fs)
x 是一维的信号数据;
window 是计算功率谱每个窗口的信号长度,关于窗函数的长度选择可以参考公式x_length/fren;谱分析中窗的选取
noverlap 是每个窗口之间重叠的长度,通常取33%~50%。窗口之间重叠得越多,图像越平滑(blurred);反之则更粗糙(blocky);
NFFT,即FFT数据点的个数,可以变化。但是最大长度不能超过每一段的点数。当然,通常设置NFFT为大于每一段的点数的最小2次幂,这样可以得到最高的频域分辨率。NFFT越小,最终会越粗糙;
fs是采样频率,最终的结果,横坐标的最大值为采样频率的一半;
pxx 为计算得到的功率谱数值;
f 为功率谱数值对于频率的位置;
--
pwelch的方法概括步骤如下
- 将信号分为多段,每段之间可以有overlapping,也可以没有。
- 每一段加窗
- 每一段做谱分析
- 求平均。
下面来看一个例子,首先准备一个余弦函数,周期为1,以10hz采样
n = 0:0.1:20;
x = cos(2*pi*n);
plot(n,x,'.-');
fs=10;
![51d69fd45190cf29adaf1f5cd090319c.png](https://i-blog.csdnimg.cn/blog_migrate/ec1ec92e00ce6fe3be4fb3987201a960.jpeg)
现在用pwelch画一下,功率谱
n = 0:0.1:20;
x = cos(2*pi*n);%+randn(size(n));
%plot(n,x,'.-');
fs=10;
NFFT=50;
window=50;
noverlap=30;
[pxx,f] = pwelch(x,window,noverlap,NFFT,fs);
plot(f,10*log10(pxx))
xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')
结果如下图,
![ed87e0cd4c1ecb507fa18ef4664b72fe.png](https://i-blog.csdnimg.cn/blog_migrate/3897ab46602c8d72692862e5bcca70e9.jpeg)
现在来考察不同参数变化的影响,保持其他参数不变
(1) 不同NFFT
![f5ddb2ecd100635dd921344be2a7e296.png](https://i-blog.csdnimg.cn/blog_migrate/c768eb31fca86041c3a3e61f118032c4.jpeg)
(2)不同window大小
![8e36919732f3dcda8f3febd19c8233cb.png](https://i-blog.csdnimg.cn/blog_migrate/a5bcb377fc39db4d3d5413a94e3c8466.jpeg)
(3)不同overlap,差别不大,可能是因为这里我们没有加噪音
![aa464acc8eb866a22b5e56fd4d542d6d.png](https://i-blog.csdnimg.cn/blog_migrate/8287886ecd10d1e667a3f938880837c2.jpeg)
(4)不同fs,只会影响横坐标的位置
![df30c042b815405da9f8bbb396c305c4.png](https://i-blog.csdnimg.cn/blog_migrate/c8aee84907d06d00c339c7bf5660a048.png)
参考链接:
Matlab谱分析的pwelch方法www.jianshu.com![ae8273df55383c114b8e718eaca096b3.png](https://i-blog.csdnimg.cn/blog_migrate/5c02fd6a99f26444904586b1fd9d2cc7.jpeg)