メインコンテンツ

setLabelValue

ラベル付き信号セットのラベル値の設定

説明

setLabelValue(lss,midx,lblName,val) は、midx で指定されたラベル付き信号セット lss のメンバーの属性ラベル lblName の値を val に設定します。lblName に既定値があり、ラベルをその既定値に設定する場合は、val を省略します。

setLabelValue(lss,midx,lblName,locs,val) は、lblName という名前の点ラベルに点を追加します。locs は、追加される点の数と位置を指定します。

setLabelValue(lss,midx,lblName,tLimits,val) は、lblName という名前の ROI ラベルに時間範囲 tLimits によって区切られた領域を追加します。tLimits の行数は、追加される領域の数を指定します。

setLabelValue(lss,midx,lblName,tLimits,fLimits,val) は、時間範囲と tLimits と周波数範囲 fLimits で区切られた領域を、lblName という名前の時間-周波数 ROI ラベルに追加します。tLimitsfLimits の行数は同じでなければなりません。この共通の数は、追加される領域の数を指定します。

setLabelValue(___,'LabelRowIndex',ridx) は、ROI ラベルまたは点ラベルの行インデックス (ridx) を指定します。指定された値により、その行の現在の値が置き換えられます。この引数を省略した場合、この関数は既存のラベル値に ROI または点の値を追加します。

setLabelValue(___,'SublabelRowIndex',sridx) は、ROI サブラベルまたは点サブラベルの行インデックス (sridx) を指定します。指定された値により、そのサブラベルの行の現在の値が置き換えられます。

すべて折りたたむ

クジラの歌の録音を含むラベル付き信号セットを読み込みます。

load whales
lss
lss = 
  labeledSignalSet with properties:

             Source: {2×1 cell}
         NumMembers: 2
    TimeInformation: "sampleRate"
         SampleRate: 4000
             Labels: [2×3 table]
        Description: "Characterize wave song regions"

 Use labelDefinitionsHierarchy to see a list of labels and sublabels.
 Use setLabelValue to add data to the set.

各メンバーの最大値に対応する新しいラベルを信号セットに追加します。

theMax = signalLabelDefinition('Maximum', ...
    'LabelDataType','numeric', ...
    'Description','Maximum value of the signal');
addLabelDefinitions(lss,theMax)

各ラベル付き信号について、新しいラベルの値を信号の最大値に設定します。信号とその最大値をプロットします。

fs = lss.SampleRate;
for k = 1:lss.NumMembers
    sg = getSignal(lss,k);
    [mx,ix] = max(sg);
    
    setLabelValue(lss,k,'Maximum',mx)
    
    subplot(2,1,k)
    plot((0:length(sg)-1)/fs,sg,ix/fs,mx,'*')
end

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 2 contains 2 objects of type line. One or more of the lines displays its values using only markers

セット内のラベルの名前と値を表示します。

lbldefs = getLabelValues(lss)
lbldefs=2×4 table
                 WhaleType    MoanRegions    TrillRegions     Maximum  
                 _________    ___________    ____________    __________

    Member{1}      blue       {3×2 table}    {1×3 table}     {[0.2850]}
    Member{2}      blue       {3×2 table}    {1×3 table}     {[0.3791]}

信号の最大値は、属性として表すよりも点ラベルとして表す方が良いと判断します。数値の定義を削除し、最大値を再定義します。

removeLabelDefinition(lss,'Maximum')
theMax = signalLabelDefinition('Maximum', ...
    'LabelType','point','LabelDataType','numeric', ...
    'Description','Maximum value of the signal');
addLabelDefinitions(lss,theMax)

各ラベル付き信号について、新しいラベルの値を信号の最大値に設定します。

for k = 1:lss.NumMembers
    sg = getSignal(lss,k);
    [mx,ix] = max(sg);
    setLabelValue(lss,k,'Maximum',ix/fs,mx)
end

信号とその最大値をプロットします。

for k = 1:lss.NumMembers
    subplot(2,1,k)
    sg = getSignal(lss,k);
    peaks = getLabelValues(lss,k,'Maximum');
    plot((0:length(sg)-1)/fs,sg, ...
        peaks.Location,cell2mat(peaks.Value),'*')
end

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 2 contains 2 objects of type line. One or more of the lines displays its values using only markers

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)

Figure contains an axes object. The axes object with title Fres = 64.5333 Hz, Tres = 50 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

このスペクトログラムには、ガウス原子に対応する時間-周波数領域の 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))

Figure contains an axes object. The axes object contains an object of type image.

ラベル マスクを読み取り、時間-周波数イメージの上に表示します。

lbl = read(ads);
im = zeros([imSize 3]);
im(:,:,1) = lbl{1};
hold on
imagesc(im,AlphaData=0.5*lbl{1})
hold off

Figure contains an axes object. The axes object contains 2 objects of type image.

入力引数

すべて折りたたむ

ラベル付き信号セット。labeledSignalSet オブジェクトとして指定します。

