メインコンテンツ

pyulear

自己回帰パワー スペクトル密度の推定 — ユール・ウォーカー法

説明

pxx = pyulear(x,order) では、ユール・ウォーカー法を使用して求められた離散時間信号 x のパワー スペクトル密度推定 pxx が返されます。x がベクトルの場合、単一チャネルとして取り扱われます。x が行列の場合、PSD は列ごとに個別に計算され、pxx の対応する列に保存されます。pxx は単位周波数あたりのパワーの分布です。周波数はラジアン/サンプルの単位で表されます。order は PSD 推定の生成に使用する AR (自己回帰) モデルの次数です。

pxx = pyulear(x,order,nfft) は、離散型フーリエ変換 (DFT) で nfft 個の点を使用します。x が実数の場合、pxx の長さは、nfft が偶数であれば (nfft/2 + 1)、nfft が奇数であれば (nfft + 1)/2 になります。複素数値の x の場合、pxx は常に長さ nfft になります。nfft を省略するか、空として指定した場合、pyulear は既定の DFT の長さ 256 を使用します。

[pxx,w] = pyulear(___) は正規化された角周波数のベクトル w を返し、PSD はその周波数で推定されます。w の単位はラジアン/サンプルです。実数値の信号の場合、wnfft が偶数であれば区間 [0,π] をカバーし、nfft が奇数であれば [0,π) をカバーします。複素数値の信号の場合、w は常に区間 [0,2π) をカバーします。

[pxx,f] = pyulear(___,Fs) は、周波数ベクトル f を単位時間あたりのサイクル数で返します。サンプル レート Fs は単位時間あたりのサンプル数です。時間の単位が秒の場合、f の単位はサイクル/秒 (Hz) です。実数値の信号の場合、f は偶数の nfft に対しては区間 [0,Fs/2] をカバーし、奇数の nfft に対しては [0,Fs/2) をカバーします。複素数値の信号 f は区間 [0,Fs) をカバーします。Fspyulear の 4 番目の入力でなければなりません。サンプル レートを入力した場合でも、前のオプション引数の既定値を使用するには、これらの引数を空 [] として指定します。

[pxx,w] = pyulear(x,order,w) は、ベクトル w で指定される正規化周波数での両側 AR PSD 推定を返します。ベクトル w には少なくとも 2 つの要素が含まれていなければなりません。そうでない場合は、関数が nfft として解釈するためです。

[pxx,f] = pyulear(x,order,f,Fs) は、ベクトル f で指定される周波数での両側 AR PSD 推定を返します。ベクトル f には少なくとも 2 つの要素が含まれていなければなりません。そうでない場合は、関数が nfft として解釈するためです。f の周波数の単位は単位時間あたりのサイクルです。サンプル レート Fs は単位時間あたりのサンプル数です。時間の単位が秒の場合、f の単位はサイクル/秒 (Hz) です。

[___] = pyulear(x,order,___,freqRange) は、freqRange で指定される周波数範囲での AR PSD 推定を返します。freqRange の有効なオプションは、"onesided""twosided"、または "centered" です。

[___,pxxc] = pyulear(___,ConfidenceLevel=p) は、PSD 推定の p × 100% 信頼区間を pxxc に返します。

出力引数なしで pyulear(___) を使用すると、現在の Figure ウィンドウに、AR PSD 推定が単位周波数あたりの dB 単位でプロットされます。

すべて折りたたむ

AR(4) 広義定常性ランダム過程の実現を作成します。ユール・ウォーカー法を使用して PSD を推定します。単一の実現に基づく PSD 推定を、ランダム過程の実際の PSD と比較します。

AR(4) システム関数を作成します。周波数応答を取得してシステムの PSD をプロットします。

A = [1 -2.7607 3.8106 -2.6535 0.9238];
[H,F] = freqz(1,A,[],1);
plot(F,mag2db(abs(H)))

xlabel("Frequency (Hz)")
ylabel("PSD (dB/Hz)")

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel PSD (dB/Hz) contains an object of type line.

AR(4) ランダム過程の実現を作成します。再現性のある結果を得るために、乱数発生器を既定の状態に設定します。実現の長さは 1000 サンプルです。サンプル レートは 1 Hz だと仮定します。pyulear を使用して 4 次の過程の PSD を推定します。PSD 推定を実際の PSD と比較します。

rng("default")

x = randn(1000,1);
y = filter(1,A,x);
[Pxx,F] = pyulear(y,4,1024,1);

hold on
plot(F,pow2db(Pxx))
legend(["True Power Spectral Density" "pyulear PSD Estimate"])

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel PSD (dB/Hz) contains 2 objects of type line. These objects represent True Power Spectral Density, pyulear PSD Estimate.

N(0,1) 加法性ホワイト ガウス ノイズを伴う 3 個の正弦波から構成されるマルチチャネル信号を作成します。正弦波の周波数は 100 Hz、200 Hz、および 300 Hz です。サンプル レートは 1 kHz で、信号は 1 秒間持続します。

rng("default")
Fs = 1000;
t = 0:1/Fs:1-1/Fs;
f = [100;200;300];

x = cos(2*pi*f*t)' + randn(length(t),3);

ユール・ウォーカー法を使用して 12 次の自己回帰モデルにより信号の PSD を推定します。既定の DFT 長を使用します。推定をプロットします。

mOrder = 12;

pyulear(x,mOrder,[],Fs)

Figure contains an axes object. The axes object with title Yule-Walker Power Spectral Density Estimate, xlabel Frequency (Hz), ylabel Power/frequency (dB/Hz) contains 3 objects of type line.

入力引数

すべて折りたたむ

