04.03.2017, 21:15
(Dieser Beitrag wurde zuletzt bearbeitet: 17.10.2022, 17:38 von andreas42.
Bearbeitungsgrund: Links
)
Hallo,
ich suche nicht nach einem Programm, sondern will verstehen, wie es funktioniert: Wie berechnet man für digitale Audiosignale den Anzeigewert eines Quasi-Spitzenwertanzeigers?
Dahinter stecken mehrere Absichten:
Analoge Vorbilder:
Leider liegen mir die Normen nicht im Urtext vor. Ein guter Startpunkt ist - neben den vielen kundigen Beiträgen hier im Foren-Archiv - der Wikipedia-Artikel zum Aussteuerungsmesser. Das gewünschte Anzeigeverhalten des nach DIN wird darin so beschrieben:
In den Datenblättern von Display-Treiber-ICs, z.B. LM3916 bei reichelt, ist die passende analoge Spitzenwert-Gleichrichterschaltung in den Anwendungshinweisen abgedruckt. Dort finden sich auch weitere Hinweise auf das dynamische Verhalten:
Für die Messung nach ITU-R 468 sind die Eigenschaften im oben verlinkten Artikel zumindest tabellarisch angegeben - nicht identisch zum DIN-PPM, aber prinzipiell ähnlich.
Digitales Beispiel:
Wie schon anderswo hier im Forum beschrieben benutze ich gerne das Linux-Programm Jnoisemeter als digitales Pegelmessgerät. Da es eigentlich zur Rauschmessung gedacht ist, hat es auch den Detektor mit dem passenden Ansprechverhalten (und die nötigen Bewertungsfilter) an Bord.
Da es freie Software ist, kann man ja "einfach" im Quelltext schauen, wie die Implementierung funktioniert. In Web-freundlicher Version ist die betreffende Stelle hier: http://roth-schmidt.net/~andreas/jnoisem...ource.html
In Pseudo-Python-Code umgeschrieben:
Es werden also von Sample zu Sample die Werte heruntergewichtet (mit b1 und b2), was wohl den geforderten langsamen Rücklauf herstellt. Und wenn das Signal gerade aufwärts geht (also x > z1, oder z1 > z2), wird auch etwas hinzugezählt - mit den Konstanten a1 und a2. Der Anzeigewert steht zu jeder Zeit in z1, wie man in der Klassendefinition sehen kann.
Das ganze sieht ja jetzt einem digitalen IIR-Filter ziemlich ähnlich - bis auf die hässlichen IF-Bedingungen. Beim Herumgooglen bin ich auf den Begriff "leaky integrator" gestoßen, also quasi ein Tiefpassfilter mit negativer Zeitkonstante?
Und hier hört mein Vortrag auf, und die Fragen fangen an:

