出处: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极为功率谱

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