前言

之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现。
想要复习的可以参考一下之前的文件:
现代谱估计:多窗口谱

正文

首先是基本的子函数

findNFFT

从传递过来的参数里面,找到特定的NFFT或者频率向量,返回给调用函数


------------------------------------------------------------------
function nfftTemp = findNFFT(varargin)
% FINDNFFT Finds the specified NFFT or frequency vector from the optional
% arguments passednfftTemp = [];
for cnt = 1:length(varargin)if isnumeric(varargin{cnt}), nfftTemp = varargin{cnt};找到对应的参数后,立马退出。break;end
endend
end

getEV

函数[E,V,NW,indx,nfft_temp,varargin]=getEV(N,varargin)
将输入参数解析为 (但不包括) Nfft. 如果e和v未指定, 则计算 E 和 V

%----------------------------------------------------------------------
function [E,V,NW,indx,nfft_temp,varargin] = getEV(N,varargin)
% GETEV  Parse the input arguments up to, but not including, Nfft and
%        calculate E and V if not specified.
%
输入:
N 输入数据x的长度
% Inputs:
%   N        - Length of the input data sequence, x.varargin -传递给pmtm的输入参数列表,除了x%   varargin - Input parameter list passed to pmtm, except for x.
%输出
% Outputs:
e 离散扁球序列矩阵
%   E        - Matrix containing the discrete prolate spheroidal
%              sequences (dpss).
v  包含dpss中心的向量%   V        - Vector containing the concentration of the dpss.NW 时间窗口是4,默认是4
%   NW       - Time-bandwidth product; default is 4.指示输入参数列表开始选项的索引
%   indx     - Index indicating starting location of options in pmtm's
%              input argument list.特定的NFFT点数
%   nfft_temp - NFFT or Frequency vector specified. Empty if not specified
设置默认的或者初始化输出变量,避免早返回% Define defaults & initialize output variables (in case of early return).
NW      = 4;
indx    = 1;  % Index where the options begin in the input arg list
nfft_temp = [];
判断是否输入droplasttaper参数
tf = strcmpi('droplasttaper',varargin);
查找tf==1的位置。
loc = find(tf==1);
如果找到了droplasttaper,
默认是dlt=1,丢掉最后一帧。
if ~isempty(loc)dlt = varargin{loc+1};     % droplasttapervarargin = varargin(1:loc-1);
elsedlt = true;              % default value
end第二种输入参数给pmtm可以是以下的类型:
1(x,Nw,...)标量
x,矩阵e,向量v
x,元胞数组包含dpss的所有参数
一个特定的功率谱选项% The 2nd input arg to pmtm can be a
%    1. (X,NW,...)            scalar
%    2. (X,E,V,...)           matrix E, hence, 3rd input must be a vector (V)
%    3. (X,{dpss_params},...) cell containing the input argument list to dpss
%    4. a string specifying a psdoption满足下列条件,则NW=varargin『1』.
if ~isempty(varargin) && ~ischar(varargin{1})if ~isempty(varargin{1})NW = varargin{1};endindx = 2;if iscell(NW),           % NW is a cell array => dpss_paramsif (NW{1}<1.25 && dlt)error(message('signal:pmtm:insufficientTimebandwidthproduct', 'NW', '1.25', 'Droplasttaper', 'true'));end if (NW{1}<0.75 && ~dlt)error(message('signal:pmtm:insufficientTimebandwidthproduct', 'NW', '0.75', 'Droplasttaper', 'false'));          end    生成对应的E,V值[E,V] = dpss(N,NW{:}); numvec = length(V);if dltif numvec > 2E = E(:,1:numvec-1);V = V(1:numvec-1);elseerror(message('signal:pmtm:inadequateNumtapers', '3', 'Droplasttaper', 'true'));endelseif numvec < 2error(message('signal:pmtm:inadequateNumtapers', '2', 'Droplasttaper', 'false'));endendNW值NW = NW{1};if nargin > 2, nfft_temp = findNFFT(varargin{2:end}); endE,v提前设计好。elseif length(NW)>1,     % NW is the matrix E (==>V must be specified)E = NW;if length(varargin)<2,error(message('signal:pmtm:MustProvideVWithE', 'V', 'E'));elseV = varargin{2};if nargin > 3, nfft_temp = findNFFT(varargin{3:end}); endendnumvec = length(V);if size(E,2)~=numvecerror(message('signal:pmtm:MismatchEV', 'E', 'V'));end     NW = size(E,2)/2;  indx = 3; % Update index of beginning of options in the input arg list      if dltif (numvec < 3)error(message('signal:pmtm:inadequateNumtapers', '3', 'Droplasttaper', 'true'));elseE = E(:,1:numvec-1);V = V(1:numvec-1);endelseif(numvec < 2)error(message('signal:pmtm:inadequateNumtapers', '2', 'Droplasttaper', 'false'));endend
如果NW是个标量else                      % NW is a scalarif (NW<1.25 && dlt)error(message('signal:pmtm:insufficientTimebandwidthproduct', 'NW', '1.25', 'Droplasttaper', 'true'));endif (NW<0.75 && ~dlt)error(message('signal:pmtm:insufficientTimebandwidthproduct', 'NW', '0.75', 'Droplasttaper', 'false'));end% Get the dpss, one way or another:[E,V] = dpss(N,NW);numvec = length(V);if dltif numvec > 2E = E(:,1:numvec-1);V = V(1:numvec-1);elseerror(message('signal:pmtm:inadequateNumtapers', '3', 'Droplasttaper', 'true'));endelseif numvec < 2error(message('signal:pmtm:inadequateNumtapers', '2', 'Droplasttaper', 'false'));endendif nargin > 2, nfft_temp = findNFFT(varargin{2:end}); endend
else% Get the dpss, one way or another:[E,V] = dpss(N,NW);numvec = length(V);if dltif numvec > 2E = E(:,1:numvec-1);V = V(1:numvec-1);elseerror(message('signal:pmtm:inadequateNumtapers', '3', 'Droplasttaper', 'true'));endelseif numvec < 2error(message('signal:pmtm:inadequateNumtapers', '2', 'Droplasttaper', 'false'));endendnfft_temp = [];
end 

