Obróka danych pomiarowych

Formaty danych

Efektem prawie każdego doświadczenia w laboratorium IBW są pliki z pomiarami. Program DAQUIS zapisuje pomierzone wartości w plikach binarnych o formacie INT. Ten format ma już ponad 20 lat i znacząco zmieniał się w przeciągu tych lat. Istotą tego formatu było przechowywanie danych pomiarowych w formacie danych dostarczanych przez kartę pomiarową. Jedyny wyjątek dotyczył kart pomiarowych, które nie obsługiwały wartości ze znakiem (w kodzie uzupełnienia do 2). Jeśli 12-bitowa karta pomiarowa przekazywała wartości 0 do 4095 (np. dla napięć -5V od +5V) to program odbierający dane z karty pomiarowej, odejmował od nich wartość 2048 i w pliku były zapisywane wartości w zakresie -2048 do 2047 w 16-bitowym kodzie uzupełnienia do 2. Ostatnio została zakupiona 16-bitowa karta pomiarowa firmy Advantech (PCI-1747U) i pliki pomiarowe INT zarejestrowane tą kartą będą miały wartości w zakresie -32768 do 32767.

Wspólną cechą wszystkich formatów INT jest brak wartości czasu. Te pliki zakładają stały krok czasowy a początek pomiaru zawsze w chwli czasu t=0s. Każdy plik w format INT składa się z nagłówka i danych pomiarowych. Pierwszy format INT miał bardzo prosty nagłówek:

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 0
10unsigned intNsliczba pomierzonych próbek w każdym kanale
1416 x doubleFact16 współczyników kalibracyjnych (po jednym na kanał)

Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Bardzo łatwo było oczacować wielkość pliku w bajtach: 142 + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact w danym kanale. Teoretycznie ten format może przechować 256 kanałów po 4294967296 próbek (plik miał by wielkość 2TB).

Następny format INT miał dane pomiarowe przechowywane w identyczny sposób. Zmienił się tylko nagłówek. Zostały dodane nagłówki poszczególnych kanałów:

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 2
10unsigned intNsliczba pomierzonych próbek w każdym kanale
14unsigned intDateTimezakodowana data i czas pomiaru z dokładnością do dwóch sekund
18unsigned charTitleLenliczba znaków w tytule pomiary
1960 x charTitletytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną
79doubleFact(1)współczynik kalibracyjnych pierwszego kanału
87unsigned charUnitLen(1)liczba znaków w nazwie jednostki
887 x charUnit(1)nazwa jednostki
95unsigned charChannelLen(1)liczba znaków w nazwie kanałów
9640 x charChannel(1)nazwa nakału
136doubleUser1(1)pierwszy parametr użytkownika
144doubleUser2(1)drugi parametr użytkownika
152doubleUser3(1)trzeci parametr użytkownika
160doubleUser4(1)czwarty parametr użytkownika
168doubleUser5(1)piąty parametr użytkownika
176doubleFact(2)współczynik kalibracyjnych drugiego kanału
184unsigned charUnitLen(2)liczba znaków w nazwie jednostki
1857 x charUnit(2)nazwa jednostki
192unsigned charChannelLen(2)liczba znaków w nazwie kanałów
19340 x charChannel(2)nazwa nakału
233doubleUser1(2)pierwszy parametr użytkownika
241doubleUser2(2)drugi parametr użytkownika
249doubleUser3(2)trzeci parametr użytkownika
257doubleUser4(2)czwarty parametr użytkownika
265doubleUser5(2)piąty parametr użytkownika
273doubleFact(3)współczynik kalibracyjnych trzeciego kanału
............

Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) w danym kanale.