入力信号。ベクトルまたは行列として指定します。x を行列として指定した場合、pyulear はその列を独立したチャネルとして扱います。

例: cos(pi/4*(0:159))+randn(1,160) は単一チャネルの行ベクトル信号です。

例: cos(pi./[4;2]*(0:159))'+randn(160,2) は 2 チャネル信号です。

データ型: single | double
複素数のサポート: あり

正の整数として指定される、自動回帰モデルの次数。

データ型: double

正の整数として指定する DFT 点の数。実数値の入力信号 x では、PSD 推定 pxx は、nfft が偶数の場合、長さ (nfft/2+1)、nfft が奇数の場合、長さ (nfft+1)/2 になります。複素数値の入力信号 x では、PSD 推定は常に長さ nfft になります。nfft が空として指定されている場合、既定の nfft が使用されます。

データ型: single | double

サンプル レート。正のスカラーで指定します。サンプル レートは単位時間あたりのサンプル数です。時間の単位が秒の場合、サンプル レートの単位は Hz です。

  • Fs を空配列 [] として指定すると、pyulear は入力信号 x のサンプル レートを 1 Hz と仮定します。

  • Fs を指定しない場合、pyulear は入力信号 x のサンプル レートを 2π ラジアン/サンプルと仮定します。

正規化周波数。少なくとも 2 つの要素をもつ行ベクトルまたは列ベクトルとして指定します。正規化周波数の単位はラジアン/サンプルです。

例: w = [pi/4 pi/2]

データ型: double | single

周波数。少なくとも 2 つの要素をもつ行ベクトルまたは列ベクトルとして指定します。周波数の単位は単位時間あたりのサイクルです。単位時間はサンプル レート fs で指定されます。fs の単位がサンプル/秒であれば、f の単位は Hz です。

例: fs = 1000; f = [100 200]

データ型: double | single

PSD 推定の周波数範囲。"onesided""twosided"、または "centered" として指定します。

pyulear 関数は、freqRange で指定された値、DFT 点の数 freqSpec が偶数か奇数か、および Fs が指定されているかどうかに応じて、行数と周波数範囲が異なる pxx を返します。

freqRangefreqSpecpxx の行数

pxx の周波数範囲

Fs の指定なし

Fs の指定あり

"onesided"
(x が実数値の場合、既定)
偶数freqSpec/2 + 1[0,π] ラジアン/サンプル[0,Fs/2] サイクル/単位時間
奇数(freqSpec + 1)/2[0,π) ラジアン/サンプル[0,Fs/2) サイクル/単位時間
"twosided"
(x が複素数値の場合、既定)
偶数または奇数freqSpec[0,2π) ラジアン/サンプル[0,Fs) サイクル/単位時間
"centered"偶数freqSpec(–π,π] ラジアン/サンプル(–Fs/2,Fs/2] サイクル/単位時間
奇数(–π,π) ラジアン/サンプル(–Fs/2,Fs/2) サイクル/単位時間

メモ

  • freqSpec を循環周波数または正規化周波数のベクトルとして指定した場合、この引数はサポートされません。

  • "onesided" 値を指定した場合、pyulear は 0 とナイキスト周波数以外のすべての周波数でパワーを 2 倍にして、合計パワーを保存します。

  • x が複素数値の場合、"onesided" 値はサポートされません。

データ型: char | string

PSD 推定のカバレッジ確率。(0,1) の範囲のスカラーとして指定します。

ConfidenceLevel=ppxxc を指定した場合、関数は真の PSD に対する p × 100% 区間推定の下限および上限を含む pxxc を出力します。

出力引数

すべて折りたたむ

PSD 推定。実数値の非負の列ベクトルまたは行列として返されます。

  • pxx の各列が x の対応する列の PSD 推定です。

  • PSD 推定の単位は、単位周波数あたりの入力信号の 2 乗振幅単位となります。たとえば、入力データ x の単位がボルトで、サンプル レート Fs をヘルツ単位で指定し、抵抗を 1 Ω と仮定した場合、PSD 推定はワット/ヘルツ単位となります。

正規化周波数。実数値の列ベクトルとして返されます。pxx が片側 PSD 推定の場合、w は偶数の nfft に対しては区間 [0,π] をカバーし、奇数の nfft に対しては [0,π) をカバーします。pxx が両側 PSD 推定の場合、w は区間 [0,2π) をカバーします。DC を中央に揃えた PSD 推定の場合、nfft が偶数のときは w は区間 (–π,π] をカバーし、nfft が奇数のときは (–π,π) をカバーします。

循環周波数。実数値の列ベクトルとして返されます。片側 PSD 推定では、fnfft が偶数の場合は区間 [0,fs/2] をカバーし、nfft が奇数の場合は [0,fs/2) をカバーします。両側 PSD 推定では、f は区間 [0,fs) をカバーします。DC を中央に揃えた PSD 推定では、f は、nfft が偶数長であれば区間 (-fs/2, fs/2] サイクル/単位時間をカバーし、nfft が奇数長であれば (-fs/2, fs/2) サイクル/単位時間をカバーします。

信頼限界。実数値の行列として返されます。

  • pxxc の行数は pxx の行数と同じです。

  • pxxc の列数は pxx の列数の 2 倍です。

    • 奇数番号の列には信頼区間の下限が含まれています。

    • 偶数番号の列には信頼区間の上限が含まれています。

    したがって、pxxc(m,2*n-1) は、推定 pxx(m,n) に対応する信頼区間の下限で、pxxc(m,2*n) はその上限となります。

  • 信頼区間のカバレッジ確率は、p の入力値によって決まります。

データ型: single | double

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

参考

関数