v3_win.m
% v3_win.m
%
% Script to create and plot both time and frequency
% domain characteristics of common DSP windows
%
%**********************************************************************
% Author: Randall J. Allemang
% Date: 18-Apr-94
% Structural Dynamics Research Lab
% University of Cincinnati
% Cincinnati, Ohio 45221-0072
% TEL: 513-556-2725
% FAX: 513-556-3390
% E-MAIL: randy.allemang@uc.edu
%*********************************************************************
%
plt=input('Store Results to File (No=0, Yes=1): (0) ');
if isempty(plt),plt=0,end;
n=input('Enter Time Blocksize: (1024) '); if isempty(n),n=1024,end;
loop=1;
while(loop==1),
window=menu('Enter Window Type: ', ...
'P100 - Hamming ', ...
'P110 - Hanning ', ...
'P200 ', ...
'P201 ', ...
'P220 - Hanning * Hanning ', ...
'P301 - Flattop ', ...
'P310 - Flattop ', ...
'P330 - Hanning * Hanning * Hanning ', ...
'Flattop (B&K)', ...
'Flattop (HP)', ...
'BLACKMAN', ...
'P000 - Boxcar', ...
'User Defined', ...
'EXIT');
if isempty(window),window=1,end;
if(window==1),
% P100 - Hamming
a0=1.0;
a1=2*0.428752;
a2=0;
a3=0;
a4=0;
end;
if(window==2),
% P110 - Hanning
a0=1.0;
a1=1.0;
a2=0;
a3=0;
a4=0;
end;
if(window==3),
% P200
a0=1.0;
a1=2*0.585956;
a2=2*0.0922245;
a3=0;
a4=0;
end;
if(window==4),
% P201
a0=0.999028;
a1=2*0.925752;
a2=2*0.351960;
a3=0;
a4=0;
end;
if(window==5),
% P220 - Hanning * Hanning
a0=1.0;
a1=2*0.666667;
a2=2*0.166667;
a3=0;
a4=0;
end;
if(window==6),
% P301 - Flattop
a0=0.9994484;
a1=2*0.955728;
a2=2*0.538289;
a3=2*0.0915810;
a4=0;
end;
if(window==7),
% P310 - Flattop
a0=1.0;
a1=2*0.684988;
a2=2*0.202701;
a3=2*0.0177127;
a4=0;
end;
if(window==8),
% P330 - Hanning * Hanning * Hanning
a0=1.0;
a1=2*0.75;
a2=2*0.30;
a3=2*0.05;
a4=0;
end;
if(window==9),
% FLATTOP (B&K)
a0=1.00;
a1=1.93;
a2=1.29;
a3=0.388;
a4=0.322;
end;
if(window==10),
% FLATTOP (HP)
a0=1.00;
a1=1.93;
a2=1.29;
a3=0.388;
a4=0.322;
end;
if(window==11),
% BLACKMAN
a0=0.42;
a1=0.50;
a2=0.08;
a3=0;
a4=0;
end;
if(window==13),
% User Defined
a0= input('a0 Coefficient: (1.0)'); if isempty(a0),a0=1.0,end;
a1= input('a1 Coefficient: (0.5)'); if isempty(a1),a1=0.5,end;
a2= input('a2 Coefficient: (0.4)'); if isempty(a2),a2=0.4,end;
a3= input('a3 Coefficient: (0.3)'); if isempty(a3),a3=0.3,end;
a4= input('a4 Coefficient: (0.2)'); if isempty(a4),a4=0.2,end;
end;
if(window==14),
break
end;
%
% Create Window
%
w = (a0 - a1*cos(2*pi*(0:n-1)/(n-1)) + a2*cos(4*pi*(0:n-1)/(n-1)) ...
- a3*cos(6*pi*(0:n-1)/(n-1)) + a4*cos(8*pi*(0:n-1)/(n-1)))';
% Normalize window
w=w./(a0+a1+a2+a3+a4);
if(window==12),
w=ones(n,1);
end;
%
% Plot Time Window
%
dt=(0:n-1)/(n-1);
plot(dt,w),grid
xlabel('Time: (0-T)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_t.eps, end;
%
% Plot Time Window with random data
%
y=5.0*(rand(1024,1)-0.5);
dt=(0:n-1)/(n-1);
data=y.*w;
plot(dt,data),grid
xlabel('Time: (0-T)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_4.eps, end;
%
% Plot Time Window with sine data
%
y=5.0*sin(21*pi*(0:n-1)/(n-1));
dt=(0:n-1)/(n-1);
data=y'.*w;
plot(dt,data),grid
xlabel('Time: (0-T)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_5.eps, end;
%
% Plot Time Window with sine data and random data
%
y=5.0*sin(21*pi*(0:n-1)/(n-1))+5.0*(rand(1,1024)-0.5);
data=y'.*w;
dt=(0:n-1)/(n-1);
plot(dt,data),grid
xlabel('Time: (0-T)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_6.eps, end;
%
% Plot frequency domain result with Time Window
% with sine data and random data
%
DATA=fft(data);
DATA-fftshift(DATA);
df=(0:n/2-1);
semilogy(df,abs(DATA(1:512,1))),grid
xlabel('Frequency: (Delta f)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_6.eps, end;
%
% Plot frequency domain result with Time Window
% with sine data and random data
%
semilogy(df(1:100),abs(DATA(1:100))),grid
xlabel('Frequency: (Delta f)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_7.eps, end;
%
%
% Plot Frequency Window
%
N=8*n;
ww=zeros(N,1);
ww(1:n)=w;
% plot(ww)
% pause
W=fft(ww);
W=W./W(1);
for ii=1:N
if(W(ii)==0), W(ii)=1e-5;,end;
end;
df=(0:n/4-1)/(8);
semilogy(df,abs(W(1:(n/4)))),grid
xlabel('Frequency: (Delta f)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_1.eps, end;
df=[];
df=(0:n/8-1)/(8);
semilogy(df,abs(W(1:(n/8)))),grid
xlabel('Frequency: (Delta f)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_2.eps, end;
W=fftshift(W);
df=[];
df=(1:N)/(8)-N/16;
semilogy(df(N/2-128:N/2+128),abs(W(N/2-127:N/2+129))),grid
xlabel('Frequency: (Delta f)')
ylabel('Amplitude')
pause
if(plt==1),print -f1 -deps v3_win_3.eps, end;
end