Gestione dei dati che contengono overflow integer, rollover

0

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?

    
posta Keine 02.07.2015 - 14:54
fonte

1 risposta

1

L'ho risolto. Ancora una volta, non sembra elegante, ma ottiene il lavoro fatto.

while h<length(UsefulData)
       Diff=abs(UsefulData(h)-UsefulData(h+1))
       if abs(UsefulData(h)-UsefulData(h+1))>190
           UsefulData(h+1)=UsefulData(h+1)+256;
           plot(UsefulData(h-100:h+300), '-r'), hold on
           plot(101,UsefulData(h),'*','MarkerEdgeColor','b'), hold off
           continue
       end
       h=h+1;
end
    
risposta data 03.07.2015 - 12:42
fonte

Leggi altre domande sui tag