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
).
|
[
[Derivata della
[ [Derivata della
|
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
).