Hallo an die Experten,

ich schau mir gerade an, wie mit Hilfe des Goertzel-Alg. z.B. ZVEI ausgewertet werden kann.
Dafür habe ich die Sourcen von "multimon-ng" und die des "monitord" gegenübergelegt und analysiert.

Die Sache mit der Gesamtenergie im Signal ist mir allerdings unklar, vielleicht kann mir hier einer der Experten weiterhelfen.

Im multimon-ng wird die Gesamtenergie durch Aufsummieren des Quadrats der einzelnen Samples gebildet.

energy[0] += sample * sample;

Später wird die Gesamtenergie aber mit einem Faktor angepasst.

tote *= (BLOCKNUM*BLOCKLEN*0.5)

Was hat dieser Faktor für eine Auswirkung? Woher kommt er?

Noch später wird die Gesamtenergie herangezogen, um die Energie des erkannten Tons zu bewerten:

if ((tote * 0.4) > totte[i]) return -1;

Also wenn die Energie des Tons < 40% der Gesamtenergie ist, dann ist der Ton ungültig.
Woher kommt dieser Wert? Sind 40% = PiMalDaumen oder physikalisch belegbar?

Bei meinen Versuchen hatte ich Situationen, bei denen die Energie des Tons GRÖßER als die Gesamtenergie war. Wie kommt sowas Zustande?

Und zu guter letzt:

Im monitord sind die obigen Zeilen gar nicht vorhanden:

Hier wird zwar eine Gesamtenergie gebildet, diese wird aber einfach als Summe aller einzelnen Ton-Energien berechnet.

Diese Gesamtenergie wird aber im weiteren Verlauf nicht mehr genutzt.

Mich interessiert nun z.B., ob das Einbeziehen der Gesamtenergie im Code des multimon die Auswertung zuverlässiger machen würde, so dass Fehlalarmierungen verhindert werden können.

Gibt es eigentlich noch weitere digitale Filter o.Ä., mit dem man das Eingangssignal noch vor dem Goertzel "säubern" könnte? Z.B. braucht man zur ZVEI-Auswertung ja nur Frequenzen < 3000 Hz. Ein Tiefpass wäre hier doch eine Möglichkeit? Oder ist das durch den Goertzel unnötig?

Danke und Gruß
Joachim