窓関数の時間特性と周波数特性

clear; close all;


%%%%%%%%%% Time domain %%%%%%%%%%%%%%%%
T=1;
N=128;
w1 = [];
for n=0:N-1
  w1(n+1) = 1;
end
plot(1:N,w1,'DisplayName','Rectangular');
hold on;
%Hamming window
w3 = [];
for n=0:N-1
  w3(n+1) = 0.54-0.46*cos(2*n*pi/(N-1));
end
plot(1:N,w3,'DisplayName','Hamming');
%Hann window
w5 = [];
for n=0:N-1
  w5(n+1) = 0.5-0.5*cos(2*n*pi/(N-1));
end
plot(1:N,w5,'DisplayName','Hann');
%Blackman window
w7 = [];
for n=0:N-1
  w7(n+1) = 0.42-0.5*cos(2*n*pi/(N-1))+0.08*cos(4*n*pi/(N-1));
end
plot(1:N,w7,'DisplayName','Blackmann');

legend();

%%%%%%%%%% Frequency domain %%%%%%%%%%%%%%%%
%Rectangular window
figure();
subplot(221);
epsilon = 0.001;
% omega = linspace(0+epsilon,pi-epsilon,50000);
omega = linspace(0+epsilon,pi-epsilon,20000);
W1 = @(wT) sin(N*wT/2)./sin(wT/2).*exp(-j*(N-1)*wT/2);
W1_abs = 20*log10(abs(W1(omega*T))/max(abs(W1(omega*T))));
plot(omega, W1_abs, 'DisplayName','Rectangular');
legend();
ylim([-200,0]);

subplot(222);
%Hamming
W3 = 0.54*W1(omega*T) ...
    -0.23*(W1(omega*T-2*pi/(N-1))+W1(omega*T+2*pi/(N-1)));
W3_abs = 20*log10(abs(W3)/max(abs(W3)));
plot(omega, W3_abs, 'DisplayName','Hamming');
legend();
ylim([-200,0]);

subplot(223);
%Hann
W5 = 0.5*W1(omega*T) ...
    -0.25*(W1(omega*T-2*pi/(N-1))+W1(omega*T+2*pi/(N-1)));
W5_abs = 20*log10(abs(W5)/max(abs(W5)));
plot(omega, W5_abs, 'DisplayName','Hann');
legend();
ylim([-200,0]);

subplot(224);
%Blackmanna
W7 = 0.42*W1(omega*T) ...
    -0.25*(W1(omega*T-2*pi/(N-1))+W1(omega*T+2*pi/(N-1))) ...
    +0.04*(W1(omega*T-4*pi/(N-1))+W1(omega*T+4*pi/(N-1)));
W7_abs = 20*log10(abs(W7)/max(abs(W7)));
plot(omega, W7_abs, 'DisplayName','Blackmann');
ylim([-200,0]);

legend();


big;