Signal Processing Toolbox | ![]() ![]() |
Welch法を使った信号のパワースペクトル密度(PSD)の推定
表示
[Pxx,w]=
pwelch(x) [Pxx,w]=
pwelch(x,nwin) [Pxx,w]=
pwelch(x,nwin,noverlap) [Pxx,w]=
pwelch(x,nwin,noverlap,nfft) [Pxx,f]=
pwelch(x,nwin,noverlap,nfft,fs) [...]=
pwelch(x,nwin,noverlap,...,'range
') pwelch(...)
詳細
[Pxx,w]
は、スペクトル推定のWelchの平均化修正ピロオドグラム法を使って、入力信号ベクトル =
pwelch(x)
x
のパワースペクトル密度Pxx
を計算します。つぎの書式を使います。
x
は、同じ長さの8つの部分(お互い50%の重なりをもつ)に分割します。hamming
を参照)を適用します。パワースペクトル密度は、パワー/ラジアン/サンプル単位で計算されます。対応する周波数ベクトルw
は、ラジアン/サンプルで計算され、Pxx
と同じ長さをもっています。
x
が実数値入力ベクトルの場合、片側PSDが計算され、複素数の場合、両側PSDが計算されます。
一般的に、FFTの長さNと入力x
の値(実数/複素数)により、Pxx
の長さと対応する正規化された周波数の範囲を決めます。この書式で、FFTの(デフォルト)の長さNは、256より長くなり、x
の長さを超える2のベキ乗数の内一番小さいものになります。つぎの表は、この書式用のPxx
の長さと対応する正規化された周波数の範囲を示しています。
実数/複素数入力データ |
Pxxの長さ |
対応する正規化された周波数の範囲 |
実数値 |
(N/2) +1 |
[0, ![]() |
複素数値 |
N |
[0, 2![]() |
[Pxx,w]
は、つぎのいずれかを使って、修正ピリオドグラムを計算します。 =
pwelch(x,nwin)
nwin
が正の整数の場合、nwin
はHammingウインドウの長さnwin
がベクトルの場合、ウインドウに重みも設定できます。
この書式では、入力ベクトルx
は、お互い50%の重なりをもちながら、ある整数倍で、同じ長さをもつように分割し、残りの部分は、削除します。nwin
に空ベクトル[]
を設定すると、信号データは、8つに分割され、その各々にHammingウインドウが適用されます。
[Pxx,w]
は、 =
pwelch(x,nwin,noverlap)
nwin
に従ってx
を分割し、整数noverlap
を使って、隣同士の分割で共有する部分の信号のサンプル数を設定します。引数noverlap
は、ユーザが設定するウインドウの長さよりも短い必要があります。noverlap
を空ベクトル[]
に設定すると、pwelch
は、デフォルトの重ね合わせが50%になるように、x
の分割を行います。
[Pxx,w]
は、Welch法を使って、PSDを計算しますが、FFTの長さを整数 =
pwelch(x,nwin,noverlap,nfft)
nfft
で設定することができます。nfft
を空ベクトル[]
で設定すると、上記の書式でリストされているNに対するデフォルト値を使います。
Pxx
の長さとw
の周波数範囲は、nfft
と入力x
の値(実数/複素数/個数)に依存します。つぎの表は、この書式でのPxx
の長さとw
の周波数範囲を示しています。
実数/複素数入力データ |
nfft 偶数/奇数 |
Pxxの長さ |
w の範囲 |
実数値 |
偶数 |
(nfft /2 + 1) |
[0, ![]() |
実数値 |
奇数 |
(nfft + 1)/2 |
[0, ![]() |
複素数値 |
偶数または奇数 |
nfft |
[0, 2![]() |
[Pxx,f]
は、PSDベクトル( =
pwelch(x,nwin,noverlap,nfft,fs)
Pxx
)と対応する周波数ベクトル(f
)を計算するためにヘルツ単位で設定したサンプリング周波数fs
を使います。計算されるスペクトル密度は、パワー/Hzの単位です。fs
を空ベクトル[]
とすると、サンプリング周波数は、デフォルトの1 Hzです。
f
に関する周波数範囲は、nfft
とfs
と入力x
の値(実数/複素数/個数)に依存します。Pxx
の長さは、上記の表の中のものと同じです。つぎの表は、この書式を使ったfに対する周波数範囲を示しています。
実数/複素数入力データ |
nfft 偶数/奇数 |
fの範囲 |
実数値 |
偶数 |
[0 , fs/2 ] |
実数値 |
奇数 |
[0 , fs/2) |
複素数値 |
偶数または奇数 |
[0, fs ) |
[...]
は、周波数の範囲を設定することができます。この書式は、 =
pwelch(x,nwin,noverlap,...,'range
')
x
が実数の場合に有効です。'range
'には、つぎのいずれかを設定することができます。
'twosided'
: 周波数範囲[0,fs
)で両側PSDを計算します。これは、x
が複素数の場合の周波数範囲のデフォルトの設定です。fs
を空ベクトル[]
とする場合、周波数範囲は[0,1)
です。 fs
を設定していない場合、周波数範囲は[0, 2'onesided'
: 実数x
に対して設定した周波数範囲上での片側PSDを計算します。これは、x
が実数の場合の周波数範囲のデフォルトの設定です。文字引数'range
' は、引数noverlap
の後の場合、任意の位置に設定することができます。
pwelch(x,...)
は、カレントフィギュアウインドウに周波数に対してdB表示のPSDをプロット表示します。
例題
正弦波とノイズから構成される信号のPSDを計算しましょう。サンプリング周波数は、1000 Hzです。32のサンプルのオーバラップをもった長さ33サンプルのウインドウとデフォルトのFFTの長さを使って、両側PSD計算結果を表示します。
randn('state',0); Fs = 1000; t = 0:1/Fs:.3; x = cos(2*pi*t*200)+randn(size(t)); % 200Hzの正弦波とノイズから構成 pwelch(x,33,32,[],Fs,'twosided')
アルゴリズム
pwelch
は、Welch法を使って、パワースペクトル密度を計算します。
x
は、nwin
とnoverlap
(またはデフォルト値)に従って、k個のオーバラップした部分に分割します。
x
を分割したものの各々に適用されます。
nfft
点のFFTの計算は、ウインドウを適用したデータに対して実行されます。
periodogram
のリファレンスの式 7-22を参照してください)。
nwin
を設定していないか、または、nwin
を空ベクトル[]
とすると、8です。 nwin
を空でないベクトルまたはスカラで設定すると、この方程式の中で、mは信号ベクトルxの長さで、oはオーバラップのサンプル数(noverlap
)で、lは各部分の長さ(ウインドウの長さ)です。
参考
|
Burg法を使って、パワースペクトル密度を計算 |
|
共分散法を使ったパワースペクトル密度の計算 |
|
固有ベクトル法を使った擬似スペクトルの推定 |
|
ピリオドグラムを使ったパワースペクトル密度の計算 |
|
修正共分散法を使ったパワースペクトル密度の計算 |
|
マルチテーパ法を使ったパワースペクトル密度の計算 |
|
MUSIC アルゴリズムを使った擬似スペクトルの推定 |
|
パワースペクトル密度データのプロット |
|
Yule-Walker AR法を使ったパワースペクトル密度の計算 |
参考文献
[1] Hayes, M., Statistical Digital Signal Processing and Modeling, John Wiley & Sons, 1996.
[2] Stoica, P., and R.L. Moses, Introduction to Spectral Analysis, Prentice-Hall, Englewood Cliffs, NJ, 1997, pp. 52-54.
[3] Welch, P.D, "The Use of Fast Fourier Transform for the Estimation of Power Spectra: A Method Based on Time Averaging Over Short, Modified Periodograms," IEEE Trans. Audio Electroacoustics, Vol. AU-15 (June 1967), pp. 70-73.
![]() | pulstran | pyulear | ![]() |