function periodogramma(x,Fs,tol)

    % calcola il periodogramma cumulato della sequenza scalare x
    % x  : sequenza dei dati
    % Fs : frequenza di campionamento
    % tol: tolleranza (%)
         
    
% 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;

%PxxW = pwelch(x);
%fx = [1:length(PxxW)]*Fs/length(PxxW);


% 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;

%var2x = Px(N/2);
% 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;
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]');
legend('periodogramma', 'periodogramma ''ideale''', 'tolleranza' ,2);



figure
hold on
plot(f,Sx(1:N/2),':r')
plot(f,ones(size(f))*var2x);


