Tonerkennung per Software möglich?



  • .filmor schrieb:

    ...ich wollte nämlich selber mal sowas implementieren, bin aber nicht so recht dazu gekommen. Aktuell benutze ich leider einfach nur das Maximum über das Spektrum, was natürlich mitnichten gut funktioniert.

    Ahja, gib mir deine Mail und ich schick dir den code...

    @bergvagabund, @.filmor
    Also jetzt ist schon ein paar mal F0 Bestimmung gefallen: Eigentlich geht diese recht unproblematisch aus dem Cepstrum. Schwierig ists bei menschlicher Stimme nur dass man staendig zwischen stimmhaften (Vokale, mit F0) und stimmlosen (Konsonanten, ohne F0) wechselt, was die Extraktion eben fehlerhaft macht. Sie ist weiterhin ungenau aufgrund Stimm= und Spracheigenschaften: Rauhigkeit (und aehnliches) und Prosodie. Nimmt man ein Instrument, gibt es natuerlich Vibrato, Glissandi und absichtliche verzerrung in die Zwischentoene (von Verzerrern bei Egitarren ganz zu schweigen). Aber gegeben ein "normales" szenario, mit einigermassen gut gestimmter Gitarre und "normalen" Griffen, sollte so eine erkennung schon moeglich sein. Ich sehe da eher noch schwierigkeiten dann auf die Notenlaengen zu kommen 🙂



  • Korbinian schrieb:

    Ahja, gib mir deine Mail und ich schick dir den code...

    Nickname-ohne-.@gmail.com
    Vielen Dank.

    Ich werd' mich wohl auch mal mit den dahinterliegenden mathematischen Gegebenheiten näher auseinandersetzen müssen (Cepstrum hab ich noch nie gehört), bisher kann ich nur bei der Fouriertransformation behaupten, dass ich da in etwa weiß was da weshalb passiert 😉



  • ahja, cepstrum ist nur nochmal FFT (oder dct oder sonstwas) auf das spektrum. manche nennen es auch modellspektrum. und du hast post.

    @bergvagabund: hast du da drueber eine arbeit oder sowas geschrieben? waere interessant zu lesen 🙂 vielleicht sollten wir mal die kraefte hier vereinen und das ganze nochmal versuchen zu stemmen...



  • Korbinian schrieb:

    ahja, cepstrum ist nur nochmal FFT (oder dct oder sonstwas) auf das spektrum. manche nennen es auch modellspektrum. und du hast post.

    nicht auf das log-Spektrum?



  • Korbinian schrieb:

    @bergvagabund: hast du da drueber eine arbeit oder sowas geschrieben? waere interessant zu lesen 🙂 vielleicht sollten wir mal die kraefte hier vereinen und das ganze nochmal versuchen zu stemmen...

    Nein nein, ich habe keine Arbeit darüber geschrieben. Audio ist einfach mein Hobby. Habe jahrelang Aufnahmen im Tonstudio gemacht und selbst in mehreren Bands gespielt. Deshalb sind alle meine bisherigen Projekte im Audiobereich angesiedelt. Momentan ists eben ein Stimmgerät wo es hauptsächlich im die f0 Bestimmung geht.

    Jester schrieb:

    nicht auf das log-Spektrum?

    Soviel ich weiss transformiert man das Ergebnis der Autokorrelation in den Spektralbereich, dann erhält man das Autoleistungsspektrum. Anschließend logarithmiert man das Autoleitungsspektrum und wendet schließlich auf das Ergebnis die inverse Fouriertransformation an. Das Cepstrum ist sozusagen eine Information über das Signal im Zeitbereich.



  • Kommt ganz drauf an welche Art Features man haben will. Generell ist Cepstrum einfach nur Spektrum vom Spektrum. Fuer die meisten akustischen Features (Spracherkennung, Tonerkennung) logarithmiert man um die logarithmische Wahrnehmung des menschlichen Ohrs zu simulieren. Nachdem die (i)FFT eine Transformation in Normalbasis ist, kann man auch ne andere Transformation nehmen, viele nehmen DCT oder Hartley. Autokorrelation ist glaub ich nicht mehr so aktuell was Features betrifft, war eher populaer als FFT noch langsam war und noch nicht so weitverbreitet.



  • Hmm, aber wenn man f(x) zweimal kontinuierlich fouriertransformiert bekommt man doch einfach f(-x) raus, irgendwas halbwegs analoges sollte sich ja dann auch bei der DFT ergeben.



  • Jo, sehe ich auch so.

    Wikipedia meint auch, man sollte logarithmieren, das ist ja auch irgendwo logisch.

    Durch das Logarithmieren werden zum Beispiel Amplitudenunterschiede zu einer additiven Konstante, die dann durch die erneute Fourier-Transformation nur noch bei den tiefen Frequenzen mitspielt. Lautstärke-Unterschiede lassen sich also ganz prima raufiltern mit sowas.



  • Jester schrieb:

    Jo, sehe ich auch so.

    Wikipedia meint auch, man sollte logarithmieren, das ist ja auch irgendwo logisch.

    Durch das Logarithmieren werden zum Beispiel Amplitudenunterschiede zu einer additiven Konstante, die dann durch die erneute Fourier-Transformation nur noch bei den tiefen Frequenzen mitspielt. Lautstärke-Unterschiede lassen sich also ganz prima raufiltern mit sowas.

    Wenn es einem nur um F0 geht, ist hier eine Gleitfenster Median-Normalisierung besser geeignet, da hierdurch Amplitudenunterschiede in den einzelnen Harmonischen nahezu equalisiert werden.



  • Tachyon schrieb:

    Jester schrieb:

    Jo, sehe ich auch so.

    Wikipedia meint auch, man sollte logarithmieren, das ist ja auch irgendwo logisch.

    Durch das Logarithmieren werden zum Beispiel Amplitudenunterschiede zu einer additiven Konstante, die dann durch die erneute Fourier-Transformation nur noch bei den tiefen Frequenzen mitspielt. Lautstärke-Unterschiede lassen sich also ganz prima raufiltern mit sowas.

    Wenn es einem nur um F0 geht, ist hier eine Gleitfenster Median-Normalisierung besser geeignet, da hierdurch Amplitudenunterschiede in den einzelnen Harmonischen nahezu equalisiert werden.

    Mir ging es hier rein um die Definition des Cepstrums. Da dürfte die echte Definition wohl schon am geeignetsten sein. 😉


Anmelden zum Antworten