Viele Grüße
Andreas
ich suche nicht nach einem Programm, sondern will verstehen, wie es funktioniert: Wie berechnet man für digitale Audiosignale den Anzeigewert eines Quasi-Spitzenwertanzeigers?
Dahinter stecken mehrere Absichten:
- Bei meinen Messungen von Bandeigenschaften habe ich das Rauschen bisher nicht bewertet; neben der gängigen A-Bewertung mit Effektivwertmessung möchte ich auch die Messung nach ITU-R 468 mit eben jenem Quasi-Spitzenwertanzeiger versuchen. Die Norm fordert ein bestimmtes Ansprech- und Abklingverhalten.
- Prinzipiell würde mich das Projekt interessieren, mit einem modernen Mikrocontroller und einem geeigneten Display (z.B. aus einem defekten Cassettendeck) einen normgerechten Aussteuerungsmesser für den Tonband-Betrieb zu bauen. Da braucht es natürlich auch genau diese Signalverarbeitung.
- Allgemeines Verständnis: Durch die Diskussion zum Pre-Emphasis nebenan angeregt möchte ich gerne ein wenig mehr von der digitalen Signalverarbeitung und den gängigen Filter-Mechanismen verstehen.
Analoge Vorbilder:
Leider liegen mir die Normen nicht im Urtext vor. Ein guter Startpunkt ist - neben den vielen kundigen Beiträgen hier im Foren-Archiv - der Wikipedia-Artikel zum Aussteuerungsmesser. Das gewünschte Anzeigeverhalten des nach DIN wird darin so beschrieben:
Wikipedia schrieb:Ihre Integrationszeit (Ansprechzeit) beträgt 10 ms, d. h. ein einzelner Impuls von 0 dB und 10 ms Dauer ruft eine Anzeige von −1 dB (90 %) hervor, eine Spitze von 0 dB und 3 ms Dauer eine Anzeige von −4 dB.
┅
Die Rücklaufzeit muss für sicheres Ablesen hinreichend groß sein; die Norm sieht einen Wert von 1,5 s für einen Abfall von 0 auf −20 dB vor.
In den Datenblättern von Display-Treiber-ICs, z.B. LM3916 bei reichelt, ist die passende analoge Spitzenwert-Gleichrichterschaltung in den Anwendungshinweisen abgedruckt. Dort finden sich auch weitere Hinweise auf das dynamische Verhalten:
LM3916 Datasheet schrieb:DIN 45406 calls for a response of 1 dB down from steady-state for a 10 ms tone burst and 4 dB down for a 3ms tone burst. These requirements are consistent with the other frequently encountered spec of 2 dB down for a 5 ms burst and are met by an attack time constant of 1.7 ms.
The specified return time of 1.5 s to −20 dB requires a 650 ms decay time constant.
Für die Messung nach ITU-R 468 sind die Eigenschaften im oben verlinkten Artikel zumindest tabellarisch angegeben - nicht identisch zum DIN-PPM, aber prinzipiell ähnlich.
Digitales Beispiel:
Wie schon anderswo hier im Forum beschrieben benutze ich gerne das Linux-Programm Jnoisemeter als digitales Pegelmessgerät. Da es eigentlich zur Rauschmessung gedacht ist, hat es auch den Detektor mit dem passenden Ansprechverhalten (und die nötigen Bewertungsfilter) an Bord.
Da es freie Software ist, kann man ja "einfach" im Quelltext schauen, wie die Implementierung funktioniert. In Web-freundlicher Version ist die betreffende Stelle hier: http://roth-schmidt.net/~andreas/jnoisem...ource.html
In Pseudo-Python-Code umgeschrieben:
Code:
fs = 48000 # Sampling-Rate
a1 = 670.0 / fs
b1 = 3.50 / fs
a2 = 6.60 / fs
b2 = 0.65 / fs
# zwei letzte Samples
z1 = 0.
z2 = 0.
# Schleife über die Samples
for x in samples:
z1 -= z1 * b1
if x > z1:
z1 += a1 * (x - z1)
z2 -= z2 * b2
if z1 > z2:
z2 += a2 * (z1 - z2)Es werden also von Sample zu Sample die Werte heruntergewichtet (mit b1 und b2), was wohl den geforderten langsamen Rücklauf herstellt. Und wenn das Signal gerade aufwärts geht (also x > z1, oder z1 > z2), wird auch etwas hinzugezählt - mit den Konstanten a1 und a2. Der Anzeigewert steht zu jeder Zeit in z1, wie man in der Klassendefinition sehen kann.
Das ganze sieht ja jetzt einem digitalen IIR-Filter ziemlich ähnlich - bis auf die hässlichen IF-Bedingungen. Beim Herumgooglen bin ich auf den Begriff "leaky integrator" gestoßen, also quasi ein Tiefpassfilter mit negativer Zeitkonstante?
Und hier hört mein Vortrag auf, und die Fragen fangen an:
- Kann man das gewünschte Verhalten mit zwei verschiedenen Zeitkonstanten für Ansprech- und Abklingzeit auf als echten IIR-Filter schreiben, als ohne die IF-Bedingungen?
- Die Konstanten (a1 bis b2) fallen für mich vom Himmel - wie könnte ich mir die sinnvoll plausibilisieren/herleiten/ausrechnen?
- Wenn ich den abgebildeten Code modifizieren wollte, um das DIN-Verhalten zu bekommen, wie komme ich dann zu den passenden Konstanten? Bräuchte es dann auch noch einen Filter zweiter Ordnung, oder würde der Blick zurück auf ein Sample ausreichen?
- Habt Ihr Hinweise auf die richtigen Begriffe, die hierfür in der DSP-Welt verwendet werden? Meine Suche im Netz ist bisher nicht sehr ergiebig.
- Gibt es vielleicht sowas wie eine "amtliche" Implementierung, so wie in den Normen oft die analoge Schaltung als Spezifikation eines Bewertungsfilters abgelegt ist?

Viele Grüße
Andreas
