このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
tfridge
時間-周波数リッジ
構文
説明
例
入力引数
出力引数
アルゴリズム
関数は、ペナルティが課された順方向/逆方向の貪欲法を使用して、最大エネルギー リッジを時間-周波数行列から抽出します。アルゴリズムは、各時間点で –ln A を最小化することによって最大時間-周波数リッジを検索します。ここで、A は行列の絶対値です。–ln A を最小化することは A の値を最大化することと等価です。アルゴリズムは、オプションで、周波数ビン間の距離に比例するペナルティをもつ周波数のジャンプを制約します。
次の例は、周波数ビン間の距離の 2 倍のペナルティを使用した時間-周波数リッジのアルゴリズムを示しています。具体的には、要素 (j,k)
と (m,n)
間の距離は、(j-m)2
として定義されます。時間-周波数の行列には、3 つの周波数ビンと 3 つのタイム ステップがあります。行列の列はタイム ステップに対応し、行列の行は周波数ビンに対応します。2 つ目の行の値は正弦波を表します。
行列は次のとおりとします。
1 4 4 2 2 2 5 5 4
(1,2) 要素の値の更新は次のとおりです。
最初の時間点の値はそのまま変更しません。行列の (1,2) 要素をもつアルゴリズムを開始します。これは、2 つ目の時間点の最初の周波数ビンを表します。ビンの値は 4 です。(1,2) 要素からそれらの距離を基にして最初の列の値にペナルティを課します。最初の列にペナルティを適用して次を作成します。
original value + penalty × distance 1 + 2 × 0 = 1 2 + 2 × 1 = 4 5 + 2 × 4 = 13
最初の列の最小値は 1 です。これはビン 1 にあります。1 4 4 2 13 5
列 1 の最小値を現在のビンの値 4 に追加します。(1,2) の更新された値は 5 になります。これはビン 1 から派生しています。
列 2 の残りの要素に対して値を次のように更新します。
ステップ 2a と同じプロセスを使用してペナルティ係数をもつ、元の列 1 の値を再計算します。ステップ 2b と同じプロセスを使用して残りの 2 つ目の列の値を取得します。たとえば、(2,2) 要素を更新する場合 (ビンの値 2 があります)、列にペナルティを適用すると以下が得られます。
最小値 2 を現在のビン値に追加します。(2,2) の更新された値が 4 になります。(3,2) 要素を更新した後、行列は次のようになります。original value + penalty × distance 1 + 2 × 1 = 3 2 + 2 × 0 = 2 5 + 2 × 1 = 7
2 つ目の列のみ更新されています。添字は値の派生元の列にあるビンのインデックスを示します。1 5(1) 4 2 4(2) 2 5 9(2) 4
3 つ目の列に対して手順 2 を繰り返します。ただし、ペナルティは更新された 2 つ目の列に適用されます。たとえば、(1,3) 要素を更新すると、ペナルティは次のようになります。
最小値 5 (最初のビンにあります) が (1,3) ビン値に追加されます。3 つ目の列の値すべてを更新した後、最後の行列は次のようになります。5 + 2 × 0 = 5 4 + 2 × 1 = 6 9 + 2 × 4 = 17
1 5(1) 9(1) 2 4(2) 6(2) 5 9(2) 10(2)
行列の最後の列から始めて、最小値を見つけます。現在のビンから前の時間点のそのビンの原点に移行することによって行列を通じて時間順に戻ります。ビンのインデックスを継続して追跡します。これはリッジを構成するパスを形成します。アルゴリズムは最小値をもつビンの代わりに元のビンを使用して遷移を平滑化します。この例の場合、リッジのインデックスは、
2
、2
、2
です。これは、ステップ 1 で示す行列の行 2 で正弦波のエネルギー パスと一致します。
複数のリッジを抽出している場合、アルゴリズムは時間-周波数の行列から最初のリッジを削除して、プロセスを繰り返します。
拡張機能
バージョン履歴
R2016b で導入