0、前言
有很多种功率谱分析算法,如周期图法、welch法、yuler法、汤姆森多窗口谱(mtm)法、协方差谱(cov)法、修正协方差(mcov)法、burg法、多信号分类(MUSIC)、特征向量法。。。
在matlab中,为了进行信号功率谱分析,可以通过编写脚本或matlab自带的信号分析工具做到,下面介绍4种方法。
1、编写脚本实现
优点:参数可灵活设置
我编写了一段脚本,可以灵活地根据需要选择算法进行计算。
1 |
%MATLAB
version:R2015b
|
2 |
|
3 |
Fs
=
6250;
|
4 |
x=data;
|
5 |
|
6 |
%
各种谱估计算法
|
7 |
reply
=
input('Please
Input spectrum estimation type:[1-9]
',
's');
|
8 |
switch
str2double(reply)
|
9 |
case
1
|
10 |
Hs=spectrum.periodogram;
%周期图法
|
11 |
figure;psd(Hs,x,'Fs',Fs)
|
12 |
case
2
|
13 |
Hs=spectrum.welch;
%welch算法
|
14 |
figure;psd(Hs,x,'Fs',Fs)
|
15 |
case
3
|
16 |
Hs=spectrum.yulear;
|
17 |
figure;psd(Hs,x,'Fs',Fs)
|
18 |
case
4
%Thomson
multitaper spectrum,汤姆森多窗口谱法
|
19 |
nw
=
4;
%控制分辨率,使用的斯莱皮恩蜡烛(Slepian
tapers)宽度为2*nw-1
|
20 |
nfft
=
max(256,2^nextpow2(length(x)));
|
21 |
figure;pmtm(x,nw,nfft,Fs)
|
22 |
case
5
|
23 |
Hs=spectrum.mcov;
%Modified
covariance spectrum,修改后的协方差谱
|
24 |
figure;psd(Hs,x,'Fs',Fs)
|
25 |
case
6
|
26 |
Hs=spectrum.cov;
%covariance
spectrum,协方差谱
|
27 |
figure;psd(Hs,x,'Fs',Fs)
|
28 |
case
7
|
29 |
[a,e,k]
=
arburg(x,96);
%求反射系数
|
30 |
a
=
abs(a);
|
31 |
order
=
numel(a(a>mean(a)))*2;
%根据反射系数确定阶数选择
|
32 |
nfft
=
256;
|
33 |
figure;pburg(x,order,nfft,Fs)
|
34 |
case
8
%
MUSIC算法
|
35 |
segLen
=
32;
|
36 |
ovlpPct
=
95;
%overlap百分比
|
37 |
Noverlap
=
ceil(ovlpPct/100*segLen);
%overlap点数
|
38 |
nfft
=
max(256,2^nextpow2(segLen));
%FFT点数
|
39 |
thresh
=
5;
%噪声子空间门限值=λmin*thresh
|
40 |
nsinusoids
=
6*2*2;%信号子空间维数,如果是实信号,维数要加倍。
|
41 |
P
= [nsinusoids
thresh];
|
42 |
win
=
hamming(segLen);
%对输入数据进行分割加窗处理
|
43 |
figure;pmusic(x,P,nfft,Fs,win,Noverlap);
|
44 |
case
9
%
Eigenvector spectrum 特征矢量谱算法(特征向量法)
|
45 |
segLen
=
32;
|
46 |
ovlpPct
=
95;
%overlap百分比
|
47 |
Noverlap
=
ceil(ovlpPct/100*segLen);
%overlap点数
|
48 |
nfft
=
max(256,2^nextpow2(segLen));
%FFT点数
|
49 |
thresh
=
5;
%噪声子空间门限值=λmin*thresh
|
50 |
nsinusoids
=
6*2*4;%信号子空间维数,如果是实信号,维数要加倍。
|
51 |
P
= [nsinusoids
thresh];
|
52 |
win
=
hamming(segLen);
%对输入数据进行分割加窗处理
|
53 |
figure;peig(x,P,nfft,Fs,win,Noverlap);
|
54 |
otherwise
|
55 |
warning(msgID,'Unexpected
reply type. No plot created.');
|
56 |
end
|
|
2、Signal Analyzer app(仅matlabr2016b及以后才有)
在matlab的APP标签页下点击Signal
Analyzer图标,或命令窗口输入signalAnalyzer打开。具体如何使用,点击这里。
http://s15/bmiddle/001MPmUTzy75uauGeHI1e&690
Signal
Analyzer会根据分辨带宽(RBW)的取值,选择modified
periodogram或Welch算法计算功率谱。具体如何选择,更多信息,详见这里。
3、SPTool
用sptool命令打开。
http://s14/mw690/001MPmUTzy75u90DeKF2d&690
可以进行信号查看、滤波器设计、滤波器特性分析和信号的频谱分析,具体使用方法,点击这里
4、绘图-频谱估计
在“绘图”标签页,下拉可找到如下几种谱估计方法,选择信号后直接点击即可出现频谱图。
http://s5/mw690/001MPmUTzy75u92k5cE84&690
reference:
【1】http://cn.mathworks.com/help/signal/ref/signalanalyzer-app.html
【2】http://wenku.baidu.com/link?url=6zDIVZgQ2SvbQYJm6qUXEmnbMxX0IudMpMfFtBpU-4X8yv7rfbPK0N4edA5FsiIuB2LUvpZX8qThfKguSoV8Ko7JPO6b_nUYlkIJAj5gShC