ASAsense Binary Table-formaat (ABT)

From ASAsense Documentation (staging)
Revision as of 10:24, 14 October 2026 by Thomas (talk | contribs) (nl translation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Het ASAsense Binary Table-formaat (ABT) is een alternatief voor het CSV-formaat, maar dan voor binaire data met vaste rijlengtes. De structuur is als volgt:

naam lengte (bytes) type toegestane waarden uitleg
file_type 1 u8 1 Het interne nummer van het bestandstype en de versie
n_cols 4 u32 1-u32::max Het aantal kolommen
col_widths 4 × n_cols u32[n_cols] 1-u32::max per kolom n_cols u32-gehele getallen die de breedte van de kolommen in bytes beschrijven
metadata_length 4 u32 0-u32::max De lengte van het metadataveld (kan 0 zijn als het moet worden overgeslagen)
metadata metadata_length char[] string met vaste lengte (dus geen '\0'-teken dat het einde van de string aangeeft) JSON-gecodeerde metadata
data variabel, tot EOF byte[] willekeurig De eigenlijke data

De JSON-metadata moet een object zijn met de volgende structuur:

veld verplicht type uitleg
n_rows false number Het aantal rijen in het bestand, indien vooraf bekend (kan worden weggelaten voor streamingdata)
comment false string Een vrije tekst
columns true een lijst van kolomdefinitie-objecten Een lijst van objecten die de kolommen in meer detail beschrijven (moet n_cols elementen bevatten)
extra false JSON-object Een JSON-object dat vrij kan worden ingevuld

Een "kolomdefinitie-object" moet het volgende formaat hebben:

veld verplicht type uitleg
name false string Een optionele naam voor de kolom
comment false string Een vrije tekst
datatype true string Een identificatie van het datatype van de kolom

De datatype-identificaties kunnen willekeurig zijn, maar de lezer moet minstens de volgende ondersteunen:

identificatie beschrijving
utf8 Interpreteer de data als een UTF-8-string (met vaste lengte; hoeft niet te eindigen op '\0')
int Interpreteer de data als een geheel getal met teken
uint Interpreteer de data als een geheel getal zonder teken
float Interpreteer de data als kommagetal (alleen mogelijk voor velden van 4 of 8 bytes)
bool Booleaanse waarde (0 = false, al het andere = true)
numtype/div "div" moet worden vervangen door een willekeurig kommagetal. De data wordt eerst geïnterpreteerd als "numtype" (int, uint of float) en daarna gedeeld door "div". Dit is vooral nuttig om decimale getallen in velden met gehele getallen op te slaan.
unix_timestamp(numtype/div) Interpreteert de data zoals tussen de haakjes aangegeven (dus elk numtype, met optionele deler), maar houdt er rekening mee dat het om een Unix-tijdstempel gaat (seconden sinds de Unix-epoch, 1 januari 1970 om UTC)

Andere, onbekende datatype-identificaties moeten door de lezer als ondoorzichtige binaire data (bytes) worden behandeld.

Veelgebruikte extra metadatavelden

In veel ABT-bestanden die ASAsense gebruikt, vindt u de volgende extra metadatavelden:

Veldnaam Veldtype Standaardwaarde Beschrijving
sorted_by_timestamp bool true Geeft aan of de data in het ABT-bestand gesorteerd is op tijdstempel (kolom 1)
frame_width_s float NaN Geeft de framebreedte van één sample aan (bijvoorbeeld de bemonsteringsperiode of de framebreedte van een spectrogram)

CLI-tool voor ABT-bestanden

Om het werken met het ABT-formaat te vereenvoudigen, zijn enkele voorgecompileerde programma's beschikbaar:

De MD5-sommen van de ZIP-bestanden zijn als volgt:

adcd6a227861bb6b188ef8c5748faae8  abt-cli-ubuntu-20.04-x86_64.zip
6f4c63cbd7416ead026f170c97b3ab89  abt-cli-ubuntu-22.04-x86_64.zip
39db54827d2634262d9d666b4262b212  abt-cli-win11-x64.zip