function [ z ] = serie( emax )
%SERIE Approssimazione in serie di Fourier troncata
%Caricamento dati
prn=load('s00.prn');
t=prn(:,1);
vr=prn(:,4);
dati=load('data.txt');
R1=dati(2);
%Selezione di un periodo del segnale
trigger=find(t==0);
estremi=find(vr==vr(trigger));
tPer=t(estremi(1):estremi(2)-1);
vrPer=vr(estremi(1):estremi(2)-1);
icPer=vrPer/R1;
N=length(icPer);
ck=fft(icPer);
k=2;
e=emax+1;
while e>emax
ckRid=ck;
ckRid(k+1:N-k+1)=0;
x=ifft(ckRid);
x=real((x));
e=max(abs(icPer-x))/max(icPer)*100;
if k==floor((N+1)/2)
k=k+1;
break;
end
k=k+1;
end
%Parametri calcolati sul segnale approssimato
ICmax=max(x);
ICmin=min(x);
ICpp=ICmax-ICmin;
ICrapp=ICmax/ICmin;
%Valor medio
ICmedia=sum(x)/N;
%Valore efficace
ICrms=sqrt(sum(x.2)/N);
%Deviazione standard
sigmaIC=sqrt(ICrms2-ICmedia2);
%Fattore di cresta
ICmediaAbs=sum(abs(x))/N;
CF=ICmax/ICmediaAbs;
%Fattore di forma
FF=ICrms/ICmediaAbs;
%Parametri calcolati sul segnale di partenza
ICmaxR=max(icPer);
ICminR=min(icPer);
ICppR=ICmaxR-ICminR;
ICrappR=ICmaxR/ICminR;
%Valor medio
ICmediaR=sum(icPer)/N;
%Valore efficace
ICrmsR=sqrt(sum(icPer.2)/N);
%Deviazione standard
sigmaICR=sqrt(ICrmsR2-ICmediaR2);
%Fattore di cresta
ICmediaAbsR=sum(abs(icPer))/N;
CFR=ICmaxR/ICmediaAbsR;
%Fattore di forma
FFR=ICrmsR/ICmediaAbsR;
%Errori
eMax=abs((ICmax-ICmaxR)/ICmaxR)*100;
eMin=abs((ICmin-ICminR)/ICminR)*100;
ePP=abs((ICpp-ICppR)/ICppR)*100;
eRapp=abs((ICrapp-ICrappR)/ICrappR)*100;
eMedia=abs((ICmedia-ICmediaR)/ICmediaR)*100;
eRMS=abs((ICrms-ICrmsR)/ICrmsR)*100;
eSigma=abs((sigmaIC-sigmaICR)/sigmaICR)*100;
eCF=abs((CF-CFR)/CFR)*100;
eFF=abs((FF-FFR)/FFR)*100;
%Visualizzazione risultati
plot(tPer,icPer,'.');
hold on;
plot(tPer,x,'r');
xlabel('t [s]');
ylabel('Ic [mA]');
title('Ic e sua approssimazione in serie di Fourier');
stringa=['Numero campioni (periodo): ' num2str(N)];
disp(stringa);
stringa=['Numero armoniche: ' num2str(k-2)];
disp(stringa);
stringa=['ICmax = ' num2str(ICmax) ' mA Errore: ' num2str(eMax) ' %'];
disp(stringa);
stringa=['ICmin = ' num2str(ICmin) ' mA Errore: ' num2str(eMin) ' %'];
disp(stringa);
stringa=['ICpp = ' num2str(ICpp) ' mA Errore: ' num2str(ePP) ' %'];
disp(stringa);
stringa=['ICrapp = ' num2str(ICrapp) ' mA Errore: ' num2str(eRapp) ' %'];
disp(stringa);
stringa=['ICmedia = ' num2str(ICmedia) ' mA Errore: ' num2str(eMedia) ' %'];
disp(stringa);
stringa=['ICrms = ' num2str(ICrms) ' mA Errore: ' num2str(eRMS) ' %'];
disp(stringa);
stringa=['sigmaIC = ' num2str(sigmaIC) ' mA Errore: ' num2str(eSigma) ' %'];
disp(stringa);
stringa=['CF = ' num2str(CF) ' Errore: ' num2str(eCF) ' %'];
disp(stringa);
stringa=['FF = ' num2str(FF) ' Errore: ' num2str(eFF) ' %'];
disp(stringa);
pause;
close;