Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

近接した正弦波の検出

ガウス ウィンドウ g(t)=e-πt2 でウィンドウ処理された正弦波 f(x)=ej2πνx を考えます。短時間変換は次のようになります。

Vgf(t,η)=ej2πνt-e-π(x-t)2e-j2π(x-t)(η-ν)dx=e-π(η-ν)2ej2πνt.

周波数関数として表示した場合、変換は ν における (時間的に) 一定の振動と、そこから減衰するガウスを結合します。瞬時周波数のシンクロスクイーズ推定

Ωgf(t,η)=1j2πe-π(η-ν)2tej2πνte-π(η-ν)2ej2πνt=ν,

これは、標準的な定義 (2π)-1dargf(x)/dx を使用して取得される値と等しくなります。正弦波の重ね合わせ

f(x)=k=1KAkej2πνkx,

の場合、短時間変換は次のようになります。

Vgf(t,η)=k=1KAke-π(η-νk)2ej2πνkt.

2 つの正弦波から構成される信号のサンプルを 1024 個作成します。1 つの正弦波には ω0=π/5 ラジアン/サンプルの正規化周波数があります。もう 1 つの正弦波の周波数と振幅は 3 倍になります。

N = 1024;
n = 0:N-1;

w0 = pi/5;
x = exp(1j*w0*n)+3*exp(1j*3*w0*n);

信号の短時間フーリエ変換を計算します。256 個のサンプルのガウス ウィンドウを、α=20、隣接するセクション間にある 255 個のオーバーラップのサンプル、および 1024 個の DFT 点と共に使用します。変換の絶対値をプロットします。

Nw = 256;
nfft = 1024;
alpha = 20;

[s,w,t] = spectrogram(x,gausswin(Nw,alpha),Nw-1,nfft,'centered');

surf(t,w/pi,abs(s),'EdgeColor','none')
view(2)
axis tight
xlabel('Samples')
ylabel('Normalized Frequency (\times\pi rad/sample)')

フーリエ シンクロスクイーズド変換の結果は、より鋭くより限定されたスペクトルの推定になります。

[ss,sw,st] = fsst(x,[],gausswin(Nw,alpha));

fsst(x,'yaxis')

正弦波は予測された周波数値での一定の振動として表示されます。リッジからの減衰がガウスであることを確認するには、変換の瞬間的な値をプロットして、ガウスの 2 つのインスタンスを重ね合わせます。α およびウィンドウの長さに関して、ガウス振幅と標準偏差を表します。周波数領域ウィンドウの標準偏差は、時間領域ウィンドウの標準偏差の逆数であることを思い出してください。

rstdev = (Nw-1)/(2*alpha);
amp = rstdev*sqrt(2*pi);

instransf = abs(s(:,128));

plot(w/pi,instransf)
hold on
plot(w/pi,[1 3]*amp.*exp(-rstdev^2/2*(w-[1 3]*w0).^2),'--')
hold off
xlabel('Normalized Frequency (\times\pi rad/sample)')
lg = legend('Transform','First sinusoid','Second sinusoid');
lg.Location = 'best';

フーリエ シンクロスクイーズド変換は、推定された瞬時周波数での信号のエネルギー量を集中させます。

stem(sw/pi,abs(ss(:,128)))
xlabel('Normalized Frequency (\times\pi rad/sample)')
title('Synchrosqueezed Transform')

瞬時周波数のシンクロスクイーズド推定は、正弦波が 2Δ より離れている場合にのみ有効です。ここで、ガウス ウィンドウの

Δ=1σ2log2

および σ は標準偏差です。

前の計算を繰り返しますが、今度は 2 番目の正弦波に ω0+1.9Δ ラジアン/サンプルの正規化周波数があることを指定します。

D = sqrt(2*log(2))/rstdev;

w1 = w0+1.9*D;

x = exp(1j*w0*n)+3*exp(1j*w1*n);

[s,w,t] = spectrogram(x,gausswin(Nw,alpha),Nw-1,nfft,'centered');
instransf = abs(s(:,20));

plot(w/pi,instransf)
hold on
plot(w/pi,[1 3]*amp.*exp(-rstdev^2/2*(w-[w0 w1]).^2),'--')
hold off
xlabel('Normalized Frequency (\times\pi rad/sample)')
lg = legend('Transform','First sinusoid','Second sinusoid');
lg.Location = 'best';

フーリエ シンクロスクイーズド変換は、|ω1-ω0|<2Δ であるため、正弦波をうまく分解できません。スペクトル推定で値が大幅に減ります。

[ss,sw,st] = fsst(x,[],gausswin(Nw,alpha));

stem(sw/pi,abs(ss(:,128)))
xlabel('Normalized Frequency (\times\pi rad/sample)')
title('Synchrosqueezed Transform')

参考

| | |

関連するトピック