Wie funktioniert Silence Detection?



  • op: http://www.ee.columbia.edu/~eleft/mmsp/papers/mmsj97-sj.pdf
    (ist zwar speziell für kontinuierliche signale, sprache in telefonsystemen und so, aber vielleicht gibts dir denkanstösse).
    🙂



  • Erst einmal danke für die ausführlichen Erklärungen.

    hustbaer schrieb:

    Und schliesslich: dass du mit dem Mittelwert auf die Nauze gefallen bist, liegt vermutlich daran, dass du irgendwas anderes falsch gemacht hast 🙂

    Ich habe einfach 0,2 Sekunden lange Abschnitte genommen, den Betrag aller Samples addiert und daraus den Durchschnitt gebildet. Dass das nicht funktioniert habe ich ja bereits gemerkt, nur was meinst du mit "etwas anderes falsch gemacht"?

    Danke



  • hustbaer schrieb:

    Oder du kannst gezielt den DC-Offset eines Teil-Stücks ausrechnen, und den von den Werte abziehen, bevor du den RMS-Wert berechnest.

    Gibt es eine Mindestlänge des Teilstücks oder ist das beliebig? Sind eher kleinere oder eher längere Abschnitte zu bevorzugen?

    Danke



  • farw schrieb:

    Gibt es eine Mindestlänge des Teilstücks oder ist das beliebig? Sind eher kleinere oder eher längere Abschnitte zu bevorzugen?

    möglichst viele. du sollst ja den arithmetischen mittelwert berechnen, wie husti schon erzählt hat. stell dir z.b. 'ne ganze sinusschwingung vor, die bei 0 beginnt und in 1000 samples zerhackt ist. nimmste (sample[1]+sample[2]+...+sample[1000])/1000, dann kommt 0 raus. schiebst du die welle nach oben, indem zu z.b. auf jeden samplewert 199 addierst, dann spuckt dir der mittelwert diese 199 aus. nimmst du dagegen nur die ersten 250 werte, dann wird das ergenis sehr ungenau d.h. unbrauchbar. bei 20099 werten aber (also mehrere ganze perioden + irgendeine angefangene) ist das ergebnis trotzdem noch ziemlich gut.
    btw, für echtzeitverarbeitung taugt sowas aber nix. wenn du z.b. einfach nur einen offset von der nullinie entfernen willst, dannn nimm einen einfachen hochpassfilter wie: out(n) = in(n)-in(n-1)+c*out(n-1), wobei out==output sample, in==input sample, c ist ein wert zwischen 0.9 und 0.999 und bestimmt die grenzfrequenz (ausprobieren, was am besten passt)
    🙂



  • Gute Erklärung, vielen Dank dafür.

    ;fricky schrieb:

    btw, für echtzeitverarbeitung taugt sowas aber nix.

    Zum Glück habe ich es auch nicht mit Echtzeitverarbeitung zu tun. 🙂


Anmelden zum Antworten