function periodogramma(x,Fs,tol)
%calcola il periodogramma cumulato della sequenza scalare x
%x:sequenza dei dati
% Fs: frequenza di campionamento
% tol: tolleranza (%)
%Riccardo Muradore Andrea Masiero 06-2004

%controllo dati
if nargin<3
   disp('    function periodogramma(x,fs,tol); ');
   disp('    Dati insufficienti.  ');
   return
end
if (isempty(x)),
   disp('    function periodogramma(x,Fs,tol); ');
   disp('    La sequenza ''x'' non contiene dati.')
   return
end
if ~((tol<100) & (tol>0)),
   disp('    function periodogramma(x,Fs,tol); ');
   disp('    ''tol'' deve essere positivo e minore di 100.');
   return
end

% numero dei dati (in numero pari)
N=max(size(x));
if ceil(N/2)*2 ~= N
   N= N-1;
   x=x(1:N);
end

%DFT della sequenza
X = fft(x,N);
%periodogramma
Sx=((abs(X)).^2)/N;
%periodogramma cumulato
Px=zeros(N/2,1);
Px(1)=Sx(1);
for k= 2:N/2
   Px(k)=Px(k-1)+2*Sx(k);
end
Px = Px/N;
%stima della varianza
mx = sum(x)/N;
var2x = sum((x-mx).^2)/N;
%periodogramma cumulato 'ideale'
I=zeros(N/2,1);
I(1)=1;
for k =2:N/2
   I(k)=2*k;
end
Ix=(I*var2x)./N;
Itolp=((I*var2x))./N + var2x*(tol/100);
Itoln=((I*var2x))./N - var2x*(tol/100);
%grafico del periodogramma
figure;
hold on;
f=(1:N/2)*(Fs/(N/2));
plot(f,Px,'b');
plot(f,Ix,'k');
plot(f,Itolp,'r:');
plot(f,Itoln,'r:');

title('Periodogramma Cumulato');
xlabel('Frequenza [0,Fs/2]');
legend('periodogramma ','periodogaramma''ideale''', 'tolleranza' ,2);
hold off