主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

tfridge

時間——周波数リッジ

説明

冰箱= tfridge (解冻fは,時間——周波数行列解冻と周波数ベクトルfから最大エネルギーの時間——周波数リッジを抽出し,時間依存周波数冰箱を出力します。

冰箱iridge) = tfridge (解冻fは最大エネルギーリッジに対応する行インデックスベクトルも返します。

冰箱iridgelridge) = tfridge (解冻fは線形インデックスlridgeも返します。この場合,tfm (lridge)は最大エネルギーリッジに沿った解冻の値になります。

___) = tfridge (解冻f点球は,周波数ビン間の平方距離を点球によってスケーリングすることにより,周波数の変更にペナルティを課します。

___) = tfridge (___“NumRidges”,nrは,最大エネルギーのnr時間——周波数リッジを抽出します。この構文は,前の構文の入力引数の任意の組み合わせを受け入れます。

___) = tfridge (___“NumRidges”,nr“NumFrequencyBins”,nbinsは,複数のリッジを抽出するとき,解冻から除去されるリッジの周囲の周波数ビンの数を指定します。

すべて折りたたむ

鋭いリッジをもつ時間——周波数行列に類似する行列を作成します。行列を3次元で可視化します。

t = 0:0.05:10;f = 0:0.2:8;房车= 1;[F T] = ndgrid (F, T);S = 0(大小(T));年代(abs ((f - 4) cos ((T-6) ^ 2)) < 0.1) =房车;网格(T、F、S)视图(-30年,60岁)

图中包含一个坐标轴。轴包含一个类型为曲面的对象。

行列にノイズを追加してプロットを再表示します。

S = S +兰德(大小(S)) / 10;网格(T、F、S)视图(-30、60)包含(“时间”) ylabel (“频率”

图中包含一个坐标轴。轴包含一个类型为曲面的对象。

リッジを抽出して結果をプロットします。

(冰箱,~,lridge) = tfridge (S、f);rvals = S (lridge);持有rvals plot3 (t,冰箱,“k”“线宽”, 4)

图中包含一个坐标轴。轴包含面、线两个对象。

3千赫で1秒間サンプリングされる信号を生成します。信号は2つのトーンと2次チャープで構成されます。

  • 最初のトーンは周波数1000 Hz,単位振幅です。

  • 2番目のトーンは周波数1200 Hz,単位振幅です。

  • チャープの初期周波数は500 Hzで,サンプリングの最後には750 Hzに到達します。振幅は6です。

fs = 3000;t = 0:1 / fs: 1 - 1 / f;x1 = 6 *唧唧声(fs / 6 t, t(结束),f / 4、“二次”);x2 =罪(2 *π* fs / 3 * t);x3 =罪(2 *π* fs / 2.5 * t);x = x1 + x2 + x3;

信号のフーリエシンクロスクイーズド変換を計算し,表示します。

海温,[f] = fsst (x, fs);mx = max (abs (sst(:))) *的(大小(t));网格(t、f、abs (sst)视图(2)

图中包含一个坐标轴。轴包含一个类型为曲面的对象。

最も高いエネルギーの信号成分を2つ抽出し,プロットします。周波数の変更に対するペナルティを設定しません。

penval = 0;冰箱= tfridge (sst, f, penval,“NumRidges”2);持有mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个坐标轴。轴包含面、线三个对象。

2つのトーンは同じ振幅をもち,アルゴリズムはそれらの間をジャンプします。周波数の変更に対してペナルティを1に設定します。

penval = 1;冰箱= tfridge (sst, f, penval,“NumRidges”2);网格(t、f、abs (sst)视图(2)包含(“时间(s)”) ylabel (的频率(赫兹))举行mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个坐标轴。轴包含面、线三个对象。

比較のために,ペナルティを高い値に設定します。チャープの周波数が一定でないため,ペナルティが課されます。

penval = 1000;冰箱= tfridge (sst, f, penval,“NumRidges”2);网格(t、f、abs (sst)视图(2)包含(“时间(s)”) ylabel (的频率(赫兹))举行mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个坐标轴。轴包含面、线三个对象。

2つの2次チャープで構成された信号を生成します。信号は1 kHzで3秒間サンプリングされます。チャープでは,瞬時周波数がサンプリング間隔の中間点について対称です。一方のチャープは凹であり,他方のチャープは凸です。凸,凹チャープはチャープの2倍の振幅があります。

fs = 1 e3;t = 0:1 / fs: 3;x =唧唧声(t - 1.5,100 1.1,200,“二次”[],“凸”);y = 2 *唧唧声(t - 1.5,300 1.1,400,“二次”[],“凹”);%听到,键入soundsc(x+y,fs)

信号のフーリエシンクロスクイーズド変換を計算し,表示します。

sig = x + y;(sst f t] = fsst (sig, fs);fsst(团体、fs、“桠溪”

图中包含一个坐标轴。标题为傅里叶同步压缩变换的轴包含一个类型为image的对象。

最大のエネルギーをもつ2つの時間——周波数リッジを抽出します。周波数の変更に対してペナルティ1を指定します。2番目のリッジを抽出する前に、最大エネルギーをもつリッジ周囲にある 1 周波数ビンを削除します。リッジをプロットします。

负反馈= 1;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个坐标轴。轴线包含2个线型对象。

1ビンでは十分ではありません。関数が、最初のリッジの勾配に、2 番目のリッジの一部が存在することを検出しました。削除するビン数を 50 に増やして、計算を繰り返します。

负反馈= 50;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个坐标轴。轴线包含2个线型对象。

削除するビン数が多すぎると,低いエネルギーのリッジが歪みます。数を15に減らして,計算を繰り返します。

负反馈= 15;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个坐标轴。轴线包含2个线型对象。

2つのリッジに対応する変換の逆変換を行います。リッジを追加して,信号を再構成します。再構成した信号とチャープの差をプロットします。

itr = ifsst (sst,[],红外光谱、“NumFrequencyBins”负反馈);xrec =总和(itr ');情节(t, xrec - (x + y)) ylim([-。1。1)

图中包含一个坐标轴。轴包含一个线型对象。

%听到,键入soundsc(xrec,fs)

一致度は,ほとんどの時間で良好ですが,周波数が最も急激に変化する両端では劣化しています。

入力引数

すべて折りたたむ

時間-周波数行列。行列として指定します。

例:fsst (cos(π/ 4 * (0:159)))は,正弦波のシンクロスクイーズド変換を指定します。

データ型:|
複素数のサポート:あり

サンプリング周波数。ベクトルとして指定します。fの長さは,解冻の行数と等しくなければなりません。

データ型:|

周波数の変更に対するペナルティ。非負の実数スカラーとして指定します。

データ型:|

抽出する時間——周波数リッジの数。“NumRidges”と正の整数スカラーとで構成されるコンマ区切りのペアとして指定します。この名前と値のペアは,入力引数リストで任意の場所に解冻に続けて指定できます。

nrが1より大きい場合,tfridgeは以下を行います。

  1. 最大エネルギーの時間——周波数リッジを抽出

  2. 解冻から,抽出されたリッジおよびそのリッジのいずれかの側の隣接する周波数のビンnbins個に含まれるエネルギーを削除

  3. 変更された解冻内の最大エネルギーリッジを抽出

  4. nr個のリッジが抽出されるまで繰り返す

データ型:|

複数のリッジを抽出するときに削除するビンの数。“NumFrequencyBins”および正の整数スカラーで構成されるコンマ区切りのペアとして指定します。nbinsは,サンプリング周波数の1/4より小さくなければなりません。片側のビンの数がnbinsより少ない周波数エッジの近傍のインデックスは,より少ないビンの数を使用して再構成されます。

データ型:|

出力引数

すべて折りたたむ

時間——周波数リッジ。nr列の行列として返されます。冰箱の行数は,解冻の列数と同じになります。最初の列は,最大エネルギーのリッジに対応する周波数を含みます。後続の列は,エネルギーの高い順に他のリッジの周波数を含みます。

リッジの行インデックス。nr列の行列として返されます。iridgeの行数は,解冻の列数と同じになります。最初の列は,最大エネルギーのリッジに対応するインデックスを含みます。後続の列は,エネルギーの高い順に他のリッジのインデックスを含みます。

リッジの線形インデックス。nr列の行列として返されます。lridgeは,tfm (lridge)がリッジに沿った解冻の振幅になるように定義されます。lridgeの行数は,解冻の列数と同じになります。最初の列は,最大エネルギーのリッジに対応するインデックスを含みます。後続の列は,エネルギーの高い順に他のリッジのインデックスを含みます。

例:lridgeは,sub2ind(大小(tfm)、iridge repmat((1:尺寸(tfm, 2))”,1,nr))と等価です。

アルゴリズム

関数は,ペナルティが課された順方向/逆方向の貪欲法を使用して,最大エネルギーリッジを時間——周波数行列から抽出します。アルゴリズムは,各時間点でln一を最小化することによって最大時間——周波数リッジを検索します。ここで,は行列の絶対値です。ln一を最小化することは一の値を最大化することと等価です。アルゴリズムは,オプションで、周波数ビン間の距離に比例するペナルティをもつ周波数のジャンプを制約します。

次の例は,周波数ビン間の距離の2倍のペナルティを使用した時間——周波数リッジのアルゴリズムを示しています。具体的には,要素(j, k)(m, n)間の距離は,(j-m)2として定義されます。時間——周波数の行列には,3つの周波数ビンと3つのタイムステップがあります。行列の列はタイムステップに対応し,行列の行は周波数ビンに対応します。2つ目の行の値は正弦波を表します。

  1. 行列は次のとおりとします。

    1 4 4 2 2 2 5 5 4

  2. (1、2)要素の値の更新は次のとおりです。

    1. 最初の時間点の値はそのまま変更しません。行列の (1,2) 要素をもつアルゴリズムを開始します。これは、2 つ目の時間点の最初の周波数ビンを表します。ビンの値は 4 です。(1,2) 要素からそれらの距離を基にして最初の列の値にペナルティを課します。最初の列にペナルティを適用して次を作成します。

      原值+罚×距离1 + 2 × 0 = 1 2 + 2 × 1 = 4 5 + 2 × 4 = 13
      1 4 4 2 13 5
      最初の列の最小値は1です。これはビン1にあります。

    2. 列1の最小値を現在のビンの値4に追加します。(1、2)の更新された値は5になります。これはビン1から派生しています。

  3. 列2の残りの要素に対して値を次のように更新します。

    2ステップと同じプロセスを使用してペナルティ係数をもつ,元の列1の値を再計算します。ステップ2 bと同じプロセスを使用して残りの2つ目の列の値を取得します。たとえば,(2,2)要素を更新する場合(ビンの値2があります),列にペナルティを適用すると以下が得られます。

    原值+罚×距离1 + 2 × 1 = 3 2 + 2 × 0 = 2 5 + 2 × 1 = 7
    最小値2を現在のビン値に追加します。(2,2)の更新された値が4になります。(2)要素を更新した後,行列は次のようになります。
    1 - 5(1)4 2 4(2)2 5 9(2)4
    2つ目の列のみ更新されています。添字は値の派生元の列にあるビンのインデックスを示します。

  4. 3つ目の列に対して手順2を繰り返します。ただし,ペナルティは更新された2つ目の列に適用されます。たとえば,(1、3)要素を更新すると,ペナルティは次のようになります。

    5 + 2 × 0 = 5 4 + 2 × 1 = 6 9 + 2 × 4 = 17
    最小値5(最初のビンにあります)が(1、3)ビン値に追加されます。3つ目の列の値すべてを更新した後,最後の行列は次のようになります。
    1 - 5(1)9(1)2 4(2)6(2)5个9(2)10(2)

  5. 行列の最後の列から始めて,最小値を見つけます。現在のビンから前の時間点のそのビンの原点に移行することによって行列を通じて時間順に戻ります。ビンのインデックスを継続して追跡します。これはリッジを構成するパスを形成します。アルゴリズムは最小値をもつビンの代わりに元のビンを使用して遷移を平滑化します。この例の場合、リッジのインデックスは、222です。これは,ステップ1で示す行列の行2で正弦波のエネルギーパスと一致します。

複数のリッジを抽出している場合,アルゴリズムは時間——周波数の行列から最初のリッジを削除して,プロセスを繰り返します。

拡張機能

R2016bで導入