Krótko po opracowaniu tego formatu okazało się konieczne wzbogacenie współczynnika kalibracyjnego o wartość stałego przesunięcia. Aby nie zmieniać nagłówka wykorzystano liczbę User1 na wartość przesunięcia:

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 3
10unsigned intNsliczba pomierzonych próbek w każdym kanale
14unsigned intDateTimezakodowana data i czas pomiaru z dokładnością do dwóch sekund
18unsigned charTitleLenliczba znaków w tytule pomiary
1960 x charTitletytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną
79doubleFact(1)współczynik kalibracyjnych pierwszego kanału
87unsigned charUnitLen(1)liczba znaków w nazwie jednostki
887 x charUnit(1)nazwa jednostki
95unsigned charChannelLen(1)liczba znaków w nazwie kanałów
9640 x charChannel(1)nazwa nakału
136doubleConst(1)stałe przesunięcia dla kanału pierwszego
144doubleUser1(1)pierwszy parametr użytkownika
152doubleUser2(1)drugi parametr użytkownika
160doubleUser3(1)trzeci parametr użytkownika
168doubleUser4(1)czwarty parametr użytkownika
176doubleFact(2)współczynik kalibracyjnych drugiego kanału
184unsigned charUnitLen(2)liczba znaków w nazwie jednostki
1857 x charUnit(2)nazwa jednostki
192unsigned charChannelLen(2)liczba znaków w nazwie kanałów
19340 x charChannel(2)nazwa nakału
233doubleConst(2)stałe przesunięcia dla kanału drugiego
241doubleUser1(2)pierwszy parametr użytkownika
249doubleUser2(2)drugi parametr użytkownika
257doubleUser3(2)trzeci parametr użytkownika
265doubleUser4(2)czwarty parametr użytkownika
273doubleFact(3)współczynik kalibracyjnych trzeciego kanału
............

Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) i dodając wartość Const(i) w danym kanale.

W miarę rozwoju stanowisk pomiarowych okazało się, że zamiana kolejności próbek z danymi okazała się uciążliwa i czasochłonna. Wszystkie karty pomiarowe przekazują próbki w kolejności ich mierzenia, czyli Nc pomiarów w kolejnych kanałach, potem następna seria Nc pomiarów w kolejnych kanałach i tak dalej aż do serii Ns. Tą zmianę kolejności można przyrównać do transpozycji macierzy. W nagłówku pliku INT zmienił się tylko znacznik typu:

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 4
10unsigned intNsliczba pomierzonych próbek w każdym kanale
14unsigned intDateTimezakodowana data i czas pomiaru z dokładnością do dwóch sekund
18unsigned charTitleLenliczba znaków w tytule pomiary
1960 x charTitletytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną
79doubleFact(1)współczynik kalibracyjnych pierwszego kanału
87unsigned charUnitLen(1)liczba znaków w nazwie jednostki
887 x charUnit(1)nazwa jednostki
95unsigned charChannelLen(1)liczba znaków w nazwie kanałów
9640 x charChannel(1)nazwa nakału
136doubleConst(1)stałe przesunięcia dla kanału pierwszego
144doubleUser1(1)pierwszy parametr użytkownika
152doubleUser2(1)drugi parametr użytkownika
160doubleUser3(1)trzeci parametr użytkownika
168doubleUser4(1)czwarty parametr użytkownika
176doubleFact(2)współczynik kalibracyjnych drugiego kanału
184unsigned charUnitLen(2)liczba znaków w nazwie jednostki
1857 x charUnit(2)nazwa jednostki
192unsigned charChannelLen(2)liczba znaków w nazwie kanałów
19340 x charChannel(2)nazwa nakału
233doubleConst(2)stałe przesunięcia dla kanału drugiego
241doubleUser1(2)pierwszy parametr użytkownika
249doubleUser2(2)drugi parametr użytkownika
257doubleUser3(2)trzeci parametr użytkownika
265doubleUser4(2)czwarty parametr użytkownika
273doubleFact(3)współczynik kalibracyjnych trzeciego kanału
............

Potem następują dane pomiarowe: pierwsza seria pomiarów w kanałach od 1 do Nc, druga seria pomiarów w kanałach od 1 do Nc itd. aż do serii o numerze Ns. Każda próbka zajmowała 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) i dodając wartość Const(i) w danym kanale.

