function fir_finestre
	
	% frequenza di campionamento
	fs = 44100;
	
	% specifica ulla banda passante del filtro
	fm = 8000;
	
	% con ordine dispari il ritardo è intero (D=(N-1)/2)
	N = 63;
	t = (0:N-1)/fs;
	D = (N-1)/2;
	
	% finestra
%     w = ones(1,N);
%     w = hamming(N).';
    w = kaiser(N,30).';
	w = w/sum(w);
	
	% risoluzione in frequenza
	K = N*100;
	omega = (-K/2:K/2-1)*2*pi/K;
	f = omega*fs/(2*pi);
	
	% risposta in frequenza della finestra
	W = zeros(1,K);
	for k = 1:K
		W(k) = sum(w.*exp(-1i*omega(k)*(0:N-1)));
	end
	
	% campioni della risposta all'impuslo del filtro analogico
	h = 2*fm*sinc(2*fm*(t-D/fs)) .* w;
	h = h/sum(h);
	
	% risposta in frequenza della finestra
	H = zeros(1,K);
	for k = 1:K
		H(k) = sum(h.*exp(-1i*omega(k)*(0:N-1)));
	end
	
	e = 10^floor(log10(min(abs([H,W]))));
	
    figure(2)
	subplot(2,1,1)
	hold off
	plot(f,20*log10(abs(W)));
	hold on
	plot(f,20*log10(e+rect(f/(2*fm))),'g');
	plot(f,20*log10(abs(H)),'r');
	set(gca,'XLim',[-2*fm,2*fm])
	set(gca,'YLim',[-80,20])
    
	M = fs/10;
	ts = (0:M-1)/fs;
	x = 2*(cos(2*pi*50*ts)>0)-1;
	y = filter(h,1,x);
	
	subplot(2,1,2)
	hold off
	plot(ts,x,'--')
	hold on
	plot(ts,y,'r')
	
end

function v = rect(x)
	v = 0*x;
	for i = 1:numel(x)
		v(i) = abs(x(i)) < 0.5;
	end
end
