このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
labeledSignalSet
説明
labeledSignalSet
を使用して、ラベル付き信号をラベル定義と共に保存します。signalLabelDefinition
を使用して、信号ラベル定義を作成します。
作成
構文
説明
は、空のラベル付き信号セットを作成します。セットに信号を追加するには、lss
= labeledSignalSetaddMembers
を使用します。セットにラベル定義を追加するには、addLabelDefinitions
を使用します。
は、入力データ ソース lss
= labeledSignalSet(src
)src
のラベル付き信号セットを作成します。セットにラベル定義を追加するには、addLabelDefinitions
を使用します。
は、信号ラベル定義 lss
= labeledSignalSet(src
,lbldefs
)lbldefs
を使用して入力データ ソース src
のラベル付き信号セットを作成します。信号ラベル定義を作成するには、signalLabelDefinition
を使用します。
入力引数
src
— 入力データ ソース
行列 | cell 配列 | timetable | signalDatastore
オブジェクト | audioDatastore
オブジェクト
入力データ ソース。行列、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 = 7x1 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: [1x1 signalDatastore] NumMembers: 6 TimeInformation: "inherent" Labels: [6x0 table] Description: "" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
lbldefs
— ラベル定義
signalLabelDefinition
オブジェクトのベクトル
ラベル定義。signalLabelDefinition
オブジェクトのベクトルとして指定します。
mnames
— メンバー名
文字ベクトル | string スカラー | 文字ベクトルの cell 配列 | string 配列
メンバー名。文字ベクトル、string スカラー、文字ベクトルの cell 配列、または string 配列として指定します。
例: labeledSignalSet({randn(100,1) randn(10,1)},'MemberNames',{'llama' 'alpaca'})
は、2 つのメンバー、'llama'
および 'alpaca'
をもつランダム信号のセットを指定します。
プロパティ
Description
— ラベル付き信号セットの説明
文字ベクトル | string スカラー
ラベル付き信号セットの説明。文字ベクトルまたは string スカラーとして指定します。
例: 'Description','Sleep test patients by sex and age'
データ型: char
| string
SampleRate
— サンプルレート値
正のスカラー | ベクトル
この プロパティ は読み取り専用です。
サンプルレート値。正のスカラーまたはベクトルとして指定します。このプロパティは、データ ソースに固有の時間情報が含まれていない場合にのみ有効です。
ラベル付きセットのすべての信号に同じサンプルレートを指定するには、
SampleRate
を正の数値スカラーに設定します。ラベル付きセットの各メンバーが、メンバーごとに異なるサンプルレートでサンプリングされた信号を持つように指定するには、
SampleRate
をベクトルに設定します。このベクトルの要素数は、セットのメンバー数と等しくなければなりません。セットのメンバーが異なるサンプルレートの信号を持つ場合は、timetable を使用してサンプルレートを指定します。
例: 'SampleRate',[1e2 1e3]
は、セットの最初のメンバーの信号が 100 Hz のレートでサンプリングされ、2 番目のメンバーの信号が 1 kHz でサンプリングされることを指定します。
SampleTime
— サンプル時間値
正のスカラー | ベクトル | duration
スカラー | duration
ベクトル
TimeValues
— 時間値
ベクトル | duration
ベクトル | 行列 | cell 配列
この プロパティ は読み取り専用です。
時間値。ベクトル、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 秒間サンプリングされます。
NumMembers
— セット内のメンバー数
正の整数
この プロパティ は読み取り専用です。
セット内のメンバー数。正の整数として指定します。
Labels
— ラベル テーブル
table
この プロパティ は読み取り専用です。
ラベル テーブル。MATLAB® の table として指定します。Labels
の各変数は、セットに定義されたラベルに対応しています。Labels
の各行は、データ ソースのメンバーに対応しています。Labels
の行名は、メンバー名です。
データ型: table
TimeInformation
— ソースの時間情報
'none'
| 'sampleRate'
| 'sampleTime'
| 'timeValues'
| 'inherent'
ソースの時間情報。次のいずれかに指定します。
'none'
— ソース内の信号に時間情報がありません。'sampleRate'
— ソース内の信号は、指定されたレートでサンプリングされます。'sampleTime'
— ソース内の信号は、指定されたサンプル間の時間間隔を持ちます。'timeValues
— ソース内の信号は、各サンプルに対応する時間値を持ちます。'inherent'
— ソース内の信号に、固有の時間情報が含まれます。このような信号の例には、MATLAB の timetable があります。
データ型: char
| string
Source
— ラベル付き信号セットのデータ ソース
行列 | cell 配列 | timetable
この プロパティ は読み取り専用です。
ラベル付き信号セットのデータ ソース。行列、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 ラベルからの行の削除 |
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" {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)