Program pomiarowy DAQUIS zapisuje pliki pomiarowe wyłącznie w tym ostatnim formacie INT. Na potrzeby programu WINFI32 zostały opracowane jeszcze dwa formaty danych. Mimo, że mają one rozszerzenie INT to nie przechowują wartości typu całkowitego, a wartości zmiennoprzecinkowe pojedynczej precyzji. W nagłówku pliku INT zmienił się tylko znacznik typu oraz pola Frac(i) i Const(i):

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 5
10unsigned intNsliczba pomierzonych próbek w każdym kanale
14unsigned intDateTimezakodowana data i czas pomiaru z dokładnością do dwóch sekund
18unsigned charTitleLenliczba znaków w tytule pomiary
1960 x charTitletytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną
79doubleFact(1)współczynik kalibracyjnych pierwszego kanału zawsze równy 1.0
87unsigned charUnitLen(1)liczba znaków w nazwie jednostki
887 x charUnit(1)nazwa jednostki
95unsigned charChannelLen(1)liczba znaków w nazwie kanałów
9640 x charChannel(1)nazwa nakału
136doubleConst(1)stałe przesunięcia dla kanału pierwszego zawsze równy 0.0
144doubleUser1(1)pierwszy parametr użytkownika
152doubleUser2(1)drugi parametr użytkownika
160doubleUser3(1)trzeci parametr użytkownika
168doubleUser4(1)czwarty parametr użytkownika
176doubleFact(2)współczynik kalibracyjnych drugiego kanału zawsze równy 1.0
184unsigned charUnitLen(2)liczba znaków w nazwie jednostki
1857 x charUnit(2)nazwa jednostki
192unsigned charChannelLen(2)liczba znaków w nazwie kanałów
19340 x charChannel(2)nazwa nakału
233doubleConst(2)stałe przesunięcia dla kanału drugiego zawsze równy 0.0
241doubleUser1(2)pierwszy parametr użytkownika
249doubleUser2(2)drugi parametr użytkownika
257doubleUser3(2)trzeci parametr użytkownika
265doubleUser4(2)czwarty parametr użytkownika
273doubleFact(3)współczynik kalibracyjnych trzeciego kanału zawsze równy 1.0
............

Potem następują dane pomiarowe: pierwsza seria próbek w kanałach od 1 do Nc, druga seria próbek w kanałach od 1 do Nc itd. aż do serii o numerze Ns. Każda próbka zajmowała 4 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 4*Nc*Ns. W tym pliku są przechowywane wartości rzeczywiste i nie trzeba ich przez nic mnożyć i niczego dodawać.

Ostatni format INT różni się tylko o poprzedniego typem przechowywanych wartości. zamiast liczb rzeczywistych pojedynczej precyzji przechowuje liczby zespolone pojedynczej precyzji. W nagłówku pliku INT zmienił się tylko znacznik typu:

0doubleFpczęstotliwość próbkowania w Hz
8unsigned charNcliczba pomierzonych kanałów
9unsigned charTypeznacznik typu pliku zawsze równy 6
10unsigned intNsliczba pomierzonych próbek w każdym kanale
14unsigned intDateTimezakodowana data i czas pomiaru z dokładnością do dwóch sekund
18unsigned charTitleLenliczba znaków w tytule pomiary
1960 x charTitletytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną
79doubleFact(1)współczynik kalibracyjnych pierwszego kanału zawsze równy 1.0
87unsigned charUnitLen(1)liczba znaków w nazwie jednostki
887 x charUnit(1)nazwa jednostki
95unsigned charChannelLen(1)liczba znaków w nazwie kanałów
9640 x charChannel(1)nazwa nakału
136doubleConst(1)stałe przesunięcia dla kanału pierwszego zawsze równy 0.0
144doubleUser1(1)pierwszy parametr użytkownika
152doubleUser2(1)drugi parametr użytkownika
160doubleUser3(1)trzeci parametr użytkownika
168doubleUser4(1)czwarty parametr użytkownika
176doubleFact(2)współczynik kalibracyjnych drugiego kanału zawsze równy 1.0
184unsigned charUnitLen(2)liczba znaków w nazwie jednostki
1857 x charUnit(2)nazwa jednostki
192unsigned charChannelLen(2)liczba znaków w nazwie kanałów
19340 x charChannel(2)nazwa nakału
233doubleConst(2)stałe przesunięcia dla kanału drugiego zawsze równy 0.0
241doubleUser2(2)pierwszy parametr użytkownika
249doubleUser3(2)drugi parametr użytkownika
257doubleUser4(2)trzeci parametr użytkownika
265doubleUser5(2)czwarty parametr użytkownika
273doubleFact(3)współczynik kalibracyjnych trzeciego kanału zawsze równy 1.0
............

Potem następują dane pomiarowe: pierwsza seria próbek w kanałach od 1 do Nc (pary realis i imaginaris), druga seria próbek w kanałach od 1 do Nc (pary realis i imaginaris) itd. aż do serii o numerze Ns. Każda próbka zajmowała 8 bajtów. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 8*Nc*Ns. W tym pliku są przechowywane wartości rzeczywiste i nie trzeba ich przez nic mnożyć i niczego dodawać.

Inne formaty danych