MTM:matlab实现1相关推荐

  1. MTM:matlab实现5主函数解码

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...

  2. MTM:matlab实现4主函数

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...

  3. MTM:matlab实现3谱功率计算

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...

  4. MTM:matlab实现2参数解析

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...

  5. 功率谱密度相关方法MATLAB实现

    1. 基本方法 周期图法是直接将信号的采样数据x(n)进行Fourier变换求取功率谱密度估计的方法.假定有限长随机信号序列为x(n).它的Fourier变换和功率谱密度估计存在下面的关系: 式中,N ...

  6. R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的R语言的实现,这个实现是提出人的学生写的,和matlab的实现进行对照分析,加深理解,提高大家对这门技术的掌握程度,解析的顺序依旧是 ...

  7. MATLAB信号处理工具箱函数列表分类

    **现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾.(只解释基本用途,具体用法请在help目录下查询)** Waveform Generation(波形产生) chairp: 产生 ...

  8. 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc

    [2018年最新整理]信号处理MATLAB函数 函数说明波形产生和绘图chirp产生扫描频率余弦diric产生Dirichlet或周期sinc信号gauspuls产生高斯调制正弦脉冲rulstran产 ...

  9. 【雷达信号处理】脉冲多普勒PD及其MATLAB实现

    这是目录 1 原理介绍 1.1 脉冲多普勒过程 1.2 信号模型 1.3 PD的实现 1.4 相参和非相参累积 2 实验内容 2.1 参数 3 MATLAB实现 参考文献 1 原理介绍 1.1 脉冲多 ...

最新文章

  1. tooctalstring_Java Integer类toOctalString()方法的示例
  2. 这七种回归分析技术,学了不后悔~
  3. java 注解解析_Java知识点总结(注解-解析注解)
  4. python官网下载步骤-windows下载并安装Python的具体步骤
  5. 如何用计算机函数来求加权总分,根据等级加权计算总分--SUMPRODUCT和LOOKUP函数的组合...
  6. ② 判断语句、循环语句
  7. python实现火车票查询
  8. 【BUG】Python3|爬虫请求得到的json中的值全是问号
  9. css选择最后一个元素
  10. 2022第十五届全国大学生信息安全竞赛(ciscn)西南赛区部分WP
  11. DirectX11进阶5_硬件实例化与视锥体裁剪及鼠标拾取交互
  12. EMWIN电容触摸Touch步骤及注意事项
  13. 09年电子商务格局的个人臆断
  14. 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(五)
  15. Ant Design Pro项目启动报错 ChunkError mf-va_remoteEntry umi
  16. 云海IOP 3.0:为行业云而生
  17. 23 《武士道》 -豆瓣评分7.8
  18. openwrt使用linux内核版本,如何降级OpenWRT的Linux内核版本
  19. Linux SMP启动流程学习(三)
  20. align_corners torch上采样

热门文章

  1. Selwyn College, Cambridge
  2. 如果不知道做什么,那应该做什么呢?
  3. 每日阅读(产品) 汤道QQ与微信
  4. 简单案例:unittest+HTMLTestRunner实现生成测试报告
  5. 《可爱的Python》读书笔记(五)
  6. Linux bash逐行读取文件的方法
  7. poj 3614(最大流)
  8. poj-1064Cable master(二分)
  9. P1739表达式括号匹配
  10. fedora虚拟机中的vsftp服务配置