信号アナライザーでのスペクトログラム計算
非定常信号は周波数成分が時間と共に変化する信号です。非定常信号の "スペクトログラム" は、周波数成分の時間発展の推定です。非定常信号のスペクトログラムを作成するために、信号アナライザーは以下の手順に従います。
信号を等しい長さのセグメントに分割します。セグメントは十分に短くなければならず、信号の周波数成分がセグメント内で感知されるほど変化してはいけません。セグメントはオーバーラップしている場合も、そうでない場合もあります。
各セグメントにウィンドウを適用してスペクトルを計算し、"短時間フーリエ変換" を求めます。
セグメントごとに、各スペクトルのパワーをデシベル単位で表示します。振幅を振幅依存のカラーマップをもつイメージとして並べて表します。
ディスプレイで利用できるスペクトログラム表示は、1 つの信号のみを含みます。
詳細については、Spectrogram Computation with Signal Processing Toolboxを参照してください。
信号のセグメント分割
スペクトログラムを作成するために、まず、信号をオーバーラップの可能性のあるセグメントに分割します。信号アナライザーで、セグメントの長さおよび隣接するセグメント間のオーバーラップの量を制御するには、[時間分解能] と [オーバーラップ] を使用します。長さとオーバーラップを指定しない場合、信号アナライザーは信号の全長に基づく長さおよび 50% のオーバーラップを選択します。アプリはスペクトログラムの時間軸を時間領域プロットの軸と一致させます。
指定された時間分解能
[スペクトログラム] タブの [時間分解能] セクションで、[指定] をクリックします。
信号に時間情報がない場合は、時間分解能 (セグメント長) をサンプル単位で指定します。時間分解能は 1 以上で信号の長さ以下の整数でなければなりません。
信号に時間情報がある場合は、時間分解能を秒単位で指定します。アプリは結果をサンプル数に変換し、サンプル数以下で 1 以上の最も近い整数に丸めます。時間分解能は信号の持続時間以下でなければなりません。
オーバーラップをセグメント長のパーセンテージで指定します。アプリは結果をサンプル数に変換し、サンプル数以下の最も近い整数に丸めます。
既定の時間分解能
時間分解能の計算に [自動] を選択すると、信号アナライザーは信号全体の長さを使用してセグメントの長さを選択します。アプリは時間分解能を ⌈N/d⌉ サンプル数として設定します。ここで、大かっこは天井関数を表し、N は信号の長さ、d は N に依存する除数です。
信号の長さ (N) | 除数 (d) | セグメント長 |
---|---|---|
2 サンプル – 63 サンプル | 2 | 1 サンプル – 32 サンプル |
64 サンプル – 255 サンプル | 8 | 8 サンプル – 32 サンプル |
256 サンプル – 2047 サンプル | 8 | 32 サンプル – 256 サンプル |
2048 サンプル – 4095 サンプル | 16 | 128 サンプル – 256 サンプル |
4096 サンプル – 8191 サンプル | 32 | 128 サンプル – 256 サンプル |
8192 サンプル – 16383 サンプル | 64 | 128 サンプル – 256 サンプル |
16384 サンプル – N サンプル | 128 | 128 サンプル – ⌈N / 128 ⌉ サンプル |
隣接するセグメント間のオーバーラップを指定することもできます。オーバーラップを指定すると、セグメント数が変化します。信号の端点を越えるセグメントにはゼロが付加されます。
7 サンプルの信号 [s0 s1 s2 s3 s4 s5 s6]
を考えてみましょう。⌈7/2⌉ = ⌈3.5⌉ = 4 であるため、オーバーラップがない場合、アプリは信号を長さ 4 の 2 つのセグメントに分割します。オーバーラップが増加すると、セグメント数が変化します。
オーバーラップするサンプル数 | 結果のセグメント数 |
---|---|
0 | s0 s1 s2 s3 s4 s5 s6 0 |
1 | s0 s1 s2 s3 s3 s4 s5 s6 |
2 | s0 s1 s2 s3 s2 s3 s4 s5 s4 s5 s6 0 |
3 | s0 s1 s2 s3 s1 s2 s3 s4 s2 s3 s4 s5 s3 s4 s5 s6 |
時間の調節
セグメント長とオーバーラップを設定すると、セグメント数とそのエッジの位置が固定され、ズームやパンの影響を受けなくなります。ズームやパンを行うと、信号アナライザーは表示可能な拡大された関心領域内にあるセグメントを使用して、スペクトログラムを計算して表示します。
アプリは以下を行います。
スペクトログラムの時間軸を対応する時間領域プロットの軸と一致させます。これにより、所定の時間のスペクトル成分がその発生と一致します。
非ゼロのオーバーラップの場合、最初と最後のセグメントが信号の端点まで延長されます。
最後のセグメントが信号の端点を越えた場合は、信号にゼロが付加されます。
セグメントのオーバーラップが 0% の場合、各セグメントの中心が実際の発生時間に揃えられます。オーバーラップが非ゼロの場合、スペクトログラムの時間軸を時間領域の軸に一致させると、その影響で最初と最後の時間間隔が延長されます。他のすべての時間間隔は同じ長さになります。つまり、最初と最後を除く各セグメントの中心が実際の発生時間と対応します。以下の例を考えてみます。
セグメントのウィンドウ処理とスペクトルの計算
信号アナライザーは信号をオーバーラップしたセグメントに分割した後で、各セグメントにカイザー ウィンドウを適用します。ウィンドウの形状係数 β により、"漏れ" を調整できます。
メモ
信号スペクトルの計算に使用される漏れとスペクトログラム セグメントのウィンドウ処理に使用される漏れは、相互に独立しています。これらは個別に調整できます。
次にアプリは各セグメントのスペクトルを計算するために、信号アナライザーでのスペクトル計算に示された手順を使用します。ただし、分解能帯域幅の下限が次である場合を除きます。
要約すると、信号アナライザーはセグメントの全長で達成可能なスペクトル分解能と、膨大な FFT を計算することから生じるパフォーマンス上の制限との間の妥協点を見つけます。
すべてのセグメントを解析して得られる解像度が達成可能な場合、アプリは指定された形状係数をもつカイザー ウィンドウを使用して、セグメント全体の単一の修正ピリオドグラムを計算します。
すべてのセグメントを解析して得られる解像度が達成可能でない場合、アプリはウェルチ ピリオドグラムを計算します。セグメントをオーバーラップ サブセグメントに分割し、各サブセグメントにウィンドウを適用して、サブセグメントのピリオドグラムを平均します。アプリはサブセグメントのサイズ、ウィンドウ、オーバーラップを選択し、複合ピリオドグラムが、指定されたカイザー ウィンドウによるセグメント全体の修正ピリオドグラムと同等になるようにします。
スペクトルのパワーの表示
アプリはカラー バーと共に既定の MATLAB® カラーマップを使用して、短時間フーリエ変換のパワーをデシベル単位で表示します。カラー バーはスペクトログラムのパワー範囲全体を含み、ズームやパンにより変化しません。
所定の色の範囲で表される振幅レベルを変更できます。[スペクトログラム] タブで、表示する最小および最大パワー値を変更します。カラーマップを設定して、スペクトログラムのズームインした部分のパワー範囲全体を含めることもできます。[表示] タブで、 [カラーマップを合わせる] ボタンをクリックします。