Spitzenspannungsmesser in Software?
#4
Hallo Kai,

kaimex,'index.php?page=Thread&postID=201300#post201300 schrieb:Die "if"-Bedingungen entsprechen in einer realen Elektronik idealen Ventilen='Dioden ohne Schwellspannung'. Da es also ein nicht-linearer Algorithmus ist, kann er nicht durch ein IIR-Filter (linearer Filter-Algorithmus) allein nachgebildet werden.

danke, macht Sinn - dann wäre das also schonmal geklärt.

kaimex,'index.php?page=Thread&postID=201300#post201300 schrieb:Aus dem gezeigten Code-Segment ergibt sich nicht, wozu z2 überhaupt berechnet wird. Da fehlt noch was.

Ja, und ich habe nicht genau hingeschaut: Als Wert für die Anzeige wird z2 zurückgegeben, wie man hinter obigem Link leicht sehen kann. Im Pseudo-Code oben ist noch ein Fehler: Statt dem Sample x wird dessen Betrag genommen. Unterschlagen habe ich auch, dass in jedem Schritt 1e-30 dazugezählt wird - vermutlich wegen begrenzter Auflösung.

Wenn man dann den Code auf einen 1kHz-Sinus-Ton mit Amplitude 1 und Dauer 0.2 Sekunden loslässt (grauer Bereich), verhalten sich z1 und z2 über der Zeit folgendermaßen:

   

Jetzt kann ich über den Sinn von z2 nur mutmaßen, dass damit die Anzeige beruhigt werden soll. Das Verhalten von z1 sieht eher wie gefordert aus. Das kann ich ja mal noch an den geforderten Punkten aus obigem Wikipedia-Artikel überprüfen.

kaimex,'index.php?page=Thread&postID=201300#post201300 schrieb:Für eine Aussteuerungsanzeige würde hier noch die Implementierung einer Haltezeit fehlen, also eines Zeitintervalls, während dessen der letzte Spitzenwert unverändert angezeigt wird.

Hm, dafür soll doch eigentlich die relative langsame Abfall-Konstante sorgen? Die DIN (Danke, Peter!) sagt dazu: "Eine lange Rücklaufzeit erleichtert das Ablesen der Spitzenwerte.". Oder meinst Du einen Peak-Hold wie in neueren Consumer-Geräten, der den höchsten Wert wie einen Schleppzeiger nach oben schiebt, und nur alle paar Sekunden löscht?

Wo wir gerade an dieser Stelle sind: Jetzt wundere ich mich etwas, dass die Abfall-Konstante auf jedes Sample angewendet wird, die Anstiegs-Addition aber nur für Veränderungen nach oben passiert. Müsste es nicht eher so aussehen?

Code:
if x > z1:
            z1 += a1 * (x - z1)
        else:
            z1 -= z1 * b1

Der Unterschied im Plot, vergrößert:

   

Wie erwartet ist das erreichte Niveau höher, aber sonst ziemlich ähnlich. Hm. Kommt das vielleicht daher, dass in einer analogen Schaltung das Leck ständig aktiv ist, während vor der Auflandung die Diode (das "if") sitzt?

kaimex,'index.php?page=Thread&postID=201300#post201300 schrieb:Die Konstanten ergeben sich aus a*Fs bzw b*Fs = 1/T, der gewünschten Zeitkonstante T. Das folgt aus dem gewünschten exponentiellen Abfall. Mit dem Ansatz z = z0 exp(-t/T) folgt dz/dt = -1/T * z bzw. delta_z ~ -delta_t/T z. Wenn du delta_t = 1/Fs einsetzt, folgt dann b *Fs=1/T.

Ah. Ok, darauf hätte ich auch kommen können, Danke!

Dann kann ich ja mal die oben genannten 1.7 ms und 650 ms einsetzen und ausprobieren.

Viele Grüße
Andreas
Zitieren


Nachrichten in diesem Thema
[Kein Betreff] - von Peter Ruhrberg - 05.03.2017, 00:09
[Kein Betreff] - von kaimex - 05.03.2017, 00:59
[Kein Betreff] - von andreas42 - 05.03.2017, 13:26
[Kein Betreff] - von kaimex - 05.03.2017, 14:24
[Kein Betreff] - von andreas42 - 05.03.2017, 15:12
[Kein Betreff] - von kaimex - 05.03.2017, 15:54
[Kein Betreff] - von Magnetophonliebhaber - 08.03.2017, 13:13
[Kein Betreff] - von kaimex - 08.03.2017, 16:32
[Kein Betreff] - von Friedrich Engel - 09.03.2017, 10:59
[Kein Betreff] - von kaimex - 09.03.2017, 11:40
[Kein Betreff] - von besoe - 09.03.2017, 16:03
[Kein Betreff] - von kaimex - 09.03.2017, 16:16
[Kein Betreff] - von besoe - 09.03.2017, 19:16
[Kein Betreff] - von kaimex - 09.03.2017, 20:12
[Kein Betreff] - von andreas42 - 10.03.2017, 00:17
[Kein Betreff] - von besoe - 10.03.2017, 07:09
[Kein Betreff] - von kaimex - 10.03.2017, 10:06
[Kein Betreff] - von besoe - 10.03.2017, 13:03
[Kein Betreff] - von kaimex - 10.03.2017, 14:46

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste