ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで変更されています。最新情報を確認するには、ページ左下にある国リストで [United States] を選択し、英語ドキュメンテーションに切り替えてください。

spectrogram

短時間フーリエ変換を使用したスペクトログラム

構文

S = spectrogram(x)
S = spectrogram(x,window)
S = spectrogram(x,window,noverlap)
S = spectrogram(x,window,noverlap,nfft)
S = spectrogram(x,window,noverlap,nfft,fs)
[S,F,T] = spectrogram(...)
[S,F,T] = spectrogram(x,window,noverlap,F)
[S,F,T] = spectrogram(x,window,noverlap,F,fs)
[S,F,T,P] = spectrogram(...)
spectrogram(...,FREQLOCATION)
spectrogram(...)

説明

spectrogram では、出力を設定せずに使用した場合はスペクトログラムがプロットされ、出力 S とともに使用した場合は入力信号の短時間フーリエ変換が返されます。返された短時間フーリエ変換データからスペクトログラムを作成する方法は、以下に示す [S,F,T,P] 構文を参照してください。

S = spectrogram(x) では、入力信号ベクトル x の短時間フーリエ変換 S が返されます。既定の設定では、x は 8 個のセグメントに分割されます。x を 8 等分できない場合は、最後が切り捨てられます。以下の既定値が使用されます。

  • window は、長さ nfft のハミング ウィンドウです。

  • noverlap は、各セグメントがオーバーラップするサンプル数です。既定値は、セグメント間で 50% のオーバーラップが発生する数字となります。

  • nfft は FFT 長で、最大 256 または x の各セグメントの長さよりも大きい 2 のべき乗です。nfft の代わりに、周波数 F のベクトルを指定できます。詳細は、以下を参照してください。

  • fs はサンプリング周波数で、既定の設定は正規化された周波数です。

S の各列は、x の短時間に限定した周波数の推定を含みます。時間は S の列に沿って増加し、周波数は行に沿って増加します。

x が長さ Nx の複素信号の場合、Snfft 行と k 列の複素行列です。スカラー window の場合は、以下のようになります。

k = fix((Nx-noverlap)/(window-noverlap))

または、window がベクトルの場合は、以下のようになります。

k = fix((Nx-noverlap)/(length(window)-noverlap))

実数 x に対する出力 S は、nfft が偶数の場合は (nfft/2+1) 行、nfft が奇数の場合は (nfft+1)/2 行です。

S = spectrogram(x,window) では、指定の window が使用されます。window が整数の場合、x はその整数値と等しいセグメントに分割され、ハミング ウィンドウが使用されます。window がベクトルの場合、xwindow の長さと等しいセグメントに分割され、セグメントにはベクトル window で指定されたウィンドウ関数が適用されます。利用可能なウィンドウについては、「ウィンドウ」を参照してください。

    メモ:   削除された関数 specgram と同じ結果を得るには、長さ 256'Hann' ウィンドウを指定してください。

S = spectrogram(x,window,noverlap) では、各セグメントで noverlap 個のサンプルがオーバーラップされます。noverlapwindow より小さい整数か、window がベクトルの場合は window の長さより小さくなければなりません。

S = spectrogram(x,window,noverlap,nfft) では、離散型フーリエ変換を計算するために nfft のサンプリング点が使用されます。nfft は、スカラーでなければなりません。

S = spectrogram(x,window,noverlap,nfft,fs) では、サンプリング周波数 fs (Hz 単位) が使用されます。fs を空ベクトル [] とすると、既定の 1 Hz となります。

[S,F,T] = spectrogram(...) では、スペクトログラムが計算された周波数ベクトル F と時間ベクトル T が返されます。F の長さは S の行数と同じです。T の長さは k (上で定義) で、T の値は各セグメントの中央に対応します。

