TimeWidget (Kivy)
Eigenständiges matplotlib-Kivy-Widget zur Anzeige eines Zeitsignals — kein GRC-Block, sondern reiner Python/Kivy-Code aus dem Kivy-Frontpanel-Projekt.
TimeWidget lässt sich nicht in den GNU Radio Companion ziehen und hat keine .block.yml-Definition — es ist eine gewöhnliche Kivy-`BoxLayout`-Unterklasse aus ssb-usb-frontpanel-kivy, ausgelagert in das eigenständige kivy-sdr-widgets-Projekt. Dokumentiert wird es hier trotzdem im Block-Verzeichnis, weil es im selben Sinn wie ein GRC-Block eine wiederverwendbare, über klar definierte Ein-/Ausgänge (hier: Kivy-Properties statt Signalports) ansprechbare Einheit ist.TimeWidget zeichnet ein Zeitsignal (Sample-Index vs. lineare Amplitude) als matplotlib-Achse in einem Kivy-Widget — das Schwesterwidget von SpectrumWidget, nach demselben Muster gebaut. Es kennt kein GNU Radio — jede Datenquelle, die einen Vektor aufeinanderfolgender Samples liefert, kann es füttern.
Eigenschaften (Kivy-Properties statt Parameter)
| Property | Typ | Bedeutung |
|---|---|---|
label |
str |
Titel über dem Plot |
values |
list[float] |
aufeinanderfolgende Samples, lineare Amplitude |
samp_rate |
float |
Abtastrate, für die Sample-zu-Zeit-Umrechnung auf der x-Achse |
line_color |
list[float, float, float] |
RGB der Kurve, Werte 0..1 |
Die x-Achsenbeschriftung wird bei jedem Neuzeichnen automatisch aus len(values) und samp_rate berechnet und zeigt sowohl den Sample-Index als auch die entsprechende Zeitspanne in Millisekunden an (z. B. „Sample n (0 … 1023, entspricht 0 … 21.3 ms bei 48000 Hz)").
Verwendung
from time_widget import TimeWidget
widget = TimeWidget(
label="Demoduliertes Zeitsignal (nach Demodulation)",
samp_rate=48_000,
line_color=[1.0, 0.72, 0.31],
)
widget.values = list(some_audio_samples) # loest Neuzeichnen aus
from time_widget import TimeWidget
widget = TimeWidget(
label="Demoduliertes Zeitsignal (nach Demodulation)",
samp_rate=48_000,
line_color=[1.0, 0.72, 0.31],
)
widget.values = list(some_audio_samples) # loest Neuzeichnen aus
kivy_garden.matplotlib hat einen Race-Condition-Bug — zeichnen mehrere SpectrumWidget/TimeWidget-Instanzen ihre Textur im selben Kivy-Frame neu, kann sich das gegenseitig überschreiben. Details und Workaround (Round-Robin-Update) im Kivy-Frontpanel-Artikel, Abschnitt 3.5.Widget.export_to_png() geprüft) — mit synthetischem 1-kHz-Testton aus dem eigenständigen Testskript test_time_widget.py:

Download
SpectrumWidget und TimeWidget) inklusive Testskripte als ZIP —
kivy-sdr-widgets.zip herunterladen, entpacken, dann:
pip install kivy kivy_garden.matplotlib numpy
python3 test_time_widget.py
pip install kivy kivy_garden.matplotlib numpy
python3 test_time_widget.py