Advertisement
This is comment for paste
FRANCO
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function parsedData = parseRadarData(rawData)
- % Definisci la struttura dei dati parsati
- parsedData = struct('x', [], 'y', [], 'z', [], 'velocity', []);
- % Definisci la parola magica per sincronizzare i pacchetti
- magicWord = [2 1 4 3 6 5 8 7];
- magicWordBytes = length(magicWord);
- % Cerca la parola magica nei dati grezzi
- startIdx = [];
- for i = 1:(length(rawData) - magicWordBytes + 1)
- if all(rawData(i:i+magicWordBytes-1) == magicWord)
- startIdx = i;
- break;
- end
- end
- % Se la parola magica non viene trovata, esci dalla funzione
- if isempty(startIdx)
- warning('Parola magica non trovata nei dati ricevuti.');
- return;
- end
- % Estrai l'header del frame
- frameHeaderLength = 40; % Lunghezza dell'header del frame in byte
- frameHeader = rawData(startIdx + magicWordBytes : startIdx + magicWordBytes + frameHeaderLength - 1);
- % Estrai il numero di TLV nel frame
- numTLVs = typecast(uint8(frameHeader(35:38)), 'uint32');
- % Imposta il puntatore all'inizio dei TLV
- pointer = startIdx + magicWordBytes + frameHeaderLength;
- % Processa ciascun TLV
- for tlvIdx = 1:numTLVs
- % Leggi l'header del TLV
- tlvType = typecast(uint8(rawData(pointer:pointer+3)), 'uint32');
- tlvLength = typecast(uint8(rawData(pointer+4:pointer+7)), 'uint32');
- pointer = pointer + 8; % Salta l'header del TLV
- % Verifica che ci siano abbastanza dati rimanenti
- if pointer + tlvLength > length(rawData)
- warning('Lunghezza del TLV supera i dati disponibili.');
- return;
- end
- % Processa il TLV in base al tipo
- switch tlvType
- case 1 % Punti rilevati
- % Numero di punti rilevati
- numDetectedPoints = (tlvLength - 8) / 16; % 16 byte per punto
- if numDetectedPoints > 0
- % Estrai i dati dei punti
- pointData = rawData(pointer:pointer + numDetectedPoints * 16 - 1);
- pointData = typecast(uint8(pointData), 'single');
- pointData = reshape(pointData, [4, numDetectedPoints]);
- % Assegna i dati parsati alla struttura
- parsedData.x = pointData(1, :);
- parsedData.y = pointData(2, :);
- parsedData.z = pointData(3, :);
- parsedData.velocity = pointData(4, :);
- end
- % Aggiungi altri casi per altri tipi di TLV se necessario
- otherwise
- % TLV non supportato
- warning('Tipo di TLV non supportato: %d', tlvType);
- end
- % Aggiorna il puntatore alla fine del TLV corrente
- pointer = pointer + tlvLength - 8; % Sottrai 8 byte dell'header del TLV
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement