このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ノイズで歪んだ信号の検出
ノイズがあると、信号のスペクトル成分を特定することがしばしば困難になります。このような場合には、周波数解析が有効です。
たとえば、3 次の歪みを生じる非線形増幅器のシミュレートされた出力について考えてみます。
入力信号は 3.6 kHz でサンプリングされた 180 Hz の単位振幅の正弦波です。10,000 個のサンプルを生成します。
N = 1e4; n = 0:N-1; fs = 3600; f0 = 180; t = n/fs; y = sin(2*pi*f0*t);
入力に単位分散ホワイト ノイズを付加します。3 次の多項式を使用して増幅器をモデル化します。polyval
を使用して入力信号を増幅器に通します。出力の一部をプロットします。比較のため、純粋な正弦波の出力をプロットします。
rng default noise = randn(size(y)); dispol = [0.5 0.75 1 0]; out = polyval(dispol,y+noise); ns = 300:500; plot(t(ns),[out(ns);polyval(dispol,y(ns))]) xlabel('Time (s)') ylabel('Signals') axis tight legend('With white noise','No white noise')
pwelch
を使用して、出力のパワー スペクトル密度を計算し、プロットします。
[pxx,f] = pwelch(out,[],[],[],fs); pwelch(out,[],[],[],fs)
増幅器は 3 次の歪みを生じるため、出力信号は以下をもつことが予想されます。
DC (ゼロ周波数) 成分
入力と同じ 180 Hz の周波数をもつ "基本波" 成分
2 つの "高調波" -- 入力の 2 倍および 3 倍の 360 Hz および 540 Hz の周波数をもつ周波数成分。
3 次非線形性について出力が予想どおりであることを確認します。
[pks,lox] = findpeaks(pxx,'NPeaks',4,'SortStr','descend'); hold on plot(f(lox)/1000,10*log10(pks),'or') hold off legend('PSD','Frequency Components')
components = sort([f(lox) f0*(0:3)'])'
components = 2×4
0.8789 180.1758 360.3516 540.5273
0 180.0000 360.0000 540.0000
pwelch
は、信号をオーバーラップ セグメントごとに分割し、各セグメントについてピリオドグラムを計算して平均を計算します。既定では、50% のオーバーラップのある 8 つのセグメントを使用します。サンプルが 10,000 個ある場合、これはセグメントあたり 2,222 個のサンプルに相当します。
信号を複数の短いセグメントに分割すると、平均の計算量が増加します。ピリオドグラムは滑らかになりますが、分解能が低くなります。高い高調波は識別できなくなります。
pwelch(out,222,[],[],fs)
信号を複数の長いセグメントに分割すると、分解能は高くなりますが、ランダム性も高くなります。信号と高調波は予想されたとおりの位置に出現します。ただし、高い高調波より大きなパワーをもつスプリアス高周波ピークが少なくとも 1 つ存在します。
pwelch(out,4444,[],[],fs)