ASAsense Binary Table-formaat (ABT)
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