mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik "Waveform" Dateiformat Rigol Oszilloskope


Autor: Simon Budig (nomis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits.

Ich bin gerade dabei, das "Waveform"-Dateiformat (.wfm) der 
Rigol-Oszilloskope auseinanderzupflücken und bin damit eigentlich auch 
schon recht weit gekommen (Das Projekt auf 
http://wfmreader.sourceforge.net/ kenne ich, da fehlen allerdings noch 
ein paar Sachen).

Allerdings fehlt mir eine entscheidende Information um die Daten 
wirklich interpretieren zu können und da stehe ich gerade auf dem 
Schlauch und zwar ist das die Samplerate der gespeicherten Daten.

Ich habe Testdaten mit einem Rigol DS1102CD aufgenommen, das ist ein 
100MHz-Oszi mit 400MSa/s.

Ich habe vier Bytes im Header gefunden (ab Offset 0x64), in denen 
höchstwahrscheinlich die Information zur Samplerate drin steht, kriege 
die aber nicht interpretiert (die 8 Bytes danach geben die Länge eines 
divs in Picosekunden an). Vielleicht hat hier ja eine Idee, wie die 
Informationen da drin stecken:

Ich habe hier bei vier versch. Beispiele die abgedeckte Zeitspanne am 
Oszilloskop abgelesen und kann daraus auf die Samplerate rückwärts 
errechnen. Das würde ich mir gerne ersparen.

Alle folgenden Beispiele haben 524288 Samples
time/div  abgedeckte Zeitspanne   Zeit/sample  Samplerate    Bytefolge
 10ms    -131.072 .. 131.0715ms    0.00050ms     2MHz       00 24 F4 49
  1ms     -13.107 ..  13.1071ms    0.00005ms    20MHz       80 96 98 4B
500us      -5.243 ..   5.2430ms    0.00002ms    50MHz       20 BC 3E 4C
200us      -2.622 ..   2.6140ms    0.00001ms   100MHz       20 BC BE 4C

Was ist der Zusammenhang zwischen der Bytefolge und entweder Samplerate 
oder Zeit/Sample? Diese Angabe brauche ich, um einem Sample in den 
gespeicherten Daten eine Zeit zuordnen zu können. Ich kann zwar lesen 
wie groß ein div beim Sampeln war, das nutzt mir aber nix, weil ich ja 
nicht weiß, wieviele divs die Aufzeichnung enthält...

Viele andere Zahlenangaben sind mit 2, 4 oder 8 Bytes gespeichert, und 
dann mit Little-Endian. Allerdings komme ich mit diesem Ansatz auf 
keinen grünen Zweig.

Fällt jemandem hier ein Zusammenhang auf?

Vielen Dank,
        Simon

Autor: Simon Budig (nomis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und hier nochmal ein kompletter Header mit den daraus gelesenen 
Informationen:
waveform.wfm
0000 0000: A5 A5 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 0010: 01 00 00 00 00 00 00 00  00 00 00 00 00 00 08 00  ........ ........
0000 0020: 05 00 00 00 A0 86 01 00  00 00 00 00 00 00 20 41  ........ ...... A
0000 0030: 00 00 00 00 A0 86 01 00  00 00 00 00 D0 07 00 00  ........ ........
0000 0040: 00 00 00 00 00 00 20 41  00 00 00 00 D0 07 00 00  ...... A ........
0000 0050: 00 00 00 00 00 C2 EB 0B  00 00 00 00 00 4A DD F2  ........ .....J..
0000 0060: 12 00 00 00 80 96 98 4A  00 F2 05 2A 01 00 00 00  .......J ...*....
0000 0070: 00 0A D5 A4 0D 00 00 00  01 06 7F 00 00 02 04 06  ........ ........
0000 0080: 08 0A 0C 07 08 09 0A 0B  0C 0D 0E 0F 0F 0F 00 00  ........ ........
0000 0090: 0B 00 02 00 00 00 80 3F  95 BF D6 33 48 00 00 00  .......? ...3H...
0000 00A0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 00B0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 00C0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 00D0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 00E0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 00F0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
0000 0100: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........
[... hier folgen die Sampledaten ...]

Folgende Informationen kriege ich da raus:
 'ch1_att': 10.0,
 'ch1_inverted': 0,
 'ch1_pos': 0.0,
 'ch1_scale': 1.0,
 'ch1_scale_view': 1.0,
 'ch1_written': 0,
 'ch2_att': 10.0,
 'ch2_inverted': 0,
 'ch2_pos': 0.0,
 'ch2_scale': 0.02,
 'ch2_scale_view': 0.02,
 'ch2_written': 0,
 'cur_channel': 5,
 'disp_offset': 0.081384,
 'disp_scale': 0.0002,
 'have_data': 1,
 'la_current': 6,
 'la_enabled': (1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
 'la_pos': (0, 2, 4, 6, 8, 10, 12, 7, 8, 9, 10, 11, 12, 13, 14, 15),
 'la_scale0_7': 15,
 'la_scale8_f': 15,
 'la_written': 1,
 'magic': '0xa5a5',
 'no_datapoints': 524288,
 'sampling_freq': 1251513984,
 'sampling_offset': 0.0586,
 'sampling_scale': 0.005,
 'trigger_edge': 'rising',
 'trigger_mode': 'Edge',
 'trigger_src': 'D5',
 'trigger_type': 2,

Viele Grüße,
        Simon

Autor: Simon Budig (nomis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Duh, das war ein dicker Schlauch.

Die 32 Bit sind schlicht und einfach single-prescision Floats, die die 
Samplingrate darstellen - ein Freund hat mich da gerade mit der Nase 
drauf gestoßen...

Danke fürs Problemanhören   :-)

Viele Grüße,
        Simon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.