Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

signalMask

信号マスクの変更および変換、ならびに信号の関心領域の抽出

R2020b 以降

説明

signalMask を使用して、信号の関心領域の位置、および各領域のラベルまたはカテゴリの値を保存します。

signalMask を使用して次のことができます。

  • テーブル、categorical シーケンス、またはバイナリ シーケンスの行列として信号マスクを表現。

  • 関心領域の持続時間の拡張または短縮、同じカテゴリの領域で十分に近いもののマージ、長さが十分ではない領域の削除を行って、関心領域を変更。

  • 信号ベクトルから信号の関心領域を抽出。

  • 色分けされた関心領域を使って信号をプロット。

作成

説明

msk = signalMask(src) は、入力データ ソース src の信号マスクを作成します。"マスク" は、信号の関心領域の位置、および各領域のラベルまたはカテゴリの値を定義します。

msk = signalMask(src,Name,Value) は、名前と値の引数を使用してプロパティを設定します。複数の名前と値の引数を指定できます。各プロパティ名を引用符で囲みます。

入力引数

すべて展開する

入力データ ソース。関心領域 (ROI) table、categorical ベクトル シーケンス、またはバイナリ シーケンスの行列として指定します。

  • src が ROI table の場合、2 つの値を含めなければなりません。

    • 1 番目の変数は 2 列の行列です。この行列の各行には、信号の関心領域の始点と終点を格納します。

      • SampleRate が指定されている場合、signalMask は、秒単位で表される時間値として範囲を解釈します。

      • SampleRate が指定されていない場合、signalMask は、サンプルのインデックスとして範囲を解釈します。行列の要素が整数でない場合、signalMask は、その要素の値を 0 より大きい最も近い整数に丸めます。

    • 2 番目の変数には、領域のラベルを格納します。このラベルは、categorical 配列または string として指定します。

  • src が categorical ベクトル シーケンスである場合、同じ値をもつ隣接するカテゴリ要素のグループは、その特定のカテゴリのラベルが付けられた信号の関心領域を表します。どのカテゴリにも属さない (ラベル値をもたない) 要素は、欠損値を表す categorical 値として指定する必要があります。この要素は <undefined> と表示されます。詳細については、categorical を参照してください。

  • src がバイナリ シーケンスから成る P 列の行列である場合、各列は、P 個の異なる各カテゴリについて true 要素で関心領域がマークされ、1 ~ P の整数でラベルが付けられた信号マスクとして解釈されます。Categories プロパティを使用して、P 個のカテゴリ名が格納されたリストを指定することもできます。