[S,F,T] = spectrogram(x,window,noverlap,F) は、周波数 (Hz) のベクトル F を使用します。F は、2 要素以上をもつベクトルでなければなりません。この場合は、Goertzel アルゴリズムを使用して F の周波数でスペクトログラムが計算されます。指定された周波数は、信号の分解能相当の最も近い DFT ビンまで丸められます。nfft または nfft の既定値が使用されるその他の構文では、短時間フーリエ変換が使用されます。返される F は、丸められた周波数のベクトルです。T は、スペクトログラムが計算される時間のベクトルです。F の長さは S の行数と等価です。T の長さは、上記で定義したように k と等しく、各値は各セグメントの中心に対応します。

[S,F,T] = spectrogram(x,window,noverlap,F,fs) では、上記の周波数 (Hz 単位) のベクトル F とサンプリング周波数 (Hz 単位) fs が使用されます。fs を空ベクトル [] とすると、既定の 1 Hz となります。

[S,F,T,P] = spectrogram(...) では、各セグメントのパワー スペクトル密度 (PSD) を含む行列 P が返されます。実数の x では、P は各セグメントの PSD の片側修正ピリオドグラム推定を含みます。複素数の x で周波数ベクトル F を指定した場合は、P は両側 PSD を含みます。

spectrogram(...,FREQLOCATION) は、スペクトログラムを表示する際の周波数軸としてどの軸を使用するかを指定します。後に続く文字列引数として FREQLOCATION を指定します。使用できるオプションは 'xaxis' または 'yaxis' です。文字列では、大文字と小文字は区別されません。FREQLOCATION を指定しない場合は、spectrogram は周波数軸として既定で X 軸を使用します。

PSD 行列 P の要素は Pij=k|Sij|2 によって与えられます。ここで、k は以下のように定義される実数値スカラーです。

  • 片側 PSD では、

    k=2Fsn=1L|w(n)|2

    となり、ここで w(n) はウィンドウ関数 (既定値はハミング) を、Fs はサンプリング周波数を表します。ゼロおよびナイキスト周波数において、分子の要素 2 は 1 で置き換えられます。

  • 両側 PSD では、すべての周波数で

    k=1Fsn=1L|w(n)|2

    となります。

  • サンプリング周波数を指定しない場合、Fs は分母において 2π と置き換えられます。

spectrogram(...) では、各セグメントの PSD 推定が Figure ウィンドウの面にプロットされます。プロットは、以下を使用して作成されます。

surf(T,F,10*log10(abs(P)));
axis tight;
view(0,90);

構文 spectrogram(...,'freqloc') を使用し、文字列 'freqloc' ('xaxis' または 'yaxis') を追加することで、周波数軸が表示される位置を制御します。'xaxis' を使用すると、周波数が x 軸に表示されます。'yaxis' を使用すると、周波数が y 軸に、時間が x 軸に表示されます。既定の設定は 'xaxis' です。文字列 'freqloc' と出力引数の両方を指定した場合は、'freqloc' は無視されます。

すべて折りたたむ

チャープのパワー スペクトル密度

100 Hz から開始し、t = 1 秒で 200 Hz になる 2 次チャープの各セグメントの PSD を計算して表示します。1 kHz のサンプル レートを指定します。

T = 0:0.001:2;
X = chirp(T,100,1,200,'q');
spectrogram(X,128,120,128,1E3,'yaxis')
title('Quadratic chirp')

DC から開始し、t = 1 秒で 150 Hz になる線形チャープの各セグメントの PSD を計算して表示します。1 kHz のサンプル レートを指定します。

T = 0:0.001:2;
X = chirp(T,0,1,150);
[S,F,T,P] = spectrogram(X,256,250,256,1E3);

sf = surf(T,F,10*log10(P))
sf.EdgeColor = 'none';
axis tight
view(0,90)
xlabel('Time (s)')
ylabel('Frequency (Hz)')
title('Linear chirp')
sf = 

  Surface with properties:

       EdgeColor: [0 0 0]
       LineStyle: '-'
       FaceColor: 'flat'
    FaceLighting: 'flat'
       FaceAlpha: 1
           XData: [1x291 double]
           YData: [129x1 double]
           ZData: [129x291 double]
           CData: [129x291 double]

  Use GET to show all properties

参考文献

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

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

この情報は役に立ちましたか?