Program WINFI32 potrafi odczytać i zapisać jeszcze dwa inne formaty danych: format tekstowy i format M11.

Format tekstowy jest to plik tekstowy z pomiarami zapisanymi w kolumnach. W pierwszej kolumnie musi być zapisany czas, w drugiej i kolejnych, pomierzone wartości. Separatorem kolumn musi być znak tabulatora. Liczby rzeczywiste muszą mieć kropkę jako separator dziesiętny bez względu na bieżące ustawienia regionalne w komputerze. Pierwsza kolumna (z czasem) w rzeczywistości nie jest czytana z wyjątkiem dwóch pierwszych wartości. Ich rónica jest przyjmowana za krok czasowy i na tej podstawie jest przyjmowana częstotliwość próbkowania. Liczby są traktowane jako liczby rzeczywiste. Po przeczytaniu pliku, części urojone wszystkich liczb są równe zero.

Format pliku M11 jest potrzebny do generowania fali w kanale falowym. Tłok faloroba jest sterowany przez program WS, który akceptuje tylko pliki w formacie M11. Bufowa tego pliku jest rekordowa.Każdy rekord ma stałą długość 122 bajtów. Każdy rekord ma znacznik typu. Nagłówek pliku składa się z czterech rekordów o typach: 2, 5, 5, 0. Po nim następują po 3 rekordy opisujące każdy kanał (typy: 1, 3, 4). Na końcu są rekordy z danymi (po 15 wartości w każdym rekordzie). Pliki sterujące ruchem tłoka muszą mieć jeden kanał. Ogólna budowa rekordu jest następująca

0unsigned charTypeznacznik typu rekordu
1120 x unsigned charDatadane zależne od typu
121unsigned charEndznacznik końca rekordu zawsze równy 127

Pierwszy rekord o typie 2 przechowuje informacje o długości pomiaru i kroku czasowym:

0unsigned charTypewartość 2
1unsigned charwartość 1
267 x unsigned charzarezerwowane
69unsigned charwartość 2
7011 x unsigned charzarezerwowane
81doubleNsliczba próbek
89doublewartość 0,0444375
97doublet0czas pierwszej pórbki w sekundach (powinno być 0.0)
105doubledtkrok czasowy w sekundach
1138 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Drugi rekord o typie 5 przechowuje nazwę pomiaru:

0unsigned charTypewartość 5
168 x charNamenazwa pomiaru uzupełniona na końcu zerami
69unsigned charwartość 2
7051 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Trzeci rekord o typie 5 przechowuje nazwę jednostki czasu:

0unsigned charTypewartość 5
168 x charNamenazwa jednostki czasu uzupełniona na końcu zerami, powinno być "Sec"
69unsigned charwartość 2
7051 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Czwarty rekord o typie 0 przechowuje numer typu pliku i nazwę pomiaru:

0unsigned charTypewartość 0
1unsigned shortObjecttyp obiektu dla sterowania klapą musi być 30000
366 x charNamenazwa pomiaru uzupełniona na końcu zerami
69unsigned charwartość 2
7051 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Pierwszy rekord opisujący kanał o typie 1 przechowuje nazwę i statystykę sygnału zapisanego w tym kanale:

0unsigned charTypewartość 1
1unsigned shortObjecttyp obiektu dla sterowania klapą musi być 30000
3unsigned shortwartość 1
541 x charNamenazwa kanału uzupełniona na końcu zerami
46doubleMinwartość minimalna
54doubleMinPosnumer próbki, która ma wartość minimalną
62doubleMaxwartość maksymalna
70doubleMaxPosnumer próbki, która ma wartość maksymalną
78unsigned charwartość 2
799 x unsigned charzarezerwowane
88doubleMeanwartość średnia
96doubleVarwariancja
104doubleAcorautokorelacja
1129 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Drugi rekord opisujący kanał o typie 2 jest niewykorzystany w plikach sterowania tłokiem:

0unsigned charTypewartość 2
177 x unsigned charzarezerwowane
78unsigned charwartość 2
7942 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Trzeci rekord opisujący kanał o typie 3 przechowuje tylko skalę czasu:

0unsigned charTypewartość 3
1doubleTimeScaleskala czasu, zawsze powinno być 1.0
9112 x unsigned charzarezerwowane
121unsigned charEndwartość 127

Rekordy z danymi mają typ 7:

0unsigned charTypewartość 3
115 x doubleData15 kolejnych wartości sygnału
121unsigned charEndwartość 127