ic=vr/R1;
[Fic,Dic]=filtra(ic);
[pos,neg]=posneg(Dic);
vceNeg=vce(neg);
icNeg=ic(neg);
La funzione filtra trova l'andamento approssimato della derivata del segnale di input, del quale ci interessano esclusivamente i passaggi per lo zero. Vediamo nel dettaglio la funzione filtra:
b=fir1(20,0.1);
Fx=filtfilt(b,1,x);
Dx=diff(Fx);
x è la variabile di input, Fx e Dx sono le variabili di output e sono rispettivamente il segnale di input filtrato passa basso e l'andamento della derivata del segnale filtrato. Il comando fir1(20,0.1) restituisce i coefficenti di un filtro FIR passa basso di ordine 20, con frequenza di taglio pari a 0.1 volte la frequenza di folding. Il comando filtfilt(b,1,x) applica il filtro appena progettato al segnale di input, riducendo al minimo l'effetto di delay del filtro (figura ). Infine il comando diff(Fx) calcola l'andamento approssimato della derivata del segnale filtrato (figura ).
[ non filtrata]
[Derivata della non filtrata]
[ filtrata] [Derivata della filtrata]
|
La funzione posneg separa semplicemente gli indici dei punti in cui il segnale di input è , da quelli in cui è :
pos=find(x>=0);
neg=find(x<0);
Utilizzando queste due funzioni riusciamo a trovare automaticamente i punti in cui (figura ), nonostante la rumorosità del segnale di partenza: infatti proprio a causa del rumore non è possibile usare direttamente il comando diff (figura ).