Non c'è bisogno di un ciclo while.
Una possibile soluzione potrebbe essere:
[*] fare una copia del vettore diinout
[*] identificare tutti i valori del vettore di input che verificano le due soglie ed assegnargli i nuovi valori
[*] creare una maschera di indici che identifichi gli indici degli elementi del vettore che vuoi modificare (i primi 16 di ogni gruppo di 96)
[*] usare la maschera di indici per assegnare al vettore di input (od a una sua copia, per conservare quello originale, ad esempio per verifiche) i valori modificati
Una possibile implementazione potrebbe essere quella che segue, fatta su un vettore di 30 elementi ed assegnando i valori NaN e Inf al posto di 0 e 1 (come nel tuo caso) solo per facilitare la visualizzazione del risultato:
% Numero totale valori
n_val=30;
% Valore di soglia
soglia=4;
% Passo del ruppo di valori
passo=6;
% Sotto passo del ruppo di valori
sub_set=3;
% Creazione dati di
v=randi([0 10],n_val,1);
% Creazione di una coia dei valiri di input
v0=v;
% Identificazione di tutti i valori che verificano le soglie e settaggio dei nuovi valori
v0(v0 <= soglia)=NaN;
v0(v0 > soglia)=Inf;
% Creazione di una maschera di indici:
% 1 per gli indici dei valori da considerare per ogni set
% 0 per gli alri indici
idx=logical(repmat([ones(sub_set,1);zeros(passo-sub_set,1)],n_val/passo,1))
% Creazione di una copia del vettore originale
v2=v;
% Assegnazione dei nuovi valori
v2(idx)=v0(idx)
% Display (solo per verifica del risultato)
% v: vettore originale
% v2 vettore modificato
% idx: indici dei valori che dovevano essere modificati
m=[v v2 idx]