前の記事で、矩形窓とカイザー窓での周波数分解能について調べました。結果としては、端数の周波数でない限り矩形窓の方が分解能は高く、カイザー窓だと今回のケースでは 3 Hz 差なら分離、2Hz 差だとちょっと怪しい、ということでした。
で、前回は周波数差を持った信号が観測時間の中で同位相(0deg)で入った場合としましたが、位相差を持って入ってきた場合はどうなるかを見てみることにします。カイザー窓では観測時間内での対称性が矩形窓に対して少しいじられてしまうので、何か違ったことが起きるかも知れない、ということです。

スクリプトはこれです。

clear // Data をクリア

N=2048
t=0:1/N:1-1/N

n=1:5

phi(n)=(n-1)*45 // 正弦波の位相: 0deg, 45deg, 90deg, 135deg, 180deg
deg=string(phi)

fs1=10 // 信号周波数 1
fs2=fs1+2 //
信号周波数 2
Stfs1=string(fs1)
Stfs2=string(fs2)

frequency=strcat([Stfs1,'Hz + ',Stfs2,'Hz'])

amp1=1 //
信号周波数 1 の振幅
amp2=1 //
信号周波数 2 の振幅

Kaiser=window('kr',N,%pi*2) // Kaiser窓

S_sin=zeros(5,2048);

for i=1:5
    S_sin(i,:)=amp1*sin(2*%pi*t*fs1)+amp2*sin(2*%pi*(t*fs2+phi(i)/360))
    WS_sin(i,:)=Kaiser.*S_sin(i,:)

    f_sin(i,:)=fft(S_sin(i,:)) // 関数 fft を呼び出す。
    M_sin(i,:)=abs(f_sin(i,:))*2/N // 振幅を計算
    wf_sin(i,:)=fft(WS_sin(i,:))
    WM_sin(i,:)=abs(wf_sin(i,:))*2/N  
   
end


fig_axis=[0,1,-2,2]

plot_title=strcat([frequency,' waveform'])
plot_title1=strcat([frequency,' Kaiser window waveform α=2'])

scf(10);clf;
subplot(2,1,1)
plot(t',S_sin(n,:)')
title(plot_title,'fontsize',4)
mtlb_axis(fig_axis)
legend(deg(1),deg(2),deg(3),deg(4),deg(5),-1)
xlabel('Time(sec)','fontsize',3)
ylabel('Level','fontsize',3)

subplot(2,1,2)
plot(t',WS_sin(n,:)')
title(plot_title1,'fontsize',4)
mtlb_axis(fig_axis)
legend(deg(1),deg(2),deg(3),deg(4),deg(5),-1)
xlabel('Time(sec)','fontsize',3)
ylabel('Level','fontsize',3)

fmax=20 // ここで表示幅を変える。
   
ft_axis=[0,fmax,-100,10]
scf(20);clf;
subplot(2,1,1)
plot([0:fmax]',20.*log10(M_sin(n,1:fmax+1)'))
title('Rectangular window separation','fontsize',4)
legend(deg(1),deg(2),deg(3),deg(4),deg(5),-1)
xlabel('Frequency(Hz)','fontsize',3)
ylabel('Level(dB)','fontsize',3)

subplot(2,1,2)
plot([0:fmax]',20.*log10(WM_sin(n,1:fmax+1)'))
title('Kaiser window separation α=2','fontsize',4)
mtlb_axis(ft_axis)
legend(deg(1),deg(2),deg(3),deg(4),deg(5),-1)
xlabel('Frequency(Hz)','fontsize',3)
ylabel('Level(dB)','fontsize',3)


fs1 に対して、2Hz 高い周波数が混ざった場合にそれらの位相差が、0deg、45deg、90deg、135deg、180deg だったということです。

結果はこうなりました。
波形です。周波数が高いので見づらいですね。
イメージ 2
スペクトラムです。
イメージ 1
180deg(画面左端で反転)位相差で混在しているときは、13Hz のレベルがぐっと落ちます。分離が良くなったように見えます。またノイズフロアも低減しています。ただしこうなるのも偶然の産物でしかなく、周波数差がある=位相差がどんどん変化している、なのでどのタイミングで混じり合った二つの信号を拾うかで結果が異なってしまうので注意が必要です。