matlab中pwelch函数计算功率谱密度

出处:Matlab用pwelch函数计算功率谱 - 知乎 (zhihu.com)

1:函数形式

[pxx,f] = pwelch(x,window,noverlap,NFFT,fs)

该函数可以自适应的计算出信号的功率谱密度。

是一维的信号数据;

window 是计算功率谱每个窗口的信号长度,关于窗函数的长度选择可以参考公式,选择的窗口越长,越能分辨低频的信号,x_length/fren;谱分析中窗的选取

noverlap 是每个窗口之间重叠的长度,通常取33%~50%。窗口之间重叠得越多,图像越平滑(blurred);反之则更粗糙(blocky);

NFFT,即FFT数据点的个数,可以变化。但是最大长度不能超过每一段的点数。当然,通常设置NFFT为大于每一段的点数的最小2次幂,这样可以得到最高的频域分辨率。NFFT越小,最终会越粗糙;

fs是采样频率,最终的结果,横坐标的最大值为采样频率的一半;

pxx 为计算得到的功率谱数值;

为功率谱数值对于频率的位置;

pwelch的方法概括步骤如下

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

当不需要确定那么详细的参数而只是需要获得信号的频谱图时,该函数十分好用。

2.例子

可以看到,直接用pwelch画图即可

clc
close all
clear all
Fs = 20e6;
Rb = 1e6;
Fc = 5e6;
t_sim = 1e-3;


data_bit = randi([0 1], 1, t_sim*Rb);
data_map = 1 - 2*data_bit;

data_bx = data_map( floor((0 :t_sim*Fs - 1)*Rb/Fs) + 1 );
carrier = cos(2*pi*Fc/Fs*(0 :t_sim*Fs - 1));
data_bpsk = data_bx.*carrier ;

figure
plot(data_bpsk);
title('信号时域波形');

figure
pwelch(data_bpsk)
title('信号频谱')

图2极为功率谱

 

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值