加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]用matlab进行功率谱分析的几种方法

(2017-05-16 15:51:33)
标签:

转载

分类: 理工课

0、前言

    有很多种功率谱分析算法,如周期图法、welch法、yuler法、汤姆森多窗口谱(mtm)法、协方差谱(cov)法、修正协方差(mcov)法、burg法、多信号分类(MUSIC)、特征向量法。。。

   matlab中,为了进行信号功率谱分析,可以通过编写脚本或matlab自带的信号分析工具做到,下面介绍4种方法。

1、编写脚本实现

优点:参数可灵活设置

我编写了一段脚本,可以灵活地根据需要选择算法进行计算。



  
%MATLAB version:R2015b
  
 
  
Fs = 6250;
  
x=data;
  
 
  
% 各种谱估计算法
  
reply = input('Please Input spectrum estimation type:[1-9] ', 's');
  
switch str2double(reply)
  
    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及以后才有)

matlabAPP标签页下点击Signal Analyzer图标,或命令窗口输入signalAnalyzer打开。具体如何使用,点击这里

http://s15/bmiddle/001MPmUTzy75uauGeHI1e&690

Signal Analyzer根据分辨带宽(RBW)的取值,选择modified periodogramWelch算法计算功率谱。具体如何选择,更多信息,详见这里

3SPTool

用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

0

前一篇:谨言
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有