Allora non ho ben capito se i 30 sono secondi o sono valori letti (o nel caso c'è un valore letto ogno secondo e quindi 30 valori in 30 secondi)
Ad ogni modo io imposterei una variabile count che si aggiorna ogni volta volta che il valore letto è < 140 e se count = 30 esci dal ciclo e quindi termina la lettura. Te lo scrivo in modo molto rozzo ma questa dovrebbe essere l'idea
a = vettore[ # di elementi ]; % il tuo vettore
b = vettore_ris [ # di elementi]; %vettore dove inserire i risultati
c = length(a)
int count; % variabile che si incrementa di uno ogni volta che a[i] < 140
for i = 1:c
if(a[1] > 150 )
b[i] =0;
elseif(a[1] < 140)
b[i] = 51;
count++;
if(count == 31)
c=length(a) % c = lenght così al prossimo ritorno al for il ciclo termina
end
else % non fare nulla per valori compresi tra 140 e 150 altrimenti matlab da errore se incontri valori in questo range
end % fine dell'if(a[1] > 150 )
end % fine del for
In linea di massima dovrebbe essere qualcosa del genere, non l'ho provata quindi non so dirti se funzionante.
alla fine otterrai che il vettore b conterrà valori 0 ,51, e posizioni vuote.
Se il vettore con le parti vuote è poco carino una la funziona reshape che ti elimina le parti vuote di una matrice.
Spero di esserti stato d'aiuto