MTM:matlab实现1
前言
之前讲了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相关推荐
- MTM:matlab实现5主函数解码
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...
- MTM:matlab实现4主函数
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...
- MTM:matlab实现3谱功率计算
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...
- MTM:matlab实现2参数解析
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...
- 功率谱密度相关方法MATLAB实现
1. 基本方法 周期图法是直接将信号的采样数据x(n)进行Fourier变换求取功率谱密度估计的方法.假定有限长随机信号序列为x(n).它的Fourier变换和功率谱密度估计存在下面的关系: 式中,N ...
- R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的R语言的实现,这个实现是提出人的学生写的,和matlab的实现进行对照分析,加深理解,提高大家对这门技术的掌握程度,解析的顺序依旧是 ...
- MATLAB信号处理工具箱函数列表分类
**现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾.(只解释基本用途,具体用法请在help目录下查询)** Waveform Generation(波形产生) chairp: 产生 ...
- 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc
[2018年最新整理]信号处理MATLAB函数 函数说明波形产生和绘图chirp产生扫描频率余弦diric产生Dirichlet或周期sinc信号gauspuls产生高斯调制正弦脉冲rulstran产 ...
- 【雷达信号处理】脉冲多普勒PD及其MATLAB实现
这是目录 1 原理介绍 1.1 脉冲多普勒过程 1.2 信号模型 1.3 PD的实现 1.4 相参和非相参累积 2 实验内容 2.1 参数 3 MATLAB实现 参考文献 1 原理介绍 1.1 脉冲多 ...
最新文章
- tooctalstring_Java Integer类toOctalString()方法的示例
- 这七种回归分析技术,学了不后悔~
- java 注解解析_Java知识点总结(注解-解析注解)
- python官网下载步骤-windows下载并安装Python的具体步骤
- 如何用计算机函数来求加权总分,根据等级加权计算总分--SUMPRODUCT和LOOKUP函数的组合...
- ② 判断语句、循环语句
- python实现火车票查询
- 【BUG】Python3|爬虫请求得到的json中的值全是问号
- css选择最后一个元素
- 2022第十五届全国大学生信息安全竞赛(ciscn)西南赛区部分WP
- DirectX11进阶5_硬件实例化与视锥体裁剪及鼠标拾取交互
- EMWIN电容触摸Touch步骤及注意事项
- 09年电子商务格局的个人臆断
- 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(五)
- Ant Design Pro项目启动报错 ChunkError mf-va_remoteEntry umi
- 云海IOP 3.0:为行业云而生
- 23 《武士道》 -豆瓣评分7.8
- openwrt使用linux内核版本,如何降级OpenWRT的Linux内核版本
- Linux SMP启动流程学习(三)
- align_corners torch上采样