例: スペクトル解析
coherence、cspectrum、pspectrum、
snr関数を使用して、信号または信号ペアのコヒーレンス、クロススペクトル、パワースペクトル、SN 比を計算します。
Samuel Stearns/Ruth David 著 Signal Processing Algorithms (Prentice-Hall, Inc.) に、この平均化手法についての解説があります。
パワースペクトル - DFT の使用
ほんの一部のデータにしか信号に相当する値が含まれていない長い時系列では、必要なのはノイズやゼロの値についてのパワースペクトルではなく、信号の周波数についてのパワースペクトルです。
1. ウィンドウ幅を定義します。
2. 信号がゼロでない、2 つのウィンドウ w1 と w2 を定義します。
3. ウィンドウ幅を 2 つの幅のいずれかに設定します。
4. 信号とサンプリング周波数を定義します。
5. sin関数を使用して、選択したウィンドウの内部と外部の信号を定義します。
6. 信号をプロットします。
7. dft関数を使用して、
x の離散フーリエ変換を計算します。
8. 返された関数を周波数領域でプロットします。
◦ 純粋な正弦波信号の場合、DFT 係数の大きさからパワースペクトルを推定できます。この場合、信号の DFT は矩形のウィンドウの変換 (
sinc関数) によってコンボリューションされた構造化信号の周波数内容です。
◦ 手順 3 で W= w2 に設定すると、正弦波信号が存在するウィンドウが 230 から 300 から 0 から 499 (7.143 倍) に広がり、その結果 2 つのピークの大きさが 35 から 250 (これも 7.143 倍) に増大します。
◦ ピークになる周波数は変わりません。
パワースペクトル: pspectrum の使用
pspectrum 関数は、元の時系列を重なり合うセグメントに分割します。各セグメントが DFT によって変換され、変換後の大きさの係数が平均化されます。セグメントの長さが信号内の分析する現象と同じ尺度である場合、pspectrum 関数は元の時系列の対象部分の成分の大きさの良好な近似値を返します。
一般的に、信号の長さは n + 1 以上でなければなりません。
1. 信号の長さ、重なりの比率、ウィンドウの種類 (逓減された矩形) を定義します。
2. pspectrum 関数を使用して、x を重なりの比率 r で n1 個の重なり合うセグメントに分割し、逓減された矩形のウィンドウを使用して各セグメントをウィンドウ処理することで、x のパワースペクトルを計算します。
3. floor関数と
length関数を使用して、区間の長さが、次のように定義される
L の最大数になることを示します。
4. 正規化された周波数軸に対してスペクトルをプロットします (1 はサンプリング周波数)。
5. スペクトルの平均パワーを計算します。
これは信号 x の二乗平均とほぼ等しい値になります。
白色ノイズでの pspectrum
白色ノイズを含む信号のパワースペクトルを計算します。クロススペクトルの計算には 2 つの信号が必要なので、白色ノイズを含む信号を 2 つ生成します。Hamming ウィンドウを使用してデータブロックを逓減します。
1. 信号の幅を定義します。
2. sin 関数と
rnd関数を使用して、共通周波数
fc を持つ 2 つの信号を定義します。
rnd 関数は 0 から指定された数値の範囲で一様分布する乱数のベクトルを返すので、これらの信号は常に異なります。
3. 2 つの信号の最初の 100 個のサンプルをプロットします。
4. pspectrum 関数を使用して、重なりの比率 0.5 で 40 個の重なり合うセグメントに分割し、Hamming ウィンドウを使用して各セグメントをウィンドウ処理することで、y1 のパワースペクトルを取得します。
5. match関数と
max関数を使用して、パワースペクトルのピークサンプルを求めます。
6. スペクトルをデシベルでプロットします。マーカーを使用して、共通周波数と最大デシベル値をマーク付けします。
このプロットは、すべての信号パワーが共通周波数 fc と 1-fc で発生していることを示しています。
7. ノイズパワーを計算します。
8. ノイズパワーゲイン (単位: dB) を計算します。
9. 上記の 2 つの周波数サンプルをスペクトル長さで割った値が正弦成分における平均パワー、すなわち 0.5 になるという事実に基づいて高さを計算します。
10. 理論上の高さと実際の高さをデシベルで比較します。
cspectrum 関数
一般的に、2 つの信号の類似性を検出するにはクロススペクトルを利用します。たとえば、既知の音声の波形 (母音 a など) を未知の音声の波形 (単語 apple など) と比較して、既知の波形が未知の波形の中に存在するかどうかを調べるときに、この手法を用います。時系列のパワースペクトルがその自己相関とほぼ等しいことと同様に、2 つの時系列のクロススペクトルはその相互相関とほぼ等しくなります。定常ランダムシーケンスの場合、スペクトル関数は相関関数と同じ値を返します。
1. 信号 y1 と y2 に cspectrum 関数を適用します。このとき、重なりの比率 0.5 で 40 個の重なり合うセグメントに分割し、逓減された矩形のウィンドウを使用して各セグメントをウィンドウ処理します。
2. スペクトルをデシベルでプロットします。
3. クロススペクトルをプロットします。これは複素スペクトルなので、大きさに log 関数を適用する必要があります。
y1 と y2 のクロススペクトルは共通周波数 fc と 1- fc でピークを示しています。
コヒーレンス関数と SN 比関数
coherence 関数は信号間の線形依存を測定し、2 つの信号のクロススペクトルの大きさの二乗を両方のパワースペクトルで割った値を返し、その値の範囲は 0 から 1 です。コヒーレンス関数の値 1 は、その周波数帯域で両方の信号にノイズがない強い成分が含まれていることを示し、値 0 はその周波数帯域内のほとんどがノイズであることを示す傾向にあります。
SN 比関数 snr は、コヒーレンス関数を (1 - コヒーレンス関数) で割った値と等しく、任意の成分の帯域内で 2 つの信号が強い成分を持つ場所で最大となり、信号の強さとセンサーまたは背景ノイズの強さの比に比例します。
1. 信号 y1 と y2 に coherence 関数を適用します。このとき、重なりの比率 0.5 で 40 個の重なり合うセグメントに分割し、Hamming ウィンドウを使用して各セグメントをウィンドウ処理します。
2. コヒーレンス関数をプロットします。マーカーを使用して、共通周波数と最大値をマーク付けします。
3. 信号 y1 と y2 に snr 関数を適用します。このとき、重なりの比率 0.5 で 40 個の重なり合うセグメントに分割し、Hamming ウィンドウを使用して各セグメントをウィンドウ処理します。
4. SN 比関数をプロットします。マーカーを使用して、共通周波数と最大値をマーク付けします。
coherence 関数と snr 関数はどちらも、2 つの信号の 1 つの周波数成分で最大値となり、両側の 2 本の小さな棒によって付加ノイズが示されています。