PCIe-Messkarten So lassen sich mit einer Software blockweise Mittelwerte bilden
Die blockweise Mittelwertbildung mit Hilfe von Software verbessert die Performance der verwendeten Hardware. Am Beispiel eines Testsystems mit einem PC und der M4i.2230-x8 zeigen wir die Vorteile.
Anbieter zum Thema

Der auf Speicherblöcken bzw. segmentiertem Speicher basierende Modus für die Mittelwertbildung wird bei Digitizern für verschiedene Anwendungen eingesetzt, bei denen inkohärentes Rauschen aus einem Signal entfernt werden muss. Unabhängig vom Hersteller des Digitizers begrenzen sämtliche FPGA-basierten Hardware-Implementierungen des Modus für die blockweise Mittelwertbildung die maximale Größe des Segments, dessen Mittelwert bestimmt werden soll.
Die Begrenzung hängt von der Kapazität des FPGA ab und liegt in der Regel bei 32.000 bis 500.000 Werten. Doch wie lassen sich die Grenzen überwinden, um mit schnellen PCIe-Streamingfähigkeiten der M4i-Serie von Spectrum einen blockweise Mittelwertbildung in der Software zu implementieren? Am Beispiel des 8-Bit-Digitizers M4i.2230-x8 mit einem Kanal und 5 GS/s werden die Ergebnisse der hardware- und softwarebasierten Methoden für die blockweise Mittelwertbildung verglichen.
Was blockweise Mittelwertbildung bedeutet
Zuerst soll die Frage geklärt werden, was blockweise Mittelwertbildung bedeutet. Der Modus „Block Averaging“, also die blockweise Mittelwertbildung, verbessert die Signaltreue eines beliebigen periodischen Signals dadurch, zufällig auftretende Rauschanteile entfernt werden. Mit dem Modus lassen sich mehrere einzelne Signale aufzeichnen, akkumulieren und der Mittelwert berechnen. Der Prozess verringert den Anteil statischen Rauschens und verbessert die optische Darstellung des periodischen Signals.
Das gemittelte Signal hat eine verbesserte Messauflösung und einen erhöhten Signal-Rausch-Abstand. So lässt sich der Modus beispielsweise bei Radartests, Ultraschallprüfungen, Glasfaserprüfungen, Laserentfernungsmessungen, in der Massenspektroskopie oder in der medizinischen Bildgebung einsetzen. Der Screenshot (Bild 1) zeigt ein Low-Pegel-Signal von ungefähr 2 mV, dass vollständig von statischem Rauschen überlagert wird, sowie die Verbesserung, die sich durch Anpassung verschiedener Parameter für die Mittelwertbildung erzielen lässt.
Während das Quellensignal in der ursprünglichen Einzelaufzeichnung überhaupt nicht zu sehen ist, erkennt man nach einer 10-maligen Mittelwertbildung ein Signal mit 5 Spitzen. Durch eine 1000-malige blockweise Mittelwertbildung lässt sich die Signalqualität nochmals verbessern und die tatsächliche Form des Signals einschließlich sekundärer maximaler und minimaler Spitzenwerte erkennen.
Der Aufbau des Testsystems
Das Testsystem bestand aus einem herkömmlichen Büro-PC aus der Entwicklungsabteilung von Spectrum und den folgenden Komponenten:
- Motherboard: Gigabyte GA-H77-D3H,
- Prozessor: Intel i7-3770 4 x 3.4 GHz,
- Speicher: 8 GByte DDR3,
- SSD: 120 GByte Samsung 840 EVO,
- Betriebssystem: Windows 7 Professional 64 Bit und
- Compiler: Visual Studio 2005 in der Standard-Edition.
Das Motherboard verfügt über einen freien PCIe x8 Gen2-Steckplatz, der für die Digitizer-Karte genutzt wird. Dieser Steckplatz ist für eine Nutzdatengröße (Payload Size) von 256 Bytes ausgelegt, wodurch die M4i-Karten von Spectrum eine maximale Streaming-Geschwindigkeit von ungefähr 3,4 GB/s erreichen können (ohne Datenverarbeitung). Die Testsoftware wurde komplett in der Programmiersprache C++ geschrieben und basiert auf Streaming-Beispielen von Spectrum.
Die Testkarte empfing ein externes Triggersignal und zeichnete ein Segment Daten je Triggerereignis auf. Die Daten wurden im On-Board-Speicher der Karte gespeichert und über Scatter-Gather-DMA direkt in den PC-Speicher übertragen, wo sie für die blockweise Mittelwertbildung akkumuliert wurden. Verschiedene Setups und Methoden der Verbesserung wurden getestet, um herauszufinden, wie leistungsstark das System sein kann. Im Quellcode (Bild 2) wurde eine Threaded-Version wurde die Summenbildung mit Hilfe einer Schleife realisiert. Das ist der entscheidende und die Geschwindigkeit bestimmende Teil der Software.
(ID:44201835)