主要内容

LabeledSignalSet.

创建标记信号集

描述

使用LabeledSignalSet.将标记信号与标签定义一起存储。使用信号标签定义signalLabelDefinition

创造

描述

LSS.= LabeledSignalSet.创建一个空标记的信号集。使用addmembers.将信号添加到集合。使用addlabeldefinitions.要将标签定义添加到集合。

示例

LSS.= labeledsignalset(src为输入数据源创建标记信号集src.使用addlabeldefinitions.要将标签定义添加到集合。

LSS.= labeledsignalset(srclbldefs为输入数据源创建标记信号集src使用信号标签定义lbldefs.使用signalLabelDefinition创建信号标签定义。

LSS.= labeledsignalset(srclbldefs“MemberNames”,mnames.为输入数据源创建标记信号集src并指定集合成员的名称。使用setmembernames.修改成员名称。lbldefs是可选的。

示例

LSS.= labeledsignalset(srclbldefs名称,价值属性使用名称值对。您可以指定多个名称值对。将每个属性名称括在引号中。lbldefs是可选的。

输入参数

展开所有

输入数据源,指定为矩阵,一个单元格阵列,时间表,aSignalDataStore.对象,或者audiodatastore.(音频工具箱)对象。src隐式指定集合成员的数量、每个成员中的信号数量和每个信号中的数据。

示例:{兰德(10,3),兰德(17,9)}有两个成员。第一构件包含三个10个样本信号。第二构件包含九个17样本信号。

示例:{{兰德(10,1)}, {兰德(17,1),兰德(27,1)}}}有两个成员。第一构件包含一个10样本信号。第二构件包含17样本信号和27样本信号。

示例:{{时间表(1:10)',兰德(10,3)),时间表(1:7)”,兰德(7,2))},{时间表(1:3)',兰德(3,1))}}有两个成员。第一构件包含在1 Hz上采样的三个信号10秒,并在1 Hz上采样的两个信号7秒。第二构件包含在1 Hz上采样的一个信号3秒。

示例:SignalDataStore.指向文件的对象

使用MATLAB®指定包含作为MAT文件的一组样本声音信号的路径。每个文件都包含一个信号变量和采样率。列出文件的名称。

文件夹= fullfile(matlabroot,“工具箱”“matlab”“audiovideo”);lst = dir(附加(文件夹,“/*.mat”));nms = {lst(:)。name}'
nms =7x1细胞{'chirp.mat'} {'gong.mat'} {'handel.mat'} {'笑声.mat'} {'mtlb.mat'} {'mtlb.mat'} {'splat.mat'} {'train.mat'}

创建指向指定文件夹的信号数据存储。将采样率变量名称设置为FS.,这对所有文件都是常见的。生成排除文件的数据存储的子集mtlb.mat,它与其他文件不同,因为不调用信号变量y

sds = signalDatastore(文件夹,“samplerevariablename”“FS”);SDSS =子集(SDS,〜StrcMP(NMS,“mtlb.mat”));

类的源使用子集数据存储LabeledSignalSet.对象。

lss = labeledsignalset(SDSS)
LSS =带有属性的LabeledSignalSet:源:[1x1 signalDataStore] NumMembers:6次规信息:“固有”标签:[6x0表]描述:“”“”使用LabEdeFinitionShileSrampe查看标签和子标记列表。使用setlabelvalue将数据添加到集合。

标签定义,指定为矢量signalLabelDefinition对象。

成员名称,指定为字符向量,字符串标量,字符向量的单元格数组,或字符串数​​组。

示例:labeledsignalset({randn(100,1)randn(10,1)},'成员名称',{'llama'alpaca'})指定具有两个成员的一组随机信号,'骆驼'“羊驼”

属性

展开所有

标记的信号集描述,指定为字符向量或字符串标量。

示例:'描述','按性别和年龄睡眠测试患者'

数据类型:char|

此属性是只读的。

采样率值,指定为正标量或向量。仅当数据源不包含固有时间信息时,此属性才有效。

  • Samplere.到正数字标量,为标记集中的所有信号指定相同的采样率。

  • Samplere.来指定标记集合中的每个成员都有以相同速率采样的信号,但采样速率因成员而异。向量的元素数必须等于集合的成员数。如果集合中的一个成员具有不同采样率的信号,则使用时间表指定采样率。

示例:'samplerate',[1E2 1E3]指定集合中第一个成员的信号以100hz的速率采样,第二个成员的信号以1khz的速率采样。

此属性是只读的。

采样时间值,指定为正标量,矢量,a持续时间标量或持续时间向量。仅当数据源不包含固有时间信息时,此属性才有效。

  • Sampletime.一个数字或持续时间标量为标记集中的所有信号指定相同的采样时间。

  • Sampletime.一个数字或持续时间向量指定标记集的每个成员具有样本之间具有相同时间间隔的信号,但间隔与成员不同。向量的元素数必须等于集合的成员数。如果集合的成员具有具有不同采样时间的信号,则使用时间表指定采样时间。

示例:“SampleTime”,秒([1依照1 e - 3])指定在样本之间的集合的第一成员中的信号具有0.01秒,并且第二构件中的信号在样本之间具有1毫秒。

此属性是只读的。

时间值,指定为向量a持续时间矢量,矩阵或单元阵列。仅当数据源不包含固有时间信息时,此属性才有效。时间值必须是唯一的且越来越多的。

  • TimeValues.一个数字或持续时间向量指定标记集中所有信号的相同时间值。向量必须具有与集合中的所有信号相同的长度。

  • TimeValues.一个数字或持续时间矩阵或小区阵列指定标记集的每个成员具有具有相同时间值的信号,但时间值与成员不同于成员。

    • 如果TimeValues.是一个矩阵,那么它必须具有一定数量的列等于集合成员的数量。集合中的所有信号必须具有等于矩阵的行数的长度。

    • 如果TimeValues.是单元格数组,则它必须包含与集合成员数相等的向量数。成员中的所有信号的长度必须等于单元格数组中相应向量的元素数。

如果集合的成员具有具有不同时间值的信号,则使用时间表指定时间值。

示例:'TimeValues',[1:1000; 0:1/500:2-1 / 500]'指定集合的​​第一个成员中的信号被采样1 Hz 1000秒。第二构件中的信号以500Hz采样2秒。

示例:'TimeValues',秒([1:1000; 0:1/500:2-1 / 500]')指定集合的​​第一个成员中的信号被采样1 Hz 1000秒。第二构件中的信号以500Hz采样2秒。

示例:“时间价值”,{1:1000,0:1/500:2-1/500}指定集合的​​第一个成员中的信号被采样1 Hz 1000秒。第二构件中的信号以500Hz采样2秒。

示例:“时间价值”,{秒(1:1000),秒(0:1/500:2-1/500)}指定集合的​​第一个成员中的信号被采样1 Hz 1000秒。第二构件中的信号以500Hz采样2秒。

此属性是只读的。

设置的成员数量,指定为正整数。

此属性是只读的。

标签表,指定为MATLAB®表格每个变量的标签对应于为集合定义的标签。每一行的标签对应于数据源的一个成员。的行名标签是会员姓名。

数据类型:表格

源的时间信息,指定为以下之一:

  • '没有'- 源中的信号没有时间信息。

  • 'samplerate'- 以指定的速率对源中的信号进行采样。

  • 'sampletime'—信号源中的信号在采样之间有指定的时间间隔。

  • 'TimeValues.- 源中的信号具有对应于每个样本的时间值。

  • '固有'- 源中的信号包含固有时间信息。MATLAB时间表是此类信号的示例。

数据类型:char|

此属性是只读的。

标记信号集的数据源,指定为矩阵、时间表、单元阵列或音频数据存储。

  • 如果来源是数字矩阵,然后标记信号集具有一个成员,其中包含等于矩阵列的数量的信号。

    示例:Labeledsignalset(Randn(10,3))有一个包含三个10个样本信号的成员。

  • 如果来源是矩阵的单元阵列,然后标记的信号集具有多个成员等于单元阵列中的矩阵的数量。每个成员包含多个信号等于相应矩阵的列数。

    示例:labeledSignalSet ({randn (10, 3), randn(17日9)})有两个成员。第一构件包含三个10个样本信号。第二构件包含九个17样本信号。

  • 如果来源是单元阵列,电池阵列的每个元素是数字矢量的单元阵列,然后标记信号集具有等于单元数组元素的数量的数量。构件内的每个信号可以具有任何长度。

    示例:labeledsignalset({{randn(10,1)},{randn(17,1),randn(27,1)}})有两个成员。第一构件包含一个10样本信号。第二构件包含17样本信号和27样本信号。

  • 如果来源是包含数值的变量的时间表,然后标记信号集具有一个成员,其中包含等于变量数量的信号。时间表的时间值必须是类型持续时间,独特和增加。

    示例:LabeledSignalSet(时间表(秒(1:10)',Randn(10,3)))有一个成员包含三个以1hz采样10秒的信号。

  • 如果来源是时间表的单元阵列,每个时间表具有数量的任意数量,其中标记的信号集具有等于时间表的数量。每个成员包含一个等于相应时间表中的变量数的信号。

    示例:LabeledSignalSet({时间表(秒(1:10)',Randn(10,3)),时间表(秒(1:5)',Randn(5,13))})有两个成员。第一构件包含在1 Hz上采样的三个信号10秒。第二构件包含在1 Hz以1 Hz采样的13个信号5秒。

  • 如果来源是单元阵列,并且单元阵列的每个元素是时间表的单元阵列,然后标记信号集具有等于单元数组元素的数量的数量。每个成员可以具有任何数量的时间表,并且在成员内的每个时间表可以具有任何数量的变量。

    示例:LabeledSignalSet({{时间表(秒(1:10)',Randn(10,3)),时间表(秒(1:7)',Randn(7,2))},{时间表(秒(1:3)',Randn(3,1))}})有两个成员。第一构件包含在1 Hz上采样的三个信号10秒,并在1 Hz上采样的两个信号7秒。第二构件包含在1 Hz上采样的一个信号3秒。

  • 如果输入数据源,src,是一个音频数据存储,那么标记的信号集具有多个成员,等于数据存储点的文件数。当来源属性包含具有文件名的字符向量的单元数组。每个成员包含读取相应的数据存储文件返回的所有信号。

对象功能

addlabeldefinitions. 将标签定义添加到标记的信号集
addmembers. 将成员添加到标记的信号集
countlabelvalues. 计数标签值
createdataStores 创建指向信号和标签数据的数据存储
EditLabeldefinition. 编辑标签定义属性
getLabeldefinitions. 在标记的信号集中获取标签定义
getLabeledSignal. 从标记的信号集获取标记的信号
getLabelnames. 在标记的信号集中获取标签名称
getLabelValues 从标记的信号集获取标签值
GetMembernames. 获取标记信号集中的成员名称
getsignal 获取标记信号集的信号
获取顶部的标签表
LANENDEFINITIONSHIERARAPT. 获取标签和子标签名称的分层列表
LabELDefinitionSsummary. 获取信号标签定义的汇总表
合并 合并两个或更多标记的信号集
removelabeldefinition. 从标记的信号集中删除标签定义
RemoveMembers. 从标记的信号集中删除成员
removePointValue 从点标签中删除行
removeregionValue. 从ROI标签删除行
resetlabelvalues. 将标签重置为默认值
setlabelvalue. 在标记信号集中设置标签值
setmembernames. 在标记信号集中设置成员名称
子集 使用成员子集获取新标记信号集

例子

崩溃

想想一组鲸鱼的声音录音。记录下来的鲸鱼声音包括颤音和呻吟声。颤音听起来像是一连串的咔哒声。呻吟低频哭泣与船角的声音类似。您想查看每个信号并将其标记以识别鲸鲸类型,颤音区域和呻吟区域。对于每个TRILL区域,您还需要标记高于某个阈值的信号峰值。

信号标签定义

定义一个属性标签来存储鲸鱼类型。可能的分类是蓝鲸、座头鲸和白鲸。

dwhaletype = signallabeldefinition(“WhaleType”......'labeltype''attribute'......'labeldatatype''分类'......“类别”,[“蓝色”“驼背”“白色”],......'描述''鲸型');

定义一个感兴趣区域(ROI)标签来捕获抱怨区域。定义另一个ROI标签来捕获颤音区域。

dMoans = signalLabelDefinition ('Moanregions'......'labeltype''roi'......'labeldatatype''逻辑'......'描述'呻吟的地区发生了“);DTRILLS = SIGNALLABELDEFINITION(“TrillRegions”......'labeltype''roi'......'labeldatatype''逻辑'......'描述''发生箱子的地区');

最后,定义点标签以捕获速率峰值。将此标签设置为SublabelDTRILLS.定义。

dtrillpeaks = signallabeldefinition('trillpeaks'......'labeltype'“点”......'labeldatatype'“数字”......'描述''trill山峰');dtrills.sublabels = dtrillpeaks;

标记信号集

创建一个LabeledSignalSet.用鲸鱼信号和标签定义。添加标签值来识别鲸鱼类型,呻吟和颤音区域,以及颤音的峰值。

加载标签为什么lbldefs = [dwhaletype dmoans dtrills];lss = labeledsignalset({whale1 whale2},lbldefs,“MemberNames”, {'鲸鱼1''鲸鱼2'},......'samplerate',fs,'描述''表征波浪歌曲区域');

使用标签层次结构和标签属性使用LANENDEFINITIONSHIERARAPT.LabELDefinitionSsummary.

LANENDEFINITIONSHIERARCHY(LSS)
ans ='whaletype sublabels:[] moanregions sublabels:[] Trillregions sublabels:trillpeaks'
LANENDEFININGSSSUMMARY(LSS)
ans =.3×9表LabelName LabelType LableDataType类别验证功能DefaultValue Sublabels标记说明____________________________________________________________________________________________trype“{3x1字符串} {0x0 double} {0x0 double} {0x0 double}”““鲸鱼类型”“Moanregions”“ROI”“逻辑”{[“n / a”] {0x0 double} {0x0 double} {0x0 double} {0x0 double}“”呻吟的区域“,呻吟声”“roilregions”“ROI”“逻辑”逻辑“{[”n / a“]} {0x0 double} {0x0 double} {0x0 double} {1x1 signallabeldefefinition}”“arrills发生的区域”

加载数据中的信号对应于两个蓝色鲸鱼的歌曲。设定“WhaleType”两个信号的值。

setLabelValue (lss 1“WhaleType”'蓝');setlabelvalue(lss,2,“WhaleType”'蓝');

可视化'标签'财产。表格有新添加的“WhaleType”两个信号的值。

lss.labels.
ans =.2×3表WhaleType MoanRegions TrillRegions _________ ___________ ____________ Whale1 blue {0x2 table} {0x3 table} Whale2 blue {0x2 table} {0x3 table}

可视化区域标签

想象鲸鱼的歌声来识别颤音和呻吟的区域。

子图(2,1,1)图((0:长度(鲸鲸)-1)/ fs,whale1)ylabel('鲸鱼1')子图(2,1,2)图((0:长度(鲸鲸2)-1)/ fs,whale2)ylabel('鲸鱼2'

图中包含2个轴。轴1包含类型线的对象。轴2包含类型线的对象。

呻吟地区是持续的低频哀号。

  • 鲸鱼有莫纳在大约7秒,12秒和17秒内居中。

  • 鲸鱼有呻吟率为约3秒,7秒和16秒。

将呻吟区域添加到标记集。指定ROI限制(以秒为单位)和标签值。

moanRegionsWhale1 = [6.1 7.7;11.4 - 13.1;16.5 - 18.1);mrsz1 = [size(moanRegionsWhale1,1) 1];setLabelValue (lss 1'Moanregions',moanregionswhale1,true(mrsz1));moanregionswhale2 = [2.5 3.5;5.8 8;15.4 16.7];MRSZ2 = [大小(MoanRegionsWhale2,1)1];setlabelvalue(lss,2,'Moanregions',moanregionswhale2,true(mrsz2));

颤音地区默默地有明显的声音爆发。

  • 鲸鱼在大约2秒内速降了速降。

  • 鲸鱼在大约12秒的速度下有一个速度。

将Trill区域添加到标记的集合。

trillRegionWhale1 = [1.4 3.1];trsz1 = [size(trillRegionWhale1,1) 1];setLabelValue (lss 1“TrillRegions”,trillregionwhale1,true(trsz1));trillregionwhale2 = [11.1 13];trsz2 = [size(trillregionwhale1,1)1];setlabelvalue(lss,2,“TrillRegions”,trillregionwhale2,true(trsz2));

创建一个signermask.每个鲸曲歌曲的对象并使用它来可视化和标记不同的区域。为更好的可视化,将标签值从逻辑到分类更改。

MR1 = GetLabelvalues(LSS,1,'Moanregions');mr1。值=分类(repmat (“呻吟”mrsz1));tr1 = getLabelValues (lss 1“TrillRegions”);tr1.value =分类(repmat(“颤音”,trsz1));msk1 = signalmask([mr1; tr1],'samplerate'Fs);次要情节(2,1,1)plotsigroi msk1, whale1 ylabel ('鲸鱼1')举行mr2 = getLabelValues (lss 2'Moanregions');MR2.VALUE =分类(REPMAT(“呻吟”,MRSZ2));tr2 = getlabelvalues(lss,2,“TrillRegions”);tr2.value =分类(repmat(“颤音”,trsz2));MSK2 =信号掩模([MR2; TR2],'samplerate'Fs);次要情节(2,1,2)plotsigroi msk2, whale2 ylabel ('鲸鱼2')举行

图中包含2个轴。轴1包含3个类型的线。轴2包含3个类型的线。

可视化点标签

为每个颤音区域标记三个峰值。对于点标签,您可以指定点位置和标签值。在本例中,点的位置是以秒为单位的。

peaklocswhale1 = [1.553 1.626 1.7];peakvalswhale1 = [0.211 0.254 0.211];setlabelvalue(lss,1,[“棘手”“trillpeaks”],......peaklocswhale1,papvalswhale1,'labelrowindex',1);子图(2,1,1)绘图(Peaklocswhale1,peakvalswhale1,'v')举行peaklocswhale2 = [11.214 11.288 11.437];peakvalswhale2 = [0.119 0.14 0.15];setlabelvalue(lss,2,[“棘手”“trillpeaks”],......peaklocswhale2,peakvalswhale2,'labelrowindex',1);子图(2,1,2)绘图(Peaklocswhale2,peakvalswhale2,'v')举行

图中包含2个轴。axis 1包含4个类型为line的对象。轴2包含4个类型线的物体。

探索标签值

使用探索标签值getLabelValues

getLabelvalues(LSS)
ans =.2×3表whaletype moanregions trillregions _________ ___________ ____________鲸鱼1蓝色{3x2表} {1x3表} whale2蓝色{3x2表} {1x3表}

检索标记集的第一成员的呻吟区。

GetLabelvalues(LSS,1,'Moanregions'
ans =.3×2表roilimits值_________________ 6.1 7.7 {[1]} 11.4 13.1 {[1]} 16.5 18.1 {[1]}

使用第二个输出参数列出标签的子标签。

[value,valuewithsublabel] = getLabelvalues(lss,1,“TrillRegions”
值=1×2表Roilimits值__________ _____ 1.4 3.1 {[1]}
ValueWithsublabel =.1×3表Roilimits Value Sublabels Trillpeaks __________ _____________ 1.4 3.1 {[1]} {3x2表}

要检索sublabel中的值,请将标签名称作为双元数组表示。

getlabelvalues(lss,1,[“棘手”“trillpeaks”])
ans =.3×2表位置值________ __________ 1.553 {[0.2110]} 1.626 {[0.2540]} 1.7 {[0.2110]}

找到与集合的第二个成员对应的第三串峰值的值。

getLabelvalues(LSS,2,[“棘手”“trillpeaks”],......'labelrowindex',1,“SublabelRowIndex”3,3)
ans =.1×2表位置值________ __________ 11.437 {[0.1500]}

使用MATLAB®指定包含作为MAT文件的一组音频信号的路径。每个文件都包含一个信号变量和采样率。列出文件的名称。

文件夹= fullfile(matlabroot,“工具箱”“matlab”“audiovideo”);lst = dir(附加(文件夹,“/*.mat”));nms = {lst(:)。name}'
nms =7x1细胞{'chirp.mat'} {'gong.mat'} {'handel.mat'} {'笑声.mat'} {'mtlb.mat'} {'mtlb.mat'} {'splat.mat'} {'train.mat'}

创建指向指定文件夹的信号数据存储。将采样率变量名称设置为FS.,这对所有文件都是常见的。生成排除文件的数据存储的子集mtlb.mat.类的源使用子集数据存储LabeledSignalSet.对象。

sds = signalDatastore(文件夹,“samplerevariablename”“FS”);SDS =子集(SDS,〜StrcMP(NMS,“mtlb.mat”));lss = labeledsignalset(SDS);

创建三个标签定义以标记信号:

  • 定义一个逻辑属性标签,对于包含人类声音的信号是真的。

  • 定义数字点标签,标记每个信号的最大位置和幅度。

  • 定义一个分类的兴趣区域(ROI)标签,以挑选每个信号的非凸起,均匀长度的随机区域。

将信号标签定义添加到标记的信号集。

vc = signalLabelDefinition (“声音”'labeltype''attribute'......'labeldatatype''逻辑''defaultvalue'、假);mx = signalLabelDefinition (“最大”'labeltype'“点”......'labeldatatype'“数字”);rs = signallabeldefinition(“ranroi”'labeltype''roi'......'labeldatatype''分类'“类别”,[“roi”“其他”]);addLabeldefinitions(LSS,[VC MX RS])

标记信号:

  • 标签“handel.mat”'笑声..有人类的声音。

  • 用来islocalmax.功能要找到每个信号的最大值。标记其位置和值。

  • 用来兰德罗函数生成多个长度区域N/ 10样品可以适合长度的信号N给定最小的分离N/6个区域间样本。标记他们的位置,并分配给ROI类别。

当标记点和区域时,将样本值转换为时间值。减去1以说明MATLAB®数组索引,并除以样本率。

kj = 1;Hasdata(SDS)[SIG,INFO] =读取(SDS);FS = INFO.SAMPLEDE;[〜,fn] = fileparts(info.filename);如果fn ==.“汉德尔”| | fn = =“笑”setlabelvalue(lss,kj,“声音”,真正的)结束xm = find(iSlocalmax(SIG,'maxnumextrema',1));setlabelvalue(lss,kj,“最大”,(xm-1)/ fs,sig(xm))n =长度(sig);ROIS = RANDROI(n,圆形(n / 10),圆形(n / 6));setlabelvalue(lss,kj,“ranroi”,(rois-1)/ fs,repelem(“roi”,size(rois,1)) kj = kj+1;结束

验证只有两个信号包含声音。

countLabelValues (lss“声音”
ans =.2×3表语音计数百分比_____ _____ _______ _ _____ false 4 66.667 TRUE 2 33.333

验证两个信号是否具有1的最大幅度。

countLabelValues (lss“最大”
ans =.5×4表最大计数百分比MemberCount ______________________ ____________ ___________ 0.80000000000000004441 1 16.667 1 0.89113331915798421612 1 16.667 1 0.94730769230769229505 1 16.667 11 2 33.333 2 1.0575668990330560071 1 16.667 1

验证每个信号有四个不重叠的随机感兴趣区域。

countLabelValues (lss“ranroi”
ans =.2×4表Ranroi计数百分比成员______ _____ ___________________________________________其他0 0 0

使用标记信号集中的数据创建两个数据存储:

  • SignalDataStore.对象SD.包含信号数据。

  • arrayDatastore对象ld包含标签信息。指定要包含与您创建的所有标签对应的信息。

[SD,LD] = CreateDataStore(LSS,[“声音”“ranroi”“最大”]);

使用数据存储中的信息绘制信号并显示其标签。

  • 用A.signermask.对象突出蓝色的兴趣区域。

  • 绘制黄线以标记最大值的位置。

  • 将红色轴标签添加到包含人类声音的信号。

Tiledlayout.flowhasdata(SD)[SG,NF] =读取(SD);LBLS =读(LD);nextdile msk = signalmask(lbls {:}。ranroi {:},'samplerate',NF.Samplerate);Plotsigroi(msk,sg)颜色栏Xlabel('')[x,y] = meshgrid(lbls {:}。最大{:}。位置,ylim);hold情节(X, Y,'linewidth'2,'颜色'“# EDB120”)举行如果lbls {:}。声音{:} ylabel(“表示”'颜色''#d95319'结束结束

图包含6个轴。axis 1包含4个类型为line的对象。轴2包含4个类型线的物体。轴3包含4个类型的类型。轴4包含4个类型的线。轴5包含4个类型的线。轴6包含4个类型的线。

函数Roilims = Randroi(n,wid,sep)num =地板((n + sep)/(wid + sep));HQ = HistCounts(RANDI(NUM + 1,1,N-NUM * WID-(NUM-1)* SEP),(1:NUM + 2)-1/2);roilims =(1 +(0:num-1)*(wid + sep)+ cumsum(hq(1:num)))'+ [0 wid-1];结束

另请参阅

应用程序

对象

在R2018B中介绍