例: signalMask(table([2 4;6 7],["male" "female"]')) は、3 つのサンプルをもつ領域 male と 2 つのサンプルをもつ領域 female を使用して信号マスクを指定します。

例: signalMask(categorical(["" "male" "male" "male" "" "female" "female" ""]',["male" "female"])) は、3 つのサンプルをもつ領域 male と 2 つのサンプルをもつ領域 female を使用して信号マスクを指定します。

例: signalMask([0 1 1 1 0 0 0 0;0 0 0 0 0 1 1 0]','Categories',["male" "female"]) は、3 つのサンプルをもつ領域 male と 2 つのサンプルをもつ領域 female を使用して信号マスクを指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | table | categorical

プロパティ

すべて展開する

この プロパティ は読み取り専用です。

入力ソースのタイプ。"roiTable""categoricalSequence"、または "binarySequences" として返されます。このプロパティは src から推定されるもので、ユーザーが設定することはできません。

例: signalMask(table([2 4;6 7],["male" "female"]')) は、SourceType"roiTable" として返します。

例: signalMask(categorical(["" "male" "male" "male" "" "female" "female" ""]',["male" "female"])) は、SourceType"categoricalSequence" として返します。

例: signalMask([0 1 1 1 0 0 0 0;0 0 0 0 0 1 1 0]','Categories',["male" "female"]) は、SourceType"binarySequences" として返します。

データ型: string

この プロパティ は読み取り専用です。

サンプル レート値。正の数値スカラーとして指定します。src が ROI table として指定された場合、signalMask は、秒単位で表される領域範囲がこのテーブルに格納されていると仮定します。このプロパティを省略すると、このオブジェクトは、すべての領域範囲をサンプルのインデックスとして処理します。

データ型: single | double

カテゴリ名。string ベクトル、または文字ベクトルの cell 配列として指定します。このプロパティは、src がバイナリ シーケンスの行列である場合のみ設定できます。src がその他の入力タイプである場合、signalMask によって src からカテゴリ名が直接推定され、このプロパティは読み取り専用になります。このベクトルは、src の列数と同じ数の要素をもち、i 番目のカテゴリは src の i 番目の列に対応します。src が P 個の列をもち、このプロパティが指定されていない場合、signalMask はカテゴリ名を ["1" "2" ... "P"] に設定します。

データ型: string | char

カテゴリのサブセットを選択するオプション。logical 値として指定します。マスク作成後にこのプロパティを false に設定すると、Categories に含まれるすべてのカテゴリが選択されます。SpecifySelectedCategories は既存のオブジェクトでのみ使用でき、名前と値の引数として指定することはできません。

データ型: logical

選択したカテゴリのインデックス。Categories のカテゴリ要素を指す整数のインデックス値のベクトルとして指定します。このプロパティにリストされていないカテゴリは、signalMask のオブジェクト関数を呼び出したときにマスク入力からフィルターで除外されます。カテゴリのインデックスは昇順に並べ替えなければなりません。このプロパティは、SpecifySelectedCategoriestrue である場合にのみ適用されます。SelectedCategories は既存のオブジェクトにのみ使用でき、名前と値の引数として指定することはできません。

例: カテゴリのセット ["woman" "girl" "man" "boy"] が与えられたとき、SelectedCategories[1 2 4] として指定すると、["woman" "girl" "boy"] が選択され、他はフィルターで除外されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

領域を左に拡張するサンプルの数。正の整数として指定します。シーケンスの先頭に達した場合は、拡張済みのサンプルの数が打ち切られます。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

領域を右に拡張するサンプルの数。正の整数として指定します。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

領域を左から短縮するサンプルの数。正の整数として指定します。signalMask は、領域の長さ以上のサンプルの数だけ短縮された領域を削除します。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

領域を右から短縮するサンプルの数。正の整数として指定します。signalMask は、領域の長さ以上のサンプルの数だけ短縮された領域を削除します。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

マージされる領域間の距離。正の整数として指定します。このプロパティを指定すると、signalMask は、指定されたサンプル数以下の間隔がある、同じカテゴリの領域をマージします。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

保持する領域の最小長。正の整数として指定します。このプロパティを指定すると、signalMask は、指定されたサンプル数より短い領域を削除します。詳細については、領域範囲の変更を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

オブジェクト関数

binmaskバイナリ シーケンス マスクの行列の取得
catmaskcategorical シーケンス マスクの取得
extractsigroi信号マスクに基づく関心領域の抽出
plotsigroi信号マスクに基づく信号領域のプロット
roimaskROI table マスクの取得

すべて折りたたむ

Fs=7418Hz でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。

load mtlb
t = (0:length(mtlb)-1)/Fs;

信号の分散が大きく変化している点を検出することによって、単語内の母音と子音を識別します。変化点の数を 5 つに制限します。

q = findchangepts(mtlb,"Statistic","rms","MaxNumChanges",5);

信号をプロットして変化点を表示します。

findchangepts(mtlb,"Statistic","rms","MaxNumChanges",5)
axis tight

Figure contains an axes object. The axes object with title Number of changepoints = 5 Total log weighted dispersion = -4405.482 contains 2 objects of type line.

単語内の各文字に対応する関心領域を定義します。

roitable = t([[1;q] [q;length(mtlb)]]);

順序を維持したまま領域のラベルを割り当てます。

x = ["M" "A" "T" "L" "A" "B"]';
y = unique(x,"stable");
c = categorical(x,y);

関心領域の信号マスクおよび対応するラベルを作成します。領域が隣接するのを防ぐため、各領域を右から 1 サンプルだけ短縮します。関心領域 table のマスクを表示します。

src = table(roitable,c);
msk = signalMask(src,"SampleRate",Fs,"RightShortening",1);
roimask(msk)
ans=6×2 table
         roitable          c
    ___________________    _

          0    0.017525    M
    0.01766     0.10461    A
    0.10475     0.22162    T
    0.22176     0.33675    L
    0.33688     0.46535    A
    0.46549     0.53909    B

信号内で "A" と発声されている場所にギャップを挿入します。

m = mtlb;

seq = catmask(msk,length(mtlb));
m(seq == "A") = NaN;

自己回帰過程を使用して信号を再構成します。再構成後の信号から各関心領域を抽出します。

p = fillgaps(m);

w = extractsigroi(msk,p);

各領域の後に一時停止しながら音声を再生するには、次の行のコメントを解除します。

% for k = 1:length(w)
%     sound(cell2mat(w{k}),Fs)
%     pause(0.5)
% end

再構成後の信号をプロットし、関心領域を可視化します。

figure
plotsigroi(msk,p)

Figure contains an axes object. The axes object with xlabel Seconds contains 6 objects of type line.

詳細

すべて展開する

バージョン履歴

R2020b で導入