matlab中power函数怎么用_Matlab用pwelch函数计算功率谱

3e99a9f6b38d900ec1024b4ebfaddf9a.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的方法概括步骤如下

  1. 将信号分为多段,每段之间可以有overlapping,也可以没有。
  2. 每一段加窗
  3. 每一段做谱分析
  4. 求平均。

下面来看一个例子,首先准备一个余弦函数,周期为1,以10hz采样

n = 0:0.1:20;
x = cos(2*pi*n);
plot(n,x,'.-');
fs=10;

51d69fd45190cf29adaf1f5cd090319c.png
余弦函数的图像

现在用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

现在来考察不同参数变化的影响,保持其他参数不变

(1) 不同NFFT

f5ddb2ecd100635dd921344be2a7e296.png

(2)不同window大小

8e36919732f3dcda8f3febd19c8233cb.png

(3)不同overlap,差别不大,可能是因为这里我们没有加噪音

aa464acc8eb866a22b5e56fd4d542d6d.png

(4)不同fs,只会影响横坐标的位置

df30c042b815405da9f8bbb396c305c4.png

参考链接:

Matlab谱分析的pwelch方法​www.jianshu.com
ae8273df55383c114b8e718eaca096b3.png
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值