labeledSignalSet
ラベル付き信号セットの作成
説明
labeledSignalSet
を使用して、ラベル付き信号をラベルの定義と共に保存します。signalLabelDefinition
を使用して、信号ラベルの定義を作成します。
作成
構文
説明
は、空のラベル付き信号セットを作成します。セットに信号を追加するには、lss
= labeledSignalSetaddMembers
を使用します。セットにラベルの定義を追加するには、addLabelDefinitions
を使用します。
は、入力データ ソース lss
= labeledSignalSet(src
)src
のラベル付き信号セットを作成します。セットにラベルの定義を追加するには、addLabelDefinitions
を使用します。
は、信号ラベルの定義 lss
= labeledSignalSet(src
,lbldefs
)lbldefs
を使用して入力データ ソース src
のラベル付き信号セットを作成します。信号ラベルの定義を作成するには、signalLabelDefinition
を使用します。
は、入力データ ソース lss
= labeledSignalSet(src
,lbldefs
,'MemberNames',mnames
)src
のラベル付き信号セットを作成して、セットのメンバーの名前を指定します。setMemberNames
を使用して、メンバー名を変更します。lbldefs
はオプションです。
は、名前と値の引数を使用してプロパティを設定します。複数の名前と値の引数を指定できます。各プロパティ名を引用符で囲みます。lss
= labeledSignalSet(src
,lbldefs
,PropertyName=Value
)lbldefs
はオプションです。
入力引数
入力データ ソース。行列、cell 配列、timetable、signalDatastore
オブジェクト、または audioDatastore
(Audio Toolbox) オブジェクトとして指定します。src
は、セットのメンバー数、各メンバーの信号数、および各信号のデータを暗黙的に指定します。
例: {
には、2 つのメンバーがあります。最初のメンバーには、10 サンプルの信号が 3 つ含まれています。2 番目のメンバーには、17 サンプルの信号が 9 つ含まれています。randn
(10,3),randn
(17,9)}
例: {{
には、2 つのメンバーがあります。最初のメンバーには、10 サンプルの信号が 1 つ含まれています。2 番目のメンバーには、17 サンプルの信号が 1 つと、27 サンプルの信号が 1 つ含まれています。randn
(10,1)},{randn
(17,1),randn
(27,1)}}
例: {{
には、2 つのメンバーがあります。最初のメンバーには、1 Hz で 10 秒間サンプリングされた信号が 3 つと、1 Hz で 7 秒間サンプリングされた信号が 2 つ含まれています。2 番目のメンバーには、1 Hz で 3 秒間サンプリングされた信号が 1 つ含まれています。timetable
(seconds
(1:10)',randn
(10,3)),timetable
(seconds
(1:7)',randn
(7,2))},{timetable
(seconds
(1:3)',randn
(3,1))}}
例:ファイルを示す signalDatastore
オブジェクト
MATLAB® に MAT ファイルとして含まれているサンプル音声信号セットへのパスを指定します。各ファイルには、信号変数とサンプル レートが格納されています。ファイル名をリストします。
folder = fullfile(matlabroot,"toolbox","matlab","audiovideo"); lst = dir(append(folder,"/*.mat")); nms = {lst(:).name}'
nms = 7×1 cell
{'chirp.mat' }
{'gong.mat' }
{'handel.mat' }
{'laughter.mat'}
{'mtlb.mat' }
{'splat.mat' }
{'train.mat' }
指定したフォルダーを示す信号データストアを作成します。サンプル レート変数名を Fs
に設定します。これは、すべてのファイルで共通です。ファイル mtlb.mat
を除くデータストアのサブセットを生成します。これは、信号変数が y
と呼ばれないという点で他のファイルとは異なっています。
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sdss = subset(sds,~strcmp(nms,"mtlb.mat"));
サブセット データストアを labeledSignalSet
オブジェクトのソースとして使用します。
lss = labeledSignalSet(sdss)
lss = labeledSignalSet with properties: Source: [1×1 signalDatastore] NumMembers: 6 TimeInformation: "inherent" Labels: [6×0 table] Description: "" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
ラベルの定義。signalLabelDefinition
オブジェクトのベクトルとして指定します。
メンバー名。文字ベクトル、string スカラー、文字ベクトルの cell 配列、または string 配列として指定します。
例: labeledSignalSet({randn(100,1) randn(10,1)},'MemberNames',{'llama' 'alpaca'})
は、2 つのメンバー、'llama'
および 'alpaca'
をもつランダム信号のセットを指定します。
プロパティ
ラベル付き信号セットの説明。文字ベクトルまたは string スカラーとして指定します。
例: 'Description','Sleep test patients by sex and age'
データ型: char
| string
このプロパティは、オブジェクトの作成後に読み取り専用になります。
サンプル レート値。正のスカラーまたはベクトルとして指定します。このプロパティは、データ ソースに固有の時間情報が含まれていない場合にのみ有効です。
ラベル付きセットのすべての信号に同じサンプル レートを指定するには、
SampleRate
を正の数値スカラーに設定します。ラベル付きセットの各メンバーが、メンバーごとに異なるサンプル レートでサンプリングされた信号を持つように指定するには、
SampleRate
をベクトルに設定します。このベクトルの要素数は、セットのメンバー数と等しくなければなりません。セットのメンバーが異なるサンプル レートの信号を持つ場合は、timetable を使用してサンプル レートを指定します。
例: 'SampleRate',[1e2 1e3]
は、セットの最初のメンバーの信号が 100 Hz のレートでサンプリングされ、2 番目のメンバーの信号が 1 kHz でサンプリングされることを指定します。
このプロパティは、オブジェクトの作成後に読み取り専用になります。
時間値。ベクトル、duration
ベクトル、行列、または cell 配列として指定します。このプロパティは、データ ソースに固有の時間情報が含まれていない場合にのみ有効です。時間値は一意で、増加しなければなりません。
ラベル付きセットのすべての信号に同じ時間値を指定するには、
TimeValues
を数値ベクトルまたはduration
ベクトルに設定します。ベクトルはセット内のすべての信号と同じ長さでなければなりません。ラベル付きセットの各メンバーが同じ時間値の信号を持ち、メンバーごとに時間値が異なることを指定するには、
TimeValues
を数値行列またはduration
行列または cell 配列に設定します。TimeValues
が行列の場合は、列数がセットのメンバー数と等しくなければなりません。セット内のすべての信号は、長さが行列の行数と等しくなければなりません。TimeValues
が cell 配列の場合は、含まれるベクトル数がセットのメンバー数と等しくなければなりません。メンバー内のすべての信号は、長さが cell 配列内の対応するベクトルの要素数と等しくなければなりません。
セットのメンバーが異なる時間値の信号を持つ場合は、timetable を使用して時間値を指定します。
例: 'TimeValues',[1:1000;0:1/500:2-1/500]'
は、セットの最初のメンバーの信号が 1 Hz で 1000 秒間サンプリングされることを指定します。2 番目のメンバーの信号は、500 Hz で 2 秒間サンプリングされます。
例: 'TimeValues',seconds([1:1000;0:1/500:2-1/500]')
は、セットの最初のメンバーの信号が 1 Hz で 1000 秒間サンプリングされることを指定します。2 番目のメンバーの信号は、500 Hz で 2 秒間サンプリングされます。
例: 'TimeValues',{1:1000,0:1/500:2-1/500}
は、セットの最初のメンバーの信号が 1 Hz で 1000 秒間サンプリングされることを指定します。2 番目のメンバーの信号は、500 Hz で 2 秒間サンプリングされます。
例: 'TimeValues',{seconds(1:1000),seconds(0:1/500:2-1/500)}
は、セットの最初のメンバーの信号が 1 Hz で 1000 秒間サンプリングされることを指定します。2 番目のメンバーの信号は、500 Hz で 2 秒間サンプリングされます。
この プロパティ は読み取り専用です。
セット内のメンバー数。正の整数として返されます。
この プロパティ は読み取り専用です。
ラベル テーブル。MATLAB® table として返されます。Labels
の各変数は、セットに定義されたラベルに対応しています。Labels
の各行は、データ ソースのメンバーに対応しています。Labels
の行名は、メンバー名です。
データ型: table
ソースの時間情報。次のいずれかに指定します。
'none'
— ソース内の信号に時間情報がありません。'sampleRate'
— ソース内の信号は、指定されたレートでサンプリングされます。'sampleTime'
— ソース内の信号は、指定されたサンプル間の時間間隔を持ちます。'timeValues
— ソース内の信号は、各サンプルに対応する時間値を持ちます。'inherent'
— ソース内の信号に、固有の時間情報が含まれます。このような信号の例には、MATLAB の timetable があります。
データ型: char
| string
このプロパティは、オブジェクトの作成後に読み取り専用になります。
ラベル付き信号セットのデータ ソース。行列、timetable、cell 配列、またはオーディオ データストアとして指定します。
Source
が数値行列の場合、ラベル付き信号セットには、行列の列数に等しい信号数を含む 1 つのメンバーがあります。例:
labeledSignalSet(randn(10,3))
では、10 サンプルの信号を 3 つ含む 1 つのメンバーがあります。Source
が行列の cell 配列の場合、ラベル付き信号セットのメンバー数は、cell 配列内の行列数と等しくなります。各メンバーには、対応する行列の列数に等しい信号数が含まれます。例:
labeledSignalSet({randn(10,3),randn(17,9)})
には、2 つのメンバーがあります。最初のメンバーには、10 サンプルの信号が 3 つ含まれています。2 番目のメンバーには、17 サンプルの信号が 9 つ含まれています。Source
が cell 配列で、cell 配列の各要素が数値ベクトルの cell 配列である場合、ラベル付き信号セットのメンバー数は、cell 配列の要素数と等しくなります。メンバー内の各信号は、任意の長さを持つことができます。例:
labeledSignalSet({{randn(10,1)},{randn(17,1),randn(27,1)}})
には、2 つのメンバーがあります。最初のメンバーには、10 サンプルの信号が 1 つ含まれています。2 番目のメンバーには、17 サンプルの信号が 1 つと、27 サンプルの信号が 1 つ含まれています。Source
が数値を含む変数を持つ timetable の場合、ラベル付き信号セットには、変数の数に等しい信号数を含む 1 つのメンバーがあります。timetable の時間値は、型がduration
で、一意であり、増加しなければなりません。例:
labeledSignalSet(timetable(seconds(1:10)',randn(10,3)))
では、1 Hz で 10 秒間サンプリングされた信号を 3 つ含む 1 つのメンバーがあります。Source
が timetable の cell 配列で、各 timetable が任意の数の数値を持つ変数を持つ場合、ラベル付き信号セットのメンバー数は、timetable の数と等しくなります。各メンバーには、対応する timetable の変数の数に等しい信号数が含まれます。例:
labeledSignalSet({timetable(seconds(1:10)',randn(10,3)),timetable(seconds(1:5)',randn(5,13))})
には、2 つのメンバーがあります。最初のメンバーには、1 Hz で 10 秒間サンプリングされた信号が 3 つ含まれています。2 番目のメンバーには、1 Hz で 5 秒間サンプリングされた信号が 13 個含まれています。Source
が cell 配列で、cell 配列の各要素が timetable の cell 配列である場合、ラベル付き信号セットのメンバー数は、cell 配列の要素数と等しくなります。各メンバーは任意の数の timetable を持つことができ、メンバー内の各 timetable は任意の数の変数を持てます。例:
labeledSignalSet({{timetable(seconds(1:10)',randn(10,3)),timetable(seconds(1:7)',randn(7,2))},{timetable(seconds(1:3)',randn(3,1))}})
には、2 つのメンバーがあります。最初のメンバーには、1 Hz で 10 秒間サンプリングされた信号が 3 つと、1 Hz で 7 秒間サンプリングされた信号が 2 つ含まれています。2 番目のメンバーには、1 Hz で 3 秒間サンプリングされた信号が 1 つ含まれています。入力データ ソース
src
がオーディオ データストアの場合、ラベル付き信号セットのメンバー数は、データストアが示すファイルの数と等しくなります。Source
プロパティには、ファイル名を持つ文字ベクトルの cell 配列が含まれます。各メンバーには、対応するデータストア ファイルの読み取りによって返されたすべての信号が含まれます。
オブジェクト関数
addLabelDefinitions | ラベル付き信号セットへのラベルの定義の追加 |
addMembers | ラベル付き信号セットへのメンバーの追加 |
countLabelValues | ラベル値のカウント |
createDatastores | 信号およびラベル データを指すデータストアの作成 |
createFeatureData | Create feature table or matrix and response vectors |
editLabelDefinition | ラベルの定義のプロパティの編集 |
getAlternateFileSystemRoots | Get alternate file system roots when data source of labeled signal set is a datastore |
getLabelDefinitions | ラベル付き信号セットのラベルの定義の取得 |
getLabeledSignal | ラベル付き信号セットからのラベル付き信号の取得 |
getLabelIndices | Get label indices pointing to label definitions in labeled signal set |
getLabelNames | ラベル付き信号セットのラベル名の取得 |
getLabelValues | ラベル付き信号セットからのラベル値の取得 |
getMemberNames | ラベル付き信号セットのメンバー名の取得 |
getSignal | ラベル付き信号セットからの信号の取得 |
head | ラベル テーブルの先頭の行の取得 |
labelDefinitionsHierarchy | ラベル名とサブラベル名の階層リストの取得 |
labelDefinitionsSummary | 信号ラベルの定義の概要テーブルの取得 |
merge | 2 つ以上のラベル付き信号セットのマージ |
removeLabelDefinition | ラベル付き信号セットからのラベルの定義の削除 |
removeMembers | ラベル付き信号セットからのメンバーの削除 |
removePointValue | 点ラベルからの行の削除 |
removeRegionValue | ROI ラベルまたは時間-周波数 ROI ラベルからの行の削除 |
resetLabelValues | 既定値へのラベルのリセット |
setAlternateFileSystemRoots | Set alternate file system roots when data source of labeled signal set is a datastore |
setLabelValue | ラベル付き信号セットのラベル値の設定 |
setMemberNames | ラベル付き信号セットのメンバー名の設定 |
subset | メンバーのサブセットを持つ新しいラベル付き信号セットの取得 |
例
クジラの声の録音のセットについて考えてみましょう。録音されたクジラの声は、ふるえ声とうめき声で構成されています。"ふるえ声" の音声は一連のクリックに似ています。"うめき声" は、船の警笛による音声に似た低周波数の鳴き声です。各信号を確認してラベルを付けて、クジラの種類、ふるえ声の領域、およびうめき声の領域を識別します。また、ふるえ声の各領域では、特定のしきい値よりも高い信号ピークにラベルを付けます。
信号ラベルの定義
クジラの種類を格納する属性ラベルを定義します。使用するカテゴリは、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" {3×1 string} {["N/A" ]} {0×0 double} {0×0 double } "" "Whale type"
"MoanRegions" "roi" "logical" {["N/A" ]} {0×0 double} {0×0 double} {0×0 double } "" "Regions where moans occur"
"TrillRegions" "roi" "logical" {["N/A" ]} {0×0 double} {0×0 double} {1×1 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 {0×2 table} {0×3 table}
Whale2 blue {0×2 table} {0×3 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 {3×2 table} {1×3 table}
Whale2 blue {3×2 table} {1×3 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]} {3×2 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 = 7×1 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
R2025a 以降
時間-周波数関心領域 (ROI) ラベルの定義、およびスペクトログラム オプションを使用して、時間-周波数領域でガウス原子にラベルを付けます。
信号の生成とスペクトログラムの可視化
電圧制御発振器と 4 つのガウス原子で構成される信号を生成します。この信号は 14 kHz で 2 秒間サンプリングされます。信号のスペクトログラムをプロットします。
Fs = 14000; t = (0:1/Fs:2)'; st = 0.01; gaussFun = @(A,x,mu,f) exp(-(x-mu).^2/(2*st^2)).*sin(2*pi*f.*x)*A'; atomTimeCenters = [0.2 0.5 1 1.75]; atomFreqCenters = [2 6 2 5]*1000; s = gaussFun([1 1 1 1]/10,t,atomTimeCenters,atomFreqCenters); x = vco(chirp(t+.1,0,t(end),3).*exp(-2*(t-1).^2),[0.1 0.4]*Fs,Fs); s = s/10+x; bt = 0.2; tr = 0.05; op = 99; pspectrum(s,Fs,"spectrogram", ... Leakage=bt,TimeResolution=tr,OverlapPercent=op)
このスペクトログラムには、ガウス原子に対応する時間-周波数領域の 4 つのパッチが表示されます。すべての原子の時間と周波数を定義します。
atomTimes = atomTimeCenters'+[-st st]*5.5; atomFreqs = atomFreqCenters'+[-1 1]*200;
時間-周波数領域における信号へのラベル付け
ガウス原子にラベルを付けるため、logical の時間-周波数 ROI ラベルの定義を作成します。漏れ特性をもつスペクトログラム オプションを指定します。
opts = labelSpectrogramOptions("leakage", ... Leakage=40*(1-bt),Overlap=op, ... TimeResolutionMode="specify",TimeResolution=tr); lblDef = signalLabelDefinition("Atom", ... LabelDataType="logical", ... LabelType="roiTimeFrequency",TimeFrequencyOptions=opts);
信号と時間-周波数 ROI ラベルの定義からラベル付き信号セットを作成します。
lss = labeledSignalSet(s,lblDef,SampleRate=Fs);
時間-周波数領域で 4 つの原子にラベルを付けます。ラベルの値を true
に設定します。
setLabelValue(lss,1,"Atom",atomTimes,atomFreqs,true(1,4))
時間-周波数イメージとラベル マスクの可視化
時間-周波数 ROI ラベルのラベル付き信号セットからデータストアを作成します。
imSize = [512 768]; [sds,ads] = createDatastores(lss,"Atom", ... TimeFrequencyMapFormat="image", ... TimeFrequencyImageSize=imSize, ... TimeFrequencyLabelFormat="mask", ... TimeFrequencyMaskPriority=true);
時間-周波数イメージを読み取って表示します。
imagesc(read(sds))
ラベル マスクを読み取り、時間-周波数イメージの上に表示します。
lbl = read(ads); im = zeros([imSize 3]); im(:,:,1) = lbl{1}; hold on imagesc(im,AlphaData=0.5*lbl{1}) hold off
バージョン履歴
R2018b で導入labeledSignalSet
オブジェクトは、ROI 時間-周波数ラベルの定義をサポートします。
"roiTimeFrequency"
のラベルを含むラベルの定義を指定する。スペクトログラムとラベル マスクを指すデータストアを作成し、それらを使用してセグメンテーション用および検出用の深層学習モデルに学習させる。
時間-周波数ラベルをプログラムで編集する。ラベル値を設定し、ラベルの定義、名前、インデックス、ラベル付き信号を取得して、領域値を削除する。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)