Signal Processing Toolbox    
specgram

時間に依存した周波数解析(スペクトログラム)

表示

詳細

specgramは、スライディングウィンドウを使って信号にウィンドウを適用し、その離散時間フーリエ変換を計算します。スペクトログラムは、この関数の大きさを示すものです。

B = specgram(a) は、ベクトルaの信号に対するスペクトログラムを計算します。ここでは、つぎのデフォルト値を使用します。

nfftは、specgramが使用するFFTの長さを設定します。この値は、計算する離散フーリエ変換の周波数を決定します。fsは、サンプリング周波数を設定するスカラです。windowは、specgramが分割したベクトルaに適用するウィンドウとサンプル数を設定します。noverlapは、分割したデータ列をオーバラップするサンプル数です。入力引数を省略すると、それ以後の引数はすべて、上記のデフォルト値が使用されます。

aが実数の場合、specgramは正の周波数の離散時間フーリエ変換のみを計算します。nが偶数の場合、specgramnfft/2+1行(0とNyquist周波数を含む)を出力します。nが奇数の場合、specgramnfft/2行を出力します。Bの列数は、つぎのようになります。

aが複素数の場合、specgramは正と負の周波数の離散時間フーリエ変換を共に計算します。この場合、Bnfft行をもつ複素行列となります。時間は、第1列のサンプル1から始まり、Bの列の間で線形的に増加します。周波数は、0から始まり行方向に線形的に増加します。

B = specgram(a,nfft) は、設定されたFFTの長さnfftを使用して計算します。実行速度を最も速くするには、nfftを2のベキ乗として設定します。

[B,f] = specgram(a,nfft,fs) は、この関数が離散時間フーリエ変換を計算する周波数のベクトルfを出力します。fsは周波数を求めるだけのものであり、出力Bには影響しません。

[B,f,t] = specgram(a,nfft,fs) は、周波数ベクトル f と時間ベクトル t をそれぞれ出力します。 t は、 B の列数と等しい長さをもつスケーリングされた時間の列ベクトルです。 t(j) は、 j 番目のウィンドウが a に適用される最初の時間です。 t(1) は常に0となります。

B = specgram(a,nfft,fs,window) は、ベクトルxの各区切りに適用するウィンドウとサンプル数を設定します。windowにスカラを与えた場合、specgramは、その長さのHannウィンドウを使用します。ウィンドウの長さはnfft以下でなければなりません。ウィンドウの長さがnfftを越える場合には、specgramは、データ列にゼロを付加します。

B = specgram(a,nfft,fs,window,numoverlap) は、numoverlap数のサンプルを重複させます。

空行列[]を使用して、どの入力引数に対してもデフォルト値を設定することができます。たとえば、

と等価ですが、デフォルトの2 Hzの代わりに10,000 Hzのサンプリング周波数を使用します。

specgram は、出力引数を設定せずに使用すると、つぎのステートメントを使って、カレントのFigureウィンドウにスケーリングされた対数のスペクトログラムが表示されます。

axis xy モードでは、信号の最初の部分の低周波成分が軸の左下隅に表示されます。specgram は、fsを使って真の時間および周波数に基づいて軸にラベルを付けます。

B = specgram(a,f,fs,window,numoverlap) は、Chirp z変換(20を越える等間隔周波数の場合)かポリフェーズ間引きフィルタバンクのいずれかを使って、fに設定した周波数のスペクトログラムを計算します。fはヘルツ単位の周波数のベクトルで、少なくとも2つの要素をもっていなければなりません。

アルゴリズム

specgram は、つぎのようにして与えられた信号のスペクトログラムを計算します。

  1. 信号の重ね合せを考慮して分割し、windowパラメータによって設定されたウィンドウを適用します。
  2. 長さnfftのFFTで離散フーリエ変換を計算し、信号の短期周波数成分の推定値を作成します。これらの変換によりBの列を構成します。nfft > length(window)の場合、specgramは、ウィンドウを適用したものにゼロを付加し、specgramがいくつのサンプルでウィンドウをシフトするかを(length(window) - noverlap) で設定します。
  3. 実数入力の場合、nfftが偶数の場合、最初のnfft/2 + 1点、nfftが奇数の場合、最初の(nfft + 1)/2 点でスペクトログラムを打ち切ります。

例題

ディジタル化した音声信号のスペクトログラムをプロットします。

診断

誤った引数を使用すると、つぎのような診断メッセージが表示されます。

参考
cohere
2つの信号間の二乗コヒーレンス関数の推定
csd
2つの信号のクロススペクトル密度(CSD)の推定
pwelch
信号のパワースペクトル密度(PSD)の推定
tfe
入力および出力からの伝達関数の推定

参考文献

[1] Oppenheim, A.V., and R.W. Schafer, Discrete-Time Signal Processing, Prentice-Hall, Englewood Cliffs, NJ, 1989, pp. 713-718.

[2] Rabiner, L.R., and R.W. Schafer, Digital Processing of Speech Signals, Prentice-Hall, Englewood Cliffs, NJ, 1978.


 sosfilt sptool