Signal Processing Toolbox | ![]() ![]() |
表示
B=
specgram(a) B=
specgram(a,nfft) [B,f]=
specgram(a,nfft,fs) [B,f,t]=
specgram(a,nfft,fs) B=
specgram(a,nfft,fs,window) B=
specgram(a,nfft,fs,window,numoverlap) specgram(a) B=
specgram(a,f,fs,window,numoverlap)
詳細
specgram
は、スライディングウィンドウを使って信号にウィンドウを適用し、その離散時間フーリエ変換を計算します。スペクトログラムは、この関数の大きさを示すものです。
は、ベクトルB = specgram(a)
a
の信号に対するスペクトログラムを計算します。ここでは、つぎのデフォルト値を使用します。
nfft = min(256,length(a))
fs = 2
window
は、長さnfft
の周期性をもったHann(Hanning)ウインドウnumoverlap = length(window)/2
nfft
は、specgram
が使用するFFTの長さを設定します。この値は、計算する離散フーリエ変換の周波数を決定します。fs
は、サンプリング周波数を設定するスカラです。window
は、specgram
が分割したベクトルa
に適用するウィンドウとサンプル数を設定します。noverlap
は、分割したデータ列をオーバラップするサンプル数です。入力引数を省略すると、それ以後の引数はすべて、上記のデフォルト値が使用されます。
a
が実数の場合、specgram
は正の周波数の離散時間フーリエ変換のみを計算します。n
が偶数の場合、specgram
はnfft
/2+1行(0とNyquist周波数を含む)を出力します。n
が奇数の場合、specgram
はnfft
/2行を出力します。B
の列数は、つぎのようになります。
k =
fix((n-numoverlap)/(length(window)-numoverlap))
a
が複素数の場合、specgram
は正と負の周波数の離散時間フーリエ変換を共に計算します。この場合、B
はnfft
行をもつ複素行列となります。時間は、第1列のサンプル1から始まり、B
の列の間で線形的に増加します。周波数は、0から始まり行方向に線形的に増加します。
B
は、設定されたFFTの長さ =
specgram(a,nfft)
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
数のサンプルを重複させます。
空行列[]
を使用して、どの入力引数に対してもデフォルト値を設定することができます。たとえば、
B =
specgram(x,[],10000)
と等価ですが、デフォルトの2 Hzの代わりに10,000 Hzのサンプリング周波数を使用します。
B =
specgram(x)
specgram
は、出力引数を設定せずに使用すると、つぎのステートメントを使って、カレントのFigureウィンドウにスケーリングされた対数のスペクトログラムが表示されます。
imagesc(t,f,20*
log10(abs(b))),axis xy,colormap(jet)
axis
xy
モードでは、信号の最初の部分の低周波成分が軸の左下隅に表示されます。specgram
は、fs
を使って真の時間および周波数に基づいて軸にラベルを付けます。
B
は、Chirp z変換(20を越える等間隔周波数の場合)かポリフェーズ間引きフィルタバンクのいずれかを使って、 =
specgram(a,f,fs,window,numoverlap)
f
に設定した周波数のスペクトログラムを計算します。f
はヘルツ単位の周波数のベクトルで、少なくとも2つの要素をもっていなければなりません。
アルゴリズム
specgram
は、つぎのようにして与えられた信号のスペクトログラムを計算します。
window
パラメータによって設定されたウィンドウを適用します。
nfft
のFFTで離散フーリエ変換を計算し、信号の短期周波数成分の推定値を作成します。これらの変換によりB
の列を構成します。nfft
> length(window)
の場合、specgram
は、ウィンドウを適用したものにゼロを付加し、specgram
がいくつのサンプルでウィンドウをシフトするかを(length(window) - noverlap
) で設定します。
nfft
が偶数の場合、最初のnfft
/2 + 1点、nfft
が奇数の場合、最初の(nfft
+ 1)/2 点でスペクトログラムを打ち切ります。
例題
ディジタル化した音声信号のスペクトログラムをプロットします。
load mtlb specgram(mtlb,512,fs,kaiser(500,5),475) title('Spectrogram')
診断
誤った引数を使用すると、つぎのような診断メッセージが表示されます。
Requires window's length to be no greater than the FFT length. Requires NOVERLAP to be strictly less than the window length. Requires positive integer values for NFFT and NOVERLAP. Requires vector input.
参考
|
2つの信号間の二乗コヒーレンス関数の推定 |
|
2つの信号のクロススペクトル密度(CSD)の推定 |
|
信号のパワースペクトル密度(PSD)の推定 |
|
入力および出力からの伝達関数の推定 |
参考文献
[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 | ![]() |