例: labeledSignalSet({randn(100,1) randn(10,1)},signalLabelDefinition("female")) は、属性 "female" を含むランダム信号の 2 つのメンバーのセットを指定します。

メンバーの行番号。正の整数で指定します。midx は、メンバーの行番号をラベル付き信号セットのLabelsテーブルに表示される行番号として指定します。

ラベル名。文字ベクトルまたは string スカラーとして指定します。

ラベルまたはサブラベル名。ラベルを指定するには、文字ベクトルまたは string スカラーを使用します。サブラベルを指定するには、文字ベクトルの 2 要素 cell 配列または 2 要素 string 配列を使用します。

  • 最初の要素は親ラベルの名前です。

  • 2 番目の要素はサブラベルの名前です。

ROI ラベルまたは点ラベルのサブラベルを対象にする場合は、ラベルを設定する親ラベルの 'LabelRowIndex' も指定しなければなりません。サブラベル値を設定するには、親の行が既に存在していなければなりません。

例: signalLabelDefinition("Asleep",'LabelType','roi') は、臨床試験中に患者が睡眠状態であった信号の領域用に、"Asleep" という名前のラベルを指定します。

例: {'Asleep' 'REM'} または ["Asleep" "REM"] は、患者がレム睡眠状態である信号の領域を指定します。

ラベル値。数値、logical 値、categorical 値、string、table、または timetable として指定します。val は、任意の前述の型の配列にすることもできます。val は、lblName に指定したデータ型でなければなりません。

  • locs を指定する場合は、locs と同じ数の要素を val が持たなければなりません。

  • tLimits を指定する場合は、tLimits の行数と同じ数の要素を val がもたなければなりません。

    • tLimits に複数の行があり、lblName の型が 'numeric' または 'logical' の場合、val はベクトルまたは cell 配列でなければなりません。

    • tLimits に複数の行があり、lblName の型が 'string' または 'categorical' の場合、val は string 配列または文字ベクトルの cell 配列でなければなりません。

    • tLimits に複数の行があり、lblName の型が 'table' または 'timetable' の場合、val は table または timetable の cell 配列でなければなりません。

非スカラーのラベル値の代入

非スカラーのラベル値を複数の関心点または関心領域に割り当てるには、cell 配列を使用しなければなりません。たとえば、次のラベル付き信号セットが与えられたとします。

lss = labeledSignalSet(randn(10,1), [...
    signalLabelDefinition('pl','LabelType','point', ...
                               'LabelDataType','numeric') ...
    signalLabelDefinition('rl','LabelType','ROI', ...
                               'LabelDataType','numeric')]);
次のコマンドを見てみましょう。
setLabelValue(lss,1,'pl',5,{[3 4]'})
setLabelValue(lss,1,'rl',[2 3; 8 9],{[2 1]' [6 7]})
5 に列ベクトル [3 4]'2 から 3 の範囲の領域に列ベクトル [2 1]'8 から 9 の範囲の領域に行ベクトル [6 7] のラベルを付けます。

点の位置。ベクトルとして指定します。

  • lss に時間情報がない場合は、locs が点の位置に対応するインデックスを定義します。

  • lss に時間情報がある場合は、locs が点の位置に対応する時点を定義します。

locs は、lblName のラベルの定義のPointLocationsDataTypeプロパティによって指定されたデータ型でなければなりません。

領域の時間範囲。2 列の行列として指定します。

  • lss に時間情報がない場合、tLimits は、領域の定義に使用される最小インデックスと最大インデックスを定義します。

  • lss に時間情報がある場合、tLimits は、領域の定義に使用される最小時点と最大時点を定義します。

tLimits は、lblName のラベルの定義の ROILimitsDataType (Signal Processing Toolbox) プロパティによって指定されたデータ型でなければなりません。

例: seconds([0:3; 1:4]')

例: [0:3; 1:4]'

領域の周波数範囲。2 列の行列として指定します。

  • lss に時間情報がない場合、tLimits は、関数が領域の定義で使用する最小および最大の正規化周波数 (ラジアン/サンプル単位) を定義します。

  • lss に時間情報がある場合、tLimits は、関数が領域の定義で使用する最小および最大の周波数 (Hz 単位) を定義します。

fLimits は、lblName のラベルの定義の ROILimitsDataType (Signal Processing Toolbox) プロパティによって指定されたデータ型でなければなりません。

例: [0:0.02:0.2; 0.3:0.02:0.5]'

例: [0:20:200; 300:20:500]'

ラベルの行インデックス。正の整数で指定します。この引数は、点ラベル、ROI ラベル、および時間-周波数 ROI ラベルにのみ適用されます。

サブラベルの行インデックス。正の整数で指定します。この引数は、lblname でラベルとサブラベルのペアが指定されていて、サブラベルのタイプが ROI または点である場合にのみ適用されます。

バージョン履歴

R2018b で導入

すべて展開する