signalLabelDefinition
信号ラベル定義の作成
説明
データ セットの信号ラベル定義を作成するには、signalLabelDefinition
を使用します。ラベルは、属性、領域、または関心点に対応させることができます。signalLabelDefinition
オブジェクトのベクトルを使用して labeledSignalSet
を作成します。
作成
説明
入力引数
name
— ラベル名
文字ベクトル | string スカラー
ラベル名。文字ベクトルまたは string スカラーとして指定します。
データ型: char
| string
プロパティ
Name
— ラベルの名前
文字ベクトル | string スカラー
ラベルの名前。文字ベクトルまたは string スカラーとして指定します。
データ型: char
| string
LabelType
— ラベルのタイプ
"attribute"
(既定値) | "roi"
| "point"
| "attributeFeature"
| "roiFeature"
ラベルのタイプ。次のいずれかとして指定します。
"attribute"
— 信号特性を定義します。"roi"
— 関心領域での信号特性を定義します。"point"
— 関心点での信号特性を定義します。"attributeFeature"
— 特徴に対応する信号特性を定義します。"roiFeature"
— 特徴に対応する関心領域での信号特性を定義します。
データ型: char
| string
LabelDataType
— ラベルのデータ型
"logical"
(既定値) | "categorical"
| "numeric"
| "string"
| "table"
| "timetable"
ラベルのデータ型。"logical"
、"categorical"
、"numeric"
、"string"
、"table"
、または "timetable"
として指定します。このプロパティを "categorical"
に設定する場合は、Categoriesプロパティを使用してカテゴリの配列を指定します。このオブジェクトは、attributeFeature
ラベルや roiFeature
ラベルの timetable データ型や table データ型をサポートしません。
データ型: char
| string
Categories
— ラベル カテゴリ名
string 配列 | 文字ベクトルの cell 配列
ラベル カテゴリ名。string 配列または文字ベクトルの cell 配列として指定します。配列の要素は一意でなければなりません。このプロパティは、LabelDataTypeプロパティを "categorical"
に設定した場合にのみ適用されます。
例: LabelDataType="categorical",Categories=["apple","orange"]
データ型: char
| string
ROILimitsDataType
— ROI 範囲のデータ型
"double"
(既定値) | "duration"
ROI 範囲のデータ型。"double"
または "duration"
として指定します。このプロパティは、LabelTypeを "roi"
に設定した場合にのみ適用されます。
データ型: char
| string
PointLocationsDataType
— 点の位置のデータ型
"double"
(既定値) | "duration"
点の位置のデータ型。"double"
または "duration"
として指定します。このプロパティは、LabelTypeを "point"
に設定した場合にのみ適用されます。
データ型: char
| string
ValidationFunction
— 検証関数
関数ハンドル
検証関数。関数ハンドルとして指定し、labeledSignalSet
オブジェクトのラベル値を設定するときに使用されます。このプロパティは、LabelDataTypeを "categorical"
、"logical"
、"numeric"
、"table"
、または "timetable"
に設定した場合にのみ適用されます。指定されていない場合、関数は入力値が正しいデータ型であることのみをチェックします。LabelDataTypeが "categorical"
に設定されている場合、関数は入力がCategoriesを使用して指定された値のいずれかであることをチェックします。関数は入力値を受け入れて、値が有効な場合は true
を返します。値が無効な場合は false
を返します。
例: LabelDataType
="numeric",DefaultValue
=1,ValidationFunction
=@(x)x<2
データ型: function_handle
DefaultValue
— ラベルの既定値
[]
(既定値) | LabelDataType
の値
ラベルの既定値。LabelDataTypeを使用して指定された型の値として指定します。LabelDataTypeが "categorical"
に設定されている場合、DefaultValueはCategoriesを使用して指定された値のいずれかでなければなりません。
例: LabelDataType
="categorical",Categories
=["apple","orange"],DefaultValue
="apple"
データ型: char
| double
| logical
| string
| table
Description
— ラベルの説明
文字ベクトル | string スカラー
ラベルの説明。文字ベクトルまたは string スカラーとして指定します。
例: Description="Patient is asleep"
データ型: char
| string
Tag
— ラベル タグ識別子
文字ベクトル | string スカラー
ラベル タグ識別子。文字ベクトルまたは string スカラーとして指定します。このプロパティを使用して、より大きなラベル付けスキームまたはパブリック ラベル付けセットで同じラベルを識別します。
例: Tag="Peak1"
データ型: char
| string
Sublabels
— サブラベルの配列
信号ラベル定義オブジェクト
サブラベルの配列。信号ラベル定義オブジェクトとして指定します。複数のサブラベルを指定するには、このプロパティを信号ラベル定義オブジェクトのベクトルに設定します。このプロパティを使用して、親ラベルとその子の関係を作成します。LabelTypeが "attributeFeature"
または "roiFeature"
に設定されている場合、このプロパティは適用されません。
メモ
サブラベルにサブラベルをもたせることはできません。
例: Sublabels
=[signalLabelDefinition("negative"),signalLabelDefinition("positive")]
FrameSize
— フレーム サイズ
数値スカラー
フレーム サイズ。数値スカラーとして指定します。LabelTypeが "roiFeature"
に設定されている場合は、FrameSize
を指定しなければなりません。
例: FrameSize=50
データ型: double
FrameOverlapLength
— 隣接するフレームのオーバーラップの長さ
0
(既定値) | 数値スカラー
隣接するフレームのオーバーラップの長さ。数値スカラーとして指定します。このプロパティを有効にするには、LabelTypeを "roiFeature"
に設定します。FrameOverlapLength
と FrameRate
を同時に指定することはできません。FramerOverlapLength
を指定しない場合、オブジェクトはオーバーラップの長さをゼロと見なします。
例: FrameSize=50,FrameOverlapLength=5
データ型: double
FrameRate
— フレーム レート
0
(既定値) | 数値スカラー
フレーム レート。数値スカラーとして指定します。このプロパティを有効にするには、LabelTypeを "roiFeature"
に設定します。FrameRate
と FrameOverlapLength
を同時に指定することはできません。FrameRate
を指定しない場合、オブジェクトはフレーム間にオーバーラップがないと見なします。
例: FrameSize=50,FrameRate=45
データ型: double
オブジェクト関数
labelDefinitionsHierarchy | ラベル名とサブラベル名の階層リストの取得 |
labelDefinitionsSummary | 信号ラベル定義の概要テーブルの取得 |
例
クジラの歌のラベル定義
クジラの声の録音のセットについて考えてみましょう。録音されたクジラの声は、ふるえ声とうめき声で構成されています。"ふるえ声" の音声は一連のクリックに似ています。"うめき声" は、船の警笛による音声に似た低周波数の鳴き声です。各信号を確認してラベルを付けて、クジラの種類、ふるえ声の領域、およびうめき声の領域を識別します。また、ふるえ声の各領域では、特定のしきい値よりも高い信号ピークにラベルを付けます。
信号ラベル定義
クジラの種類を格納する属性ラベルを定義します。使用するカテゴリは、blue whale、humpback whale、および white whale です。
dWhaleType = signalLabelDefinition('WhaleType',... 'LabelType','attribute',... 'LabelDataType','categorical',... 'Categories',{'blue','humpback','white'},... 'Description','Whale type');
うめき声の領域を取得するための関心領域 (ROI) ラベルを定義します。ふるえ声の領域を取得するための別の ROI ラベルを定義します。
dMoans = signalLabelDefinition('MoanRegions',... 'LabelType','roi',... 'LabelDataType','logical',... 'Description','Regions where moans occur'); dTrills = signalLabelDefinition('TrillRegions',... 'LabelType','roi',... 'LabelDataType','logical',... 'Description','Regions where trills occur');
最後に、ふるえ声のピークを取得するための点ラベルを定義します。このラベルは、dTrills
定義のサブラベルとして設定します。
dTrillPeaks = signalLabelDefinition('TrillPeaks',... 'LabelType','point',... 'LabelDataType','numeric',... 'Description','Trill peaks'); dTrills.Sublabels = dTrillPeaks;
ラベル付き信号セット
クジラの信号とラベル定義を使用して、labeledSignalSet
を作成します。クジラの種類、うめき声とふるえ声の領域、およびふるえ声のピークを識別するためのラベル値を追加します。
load labelwhalesignals lbldefs = [dWhaleType dMoans dTrills]; lss = labeledSignalSet({whale1 whale2},lbldefs,'MemberNames',{'Whale1','Whale2'}, ... 'SampleRate',Fs,'Description','Characterize whale song regions');
labelDefinitionsHierarchy
および labelDefinitionsSummary
を使用して、ラベル階層とラベルのプロパティを可視化します。
labelDefinitionsHierarchy(lss)
ans = 'WhaleType Sublabels: [] MoanRegions Sublabels: [] TrillRegions Sublabels: TrillPeaks '
labelDefinitionsSummary(lss)
ans=3×9 table
LabelName LabelType LabelDataType Categories ValidationFunction DefaultValue Sublabels Tag Description
______________ ___________ _____________ ____________ __________________ ____________ ___________________________ ___ ____________________________
"WhaleType" "attribute" "categorical" {3x1 string} {["N/A" ]} {0x0 double} {0x0 double } "" "Whale type"
"MoanRegions" "roi" "logical" {["N/A" ]} {0x0 double} {0x0 double} {0x0 double } "" "Regions where moans occur"
"TrillRegions" "roi" "logical" {["N/A" ]} {0x0 double} {0x0 double} {1x1 signalLabelDefinition} "" "Regions where trills occur"
読み込まれたデータの信号は、2 匹のシロナガスクジラの歌に対応しています。両方の信号に 'WhaleType'
値を設定します。
setLabelValue(lss,1,'WhaleType','blue'); setLabelValue(lss,2,'WhaleType','blue');
'Labels'
プロパティを可視化します。この table には、両方の信号に新しく追加された 'WhaleType'
値が含まれています。
lss.Labels
ans=2×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Whale1 blue {0x2 table} {0x3 table}
Whale2 blue {0x2 table} {0x3 table}
領域ラベルの可視化
クジラの歌を可視化して、ふるえ声とうめき声の領域を特定します。
subplot(2,1,1) plot((0:length(whale1)-1)/Fs,whale1) ylabel('Whale 1') subplot(2,1,2) plot((0:length(whale2)-1)/Fs,whale2) ylabel('Whale 2')
うめき声の領域は持続した低周波数のうめき声です。
whale1
には約 7 秒、12 秒、17 秒で中央揃えされたうめき声があります。whale2
には約 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 = [size(moanRegionsWhale2,1) 1]; setLabelValue(lss,2,'MoanRegions',moanRegionsWhale2,true(mrsz2));
ふるえ声の領域にはサイレンスで区切られた異なるバーストの音声があります。
whale1
には約 2 秒で中央揃えされたふるえ声があります。whale2
には約 12 秒で中央揃えされたふるえ声があります。
ラベル付きセットにふるえ声の領域を追加します。
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));
各クジラの歌についてsignalMask
オブジェクトを作成し、それを使用してさまざまな領域を可視化してラベルを付けます。より見やすくなるように、ラベル値を logical から categorical に変更します。
mr1 = getLabelValues(lss,1,'MoanRegions'); mr1.Value = categorical(repmat("moan",mrsz1)); tr1 = getLabelValues(lss,1,'TrillRegions'); tr1.Value = categorical(repmat("trill",trsz1)); msk1 = signalMask([mr1;tr1],'SampleRate',Fs); subplot(2,1,1) plotsigroi(msk1,whale1) ylabel('Whale 1') hold on mr2 = getLabelValues(lss,2,'MoanRegions'); mr2.Value = categorical(repmat("moan",mrsz2)); tr2 = getLabelValues(lss,2,'TrillRegions'); tr2.Value = categorical(repmat("trill",trsz2)); msk2 = signalMask([mr2;tr2],'SampleRate',Fs); subplot(2,1,2) plotsigroi(msk2,whale2) ylabel('Whale 2') hold on
点ラベルの可視化
ふるえ声の各領域の 3 つのピークにラベルを付けます。点ラベルでは、点の位置とラベル値を指定します。この例では、点の位置は秒単位です。
peakLocsWhale1 = [1.553 1.626 1.7]; peakValsWhale1 = [0.211 0.254 0.211]; setLabelValue(lss,1,{'TrillRegions','TrillPeaks'}, ... peakLocsWhale1,peakValsWhale1,'LabelRowIndex',1); subplot(2,1,1) plot(peakLocsWhale1,peakValsWhale1,'v') hold off peakLocsWhale2 = [11.214 11.288 11.437]; peakValsWhale2 = [0.119 0.14 0.15]; setLabelValue(lss,2,{'TrillRegions','TrillPeaks'}, ... peakLocsWhale2,peakValsWhale2,'LabelRowIndex',1); subplot(2,1,2) plot(peakLocsWhale2,peakValsWhale2,'v') hold off
ラベル値の確認
getLabelValues
を使用してラベル値を確認します。
getLabelValues(lss)
ans=2×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Whale1 blue {3x2 table} {1x3 table}
Whale2 blue {3x2 table} {1x3 table}
ラベル付きセットの最初のメンバーのうめき声の領域を取得します。
getLabelValues(lss,1,'MoanRegions')
ans=3×2 table
ROILimits Value
____________ _____
6.1 7.7 {[1]}
11.4 13.1 {[1]}
16.5 18.1 {[1]}
2 番目の出力引数を使用して、ラベルのサブラベルを一覧表示します。
[value,valueWithSublabel] = getLabelValues(lss,1,'TrillRegions')
value=1×2 table
ROILimits Value
__________ _____
1.4 3.1 {[1]}
valueWithSublabel=1×3 table
ROILimits Value Sublabels
TrillPeaks
__________ _____ ___________
1.4 3.1 {[1]} {3x2 table}
サブラベル内の値を取得するには、ラベル名を 2 要素の配列として表します。
getLabelValues(lss,1,{'TrillRegions','TrillPeaks'})
ans=3×2 table
Location Value
________ __________
1.553 {[0.2110]}
1.626 {[0.2540]}
1.7 {[0.2110]}
セットの 2 番目のメンバーに対応する、3 番目のふるえ声のピークの値を検索します。
getLabelValues(lss,2,{'TrillRegions','TrillPeaks'}, ... 'LabelRowIndex',1,'SublabelRowIndex',3)
ans=1×2 table
Location Value
________ __________
11.437 {[0.1500]}
ラベル値のカウントおよびデータストアの作成
MATLAB® に MAT ファイルとして含まれているオーディオ信号セットへのパスを指定します。各ファイルには、信号変数とサンプル レートが格納されています。ファイル名をリストします。
folder = fullfile(matlabroot,"toolbox","matlab","audiovideo"); lst = dir(append(folder,"/*.mat")); nms = {lst(:).name}'
nms = 7x1 cell
{'chirp.mat' }
{'gong.mat' }
{'handel.mat' }
{'laughter.mat'}
{'mtlb.mat' }
{'splat.mat' }
{'train.mat' }
指定したフォルダーを示す信号データストアを作成します。サンプル レート変数名を Fs
に設定します。これは、すべてのファイルで共通です。ファイル mtlb.mat
を除くデータストアのサブセットを生成します。サブセット データストアをlabeledSignalSet
オブジェクトのソースとして使用します。
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sds = subset(sds,~strcmp(nms,"mtlb.mat")); lss = labeledSignalSet(sds);
信号にラベルを付けるために、次の 3 つのラベル定義を作成します。
人間の声を含む信号を真とする論理属性ラベルを定義。
各信号の最大値の位置と振幅を示す数値ポイント ラベルを定義。
各信号にオーバーラップのない、長さが均一なランダム領域を選択するためのカテゴリカル関心領域 (ROI) ラベルを定義。
この信号ラベルの定義をラベル付き信号セットに追加します。
vc = signalLabelDefinition("Voice",'LabelType','attribute', ... 'LabelDataType','logical','DefaultValue',false); mx = signalLabelDefinition("Maximum",'LabelType','point', ... 'LabelDataType','numeric'); rs = signalLabelDefinition("RanROI",'LabelType','ROI', ... 'LabelDataType','categorical','Categories',["ROI" "other"]); addLabelDefinitions(lss,[vc mx rs])
信号にラベルを付けます。
人間の声を含むものとして、
'handel.mat'
と'laughter.mat'
にラベルを付けます。関数
islocalmax
を使用して、各信号の最大値を求めます。その位置と値にラベルを付けます。関数
randROI
を使用して、領域間の最小間隔が N/6 サンプルの場合に長さ N の信号に収まるだけの長さ N/10 サンプルの領域を生成します。それらの位置にラベルを付け、ROI
カテゴリに割り当てます。
点と領域にラベルを付けるときに、サンプル値を時間値に変換します。MATLAB® 配列のインデックス付けを考慮して 1 を減算し、サンプル レートで除算します。
kj = 1; while hasdata(sds) [sig,info] = read(sds); fs = info.SampleRate; [~,fn] = fileparts(info.FileName); if fn=="handel" || fn=="laughter" setLabelValue(lss,kj,"Voice",true) end xm = find(islocalmax(sig,'MaxNumExtrema',1)); setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm)) N = length(sig); rois = randROI(N,round(N/10),round(N/6)); setLabelValue(lss,kj,"RanROI",(rois-1)/fs,repelem("ROI",size(rois,1))) kj = kj+1; end
2 つの信号にのみ音声が含まれていることを確認します。
countLabelValues(lss,"Voice")
ans=2×3 table
Voice Count Percent
_____ _____ _______
false 4 66.667
true 2 33.333
この 2 つの信号の最大振幅が 1 であることを確認します。
countLabelValues(lss,"Maximum")
ans=5×4 table
Maximum Count Percent MemberCount
______________________ _____ _______ ___________
0.80000000000000004441 1 16.667 1
0.89113331915798421612 1 16.667 1
0.94730769230769229505 1 16.667 1
1 2 33.333 2
1.0575668990330560071 1 16.667 1
各信号に、オーバーラップのない 4 つのランダムな関心領域があることを確認します。
countLabelValues(lss,"RanROI")
ans=2×4 table
RanROI Count Percent MemberCount
______ _____ _______ ___________
ROI 24 100 6
other 0 0 0
ラベル付き信号セットのデータを使用して 2 つのデータストアを作成します。
signalDatastore
オブジェクトsd
には信号データが格納される。arrayDatastore
オブジェクトld
にはラベル付け情報が格納される。作成したすべてのラベルに対応する情報を含めるように指定します。
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
データストアの情報を使用して、信号をプロットし、それらのラベルを表示します。
signalMask
オブジェクトを使用して、関心領域を青色で強調表示。最大値の位置を示すために黄色の線をプロット。
人間の声を含む信号に対して赤色の軸ラベルを追加。
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') xline(lbls{:}.Maximum{:}.Location, ... 'LineWidth',2,'Color','#EDB120') if lbls{:}.Voice{:} ylabel('VOICED','Color','#D95319') end end
function roilims = randROI(N,wid,sep) num = floor((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]; end
バージョン履歴
R2018b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)