Sto scrivendo una piccola funzione MATLAB per analizzare i dati da una sonda laser.
I dati da analizzare sono fondamentalmente: x-data: posizione. y-data: intensità del laser (luce).
Il sensore cambia automaticamente i dati di intensità della luce da millivolt a unità di intensità arbitrarie che vanno da 0 a 255. Ho notato che con segnali intensi, la gamma 256 può essere "ruotata" più volte.
Ora,quandoidatisispostanosolounavolta,èpossibileefacilecorreggerel'overflowdellavariabile.
Per fare ciò, sto usando questo codice:
Index255= find(UsefulData>=247); % On intense-enough signals, the last data before breaking the 255 cap can be relatively low. (e.g. 249,261 --> 249,6)
ModeData = mode(UsefulData); % To help with discerning if data does reset from zero
for In=1:1:length(Index255)-1
RegionAverage = mean(UsefulData(Index255(In):Index255(In+1)));
DataQuantiles = quantile(UsefulData,10);
if RegionAverage < DataQuantiles(1) % If the mean of the reigon is lower than the mode (assumed to be the base), then it's obviously under it.
UsefulData(Index255(In)+1:Index255(In+1)-1)=UsefulData(Index255(In)+1:Index255(In+1)-1)+255;
else
continue
end
end
Potrebbe non essere elegante, ma svolge il lavoro (quando si verifica un solo overflow di un intero).
Tuttavia, non mi aspettavo un overflow variabile ripetuto e non ho idee su come correggerlo.
Come dovrebbero essere gestiti questi dati?