Parse accelerometer values as int16 (remove float conversion)

This commit is contained in:
Олександр Гуранець 2026-02-24 15:12:49 +02:00
parent c5d98d53cd
commit 3d94bf3008

View File

@ -14,6 +14,9 @@ import config
class FileDatasource: class FileDatasource:
INT16_MIN = -32768
INT16_MAX = 32767
def __init__(self, accelerometer_filename: str, gps_filename: str) -> None: def __init__(self, accelerometer_filename: str, gps_filename: str) -> None:
self.accelerometer_filename = accelerometer_filename self.accelerometer_filename = accelerometer_filename
self.gps_filename = gps_filename self.gps_filename = gps_filename
@ -199,13 +202,24 @@ class FileDatasource:
# Otherwise treat it as header-ish (skip it) # Otherwise treat it as header-ish (skip it)
return True, None return True, None
@staticmethod
def _parse_int16(s: str) -> int:
"""
Parse a signed 16-bit integer from string representation.
The file is expected to contain integer literals (e.g. "123", "-42").
"""
v = int(s)
if not FileDatasource.INT16_MIN <= v <= FileDatasource.INT16_MAX:
raise ValueError(f"Value {v} is out of signed 16-bit range")
return v
@staticmethod @staticmethod
def _parse_acc(row: List[str]) -> Accelerometer: def _parse_acc(row: List[str]) -> Accelerometer:
if len(row) < 3: if len(row) < 3:
raise ValueError(f"Accelerometer row must have 3 values (x,y,z). Got: {row}") raise ValueError(f"Accelerometer row must have 3 values (x,y,z). Got: {row}")
x = int(float(row[0])) x = FileDatasource._parse_int16(row[0])
y = int(float(row[1])) y = FileDatasource._parse_int16(row[1])
z = int(float(row[2])) z = FileDatasource._parse_int16(row[2])
return Accelerometer(x=x, y=y, z=z) return Accelerometer(x=x, y=y, z=z)
@staticmethod @staticmethod