私はMATLABの初心者であり、パワースペクトル密度とスペクトログラムのグラフを描画するEEG信号のスペクトル分析を実行する必要があります。私の信号は10
秒の長さと160 Hz
のサンプリング頻度、合計1600 samples
であり、MATLABで関数のパラメーターを見つける方法についていくつか質問があります。
pwelch (x, window, noverlap, nfft, fs);
spectrogram (x, window, noverlap, F, fs);
私の質問は、パラメータwindow
とnoverlap
の値をどこで見つけるかです。
ウィンドウ関数とその使用法を理解するために、最初に有限長のサンプルのDFTを取得するとどうなるかを見てみましょう。離散フーリエ変換の定義で暗黙的であるのは、検討している有限長の信号が周期的であるという仮定です。
全周期がキャプチャされるようにサンプリングされた正弦波を考えます。信号が複製されると、中断されない信号として定期的に継続することがわかります。結果のDFTにはゼロ以外の成分が1つだけあり、それは正弦波の周波数です。
次に、一部の周期のみがキャプチャされるようにサンプリングされた、異なる周期の余弦波を考えます。信号を複製すると、信号に不連続部分が赤く表示されます。以下に示すように、スムーズな遷移がなくなるため、他の周波数で漏れが発生します。
これは スペクトル漏れ がサイドローブを通じて発生します。これについてさらに理解するには、 sinc function とそのフーリエ変換 rectangle function についても読む必要があります。有限のサンプルシーケンスは、長方形の関数を掛けた無限のシーケンスと見なすことができます。発生する漏れは、sinc関数のサイドローブに関連しています(sincおよび長方形は自己双対空間に属し、互いのF.Tです)。これについては、上記でリンクしたスペクトル漏れの記事で詳しく説明しています。
ウィンドウ関数
ウィンドウ関数 は信号処理で使用され、スペクトル漏れの影響を最小限に抑えます。基本的に、ウィンドウ関数が行うのは、有限長のシーケンスを両端でテーパーにすることです。これにより、タイリングすると、不連続性のない周期的な構造になり、スペクトルの漏れが少なくなります。
一般的なウィンドウには、Hanning、Hamming、Blackman、Blackman-Harris、Kaiser-Besselなどがあります。これらの詳細については、wikiリンクから確認できます。対応するMATLABコマンドはhann
、hamming
、blackman
、blackmanharris
およびkaiser
。次に、さまざまなウィンドウの小さなサンプルを示します。
なぜこんなに多くの異なるウィンドウ関数があるのか疑問に思うかもしれません。その理由は、これらのそれぞれに非常に異なるスペクトルプロパティがあり、メインローブの幅とサイドローブの振幅が異なるためです。無料のランチなどというものはありません。良好な周波数分解能が必要な場合(メインローブが薄い場合)、サイドローブが大きくなり、逆も同様です。あなたは両方を持つことはできません。多くの場合、ウィンドウ関数の選択は特定のニーズに依存し、常に妥協点を突き詰めます。 This は、ウィンドウ関数の使用について説明した非常に優れた記事です。必ずお読みください。
これで、ウィンドウ関数を使用すると、先細りの端にある情報が少なくなります。したがって、これを修正する1つの方法は、以下に示すように、オーバーラップしたスライディングウィンドウを使用することです。まとめると、元のシーケンスを可能な限り近似します(つまり、一番下の行がフラットな値1にできるだけ近くなるはずです)。一般的な値は、アプリケーションによって33%から50%の間で異なります。
MATLABのスペクトログラムの使用
構文はspectrogram(x,window,overlap,NFFT,fs)
です
どこ
x
はデータベクトル全体ですwindow
はウィンドウ関数です。 W
(整数である必要があります)などの数値のみを入力すると、MATLABはデータをW
サンプルのチャンクに分割し、そこからスペクトログラムを形成します。これは、長さW
サンプルの長方形のウィンドウを使用することと同じです。別のウィンドウを使用する場合は、hann(W)
または選択したウィンドウを提供します。overlap
は、オーバーラップする必要のあるサンプルの数です。したがって、50%のオーバーラップが必要な場合、この値は_W/2
_にする必要があります。 W
が奇数の値を取る場合は、floor(W/2)
またはceil(W/2)
を使用してください。これは単なる整数です。NFFT
はFFTの長さですfs
は、データベクトルのサンプリング周波数です。これを空のままにしておくと、MATLABは正規化された周波数と時間軸の観点から図を単にデータチャンクインデックスとしてプロットします。これを入力すると、MATLABはそれに応じて軸をスケーリングします。他の計算で使用するため、またはプロットのスタイルを変える必要がある場合に、計算された時間ベクトルと周波数ベクトル、パワースペクトルなどのオプションの出力を取得することもできます。詳細は documentation を参照してください。
これは、1000 Hzでサンプリングされた20 Hz〜400 Hzの線形チャープ信号の1秒の例です。 2つのウィンドウ関数Hanning
と_Blackman-Harris
_が使用されています。使用した場合、ウィンドウの長さは50サンプルで、オーバーラップは50%でした。プロットは、各プロットで同じ80dB範囲にスケーリングされます。
オーバーラップによる図(上下)の違いがわかります。オーバーラップを使用すると、より明確な見積もりが得られます。また、先に述べたメインローブの幅とサイドローブの振幅のトレードオフも確認できます。ハニングのメインローブは薄く(スキューの対角線に沿った目立つ線)、周波数分解能は向上しますが、外側の明るい色から見えるサイドローブの漏れがあります。一方、Blackwell-Harrisのメインローブは太く(対角線が太く)なっていますが、スペクトルの漏れは少なく、均一に低い(青い)外側領域で示されています。
上記の両方の方法は、信号を操作する短時間の方法です。信号の非定常性(統計は時間の関数であり、平均は他の統計と同様に時間の関数である)は、信号の統計が短時間にわたって一定であるとしか想定できないことを意味します。このような期間(信号の統計が一定である期間)に正確に到達する方法はないため、ほとんどの場合、推測作業と微調整です。
上記の信号が非定常であるとします(EEG信号はそうです)。また、約10ms程度だけ静止していると仮定します。 _PSD or energy
_のような統計を確実に測定するには、これらの統計を一度に10ミリ秒測定する必要があります。ウィンドウイング関数は、信号を乗算してその10msの信号を分離するものであり、PSDなどを計算します。そのため、ここで信号の長さをトラバースする必要があります。シフトウィンドウが必要です(信号全体を一度に10msウィンドウするため)。ウィンドウを重ねると、統計の推定の信頼性が高まります。
次のように想像できます。
1。信号の最初の10msを取得します。
2。ウィンドウ関数でウィンドウ処理します。
3。この10ミリ秒の部分についてのみ統計を計算します。
4。ウィンドウを5ms移動します(オーバーラップの長さを想定)。
5。信号を再度ウィンドウ処理します。
6。統計を再度計算します。
7。信号全体を移動します。
ウィンドウ関数にはさまざまなタイプがあります-_Blackman, Hanning, Hamming, Rectangular
_。それとウィンドウの長さとオーバーラップの長さは、実際に使用しているアプリケーションと信号自体の周波数特性に依存します。
例として、音声処理(信号が非定常であり、ウィンドウ処理が頻繁に使用される)では、ウィンドウ処理関数の最も一般的な選択肢は、長さ10ms (320 samples at 16 kHz sampling) with an overlap of 80 samples (25% of window length)
のハミング/ハンニングです。これはかなりうまくいきます。これをアプリケーションの開始点として使用し、別の値を使用してもう少し微調整することができます。
また、MATLABで以下の関数を確認することもできます。
1。 hamming
2。 hanning
コマンドラインでhelpコマンドを使用して、MATLABで大量のヘルプを呼び出すことができることを知っていると思います。 MATLABは、最も優れたドキュメントソフトウェアの1つです。 pwelch
のヘルプコマンドを使用すると、ウィンドウサイズとオーバーラップの定義も表示されます。それもあなたを助けるはずです。
この情報がすべてかどうかはわかりません。あなたを助けたかどうかはわかりませんが、質問を見ると、ウィンドウ処理とオーバーラップが何であるかを理解するには少し助けが必要かもしれないと感じました。
HTH、
スリラム。