Ich habe Tonaufnahmen, in denen Rufe vorkommen, die sich mehr oder weniger stark vom Hintergrund abheben und deren Amplitude außerdem noch durch die Aufnahmebedingungen sehr unterschiedlich sein kann. Die Rufe gehen durch einen zweistufigen (digitalen) Tiefpass und anschließend wird im Filter-Output das Maximum jedes Rufelementes gesucht, um die Länge der einzelnen Elemente zu messen. Im zweiten Anhang sind im Filter-Output die Maxima durche einen Puls markiert. Die 4 Peaks außerhalb den beiden Rufen kommen von Hintergrundgeräuschen, die den Schwellwert überschreiten. Bisher habe ich versucht, die Rufe mit Amplitudenschwellwerten im Filtersignal zu erkennen - das ist aber keine sehr tolle Lösung, weil Aufnahmeparameter in die Erkennung eingehen. Mir wäre am liebsten, wenn ich die Rufe irgendwie im Frequenzbereich erkennen könnte - entweder vor oder nach dem Filter. Kann man das so hinbekommen, dass die Eingangsamplitude nicht mehr darüber entscheidet, ob ein Maximum im Ruf erkannt wird, aber Störungen aus dem Hintergrund kein Fehlsignal erzeugen?
:
Bearbeitet durch User
Sagt dir FFT oder DFT was? Vielleicht ist es sinnvoll das Signal nicht nur im Zeitbereich anzuschauen (was du bisher machst). Schau dir doch das Signal mal im Frequenzbereich (aka Spektrum) an. (z.B Wasserfalldigaramm plotten lassen)
Das untere Bild sieht nach Sprachkompression aus. Evtl. kann man die zyklischen charakteristischen Merkmale auswerten. Sprache und Musik sollte im Oszillogramm leicht zu unterscheiden sein? Sprache ist selten im 3/4-Takt.
Ich würde es mit einer Spektralanalyse versuchen. Entweder positiv, indem Du "reine" Rufe analysierst und anschließend suchst oder Negativ, indem Du das "normale" Signal betrachtest und nach charakteristischen Änderungen suchst. Richtig gut geht das aber nur mit richtig viel Rechenpower oder im Film. Das Problem ist nämlich: Was ist normal, oder wie charakterisierst Du einen Ruf?
oszi40 schrieb: > Das untere Bild sieht nach Sprachkompression aus. Nein, mit Sprachkompression hat das nichts zu tun. Das Signal entsteht durch zweifache Filterung über einen Tiefpass aus dem gleichgerichteten Eingabesignal. Sebastian S. schrieb: > Richtig gut geht das aber nur mit richtig viel Rechenpower oder im Film. Den Verdacht habe ich auch... Deswegen scheidet FFT eigentlich fast aus. > Das Problem ist nämlich: Was ist normal, oder wie charakterisierst Du > einen Ruf? Der Ruf ist ziemlich simpel und uniform und im Oszillogramm springt er geradezu ins Auge - aber wie sag ichs meinem Computer, außer zu Fuß? Einfach noch einen viel tieffrequenteren Tiefpass über den Filteroutput lassen, evtl. mit irgend einer nichtlinearen Verstärkung vorher, die für einen steilen Anstieg sorgt?
:
Bearbeitet durch User
Mit kürzerer FFT gleichen sich die Spektren der Rufe immer mehr dem der Pausen an - kein Wunder, denn im Hintergrund rufen weitere.
Vlad Tepesch schrieb: > hatten wir das nicht schon mal *kopfkratz* Nicht ganz. Damals ging es nur um die Elementerkennung - die läuft jetzt ganz gut, wenn ich die Pausen zwischen den Rufen manuell ausnulle. Davon will ich weg kommen und wenn möglich irgendwas bauen, was unter dem Strich die Pausen ignoriert. Letztlich bin ich nur an den Zeiten zwischen den Maxima der einzelnen Rufelemente interessiert und die Pausen sollen keinen Dreck beitragen.
Meines Erachtens musst du den ganzen Ruf betrachten und zwar in der Frequenzfolge und da spielt dann die Amplitude gar keine Rolle mehr, sondern nur noch, ob die Frequenz in einem gewissen Muster und Zeitrahmen abläuft. Dazu musst du dann eigentlich nur nach diesem Muster suchen und wenn der Vergleich eine Übereinstimmung gibt, dann hast du deinen Ruf identifiziert.
F. Fo schrieb: > Dazu musst du dann eigentlich nur nach diesem Muster > suchen und wenn der Vergleich eine Übereinstimmung gibt, dann hast du > deinen Ruf identifiziert. Du meinst per Kreuzkorrelation?
Eher die Autokorrelation. Vor allem, je nachdem wie genau man das hin bekommt, könntest du sogar den einen vom anderen Wachtelkönig unterscheiden. Du musst halt nur ein gutes Vergleichssignal haben. Aber ich bin da wirklich noch nicht fit und beschäftige mich erst seit einigen Monaten damit und das eher theoretisch.
:
Bearbeitet durch User
Der Vogel ruft doch sicherlich immer eine Sequenz und nicht einzelne Rufe. Da würde ich das Problem ähnlich sehen dem wie man die abundzu Pulse von Avalanche Photodioden bewertet. Also ein Zähler oder retriggerbarer Monoflop in Software. Einzelne Pulse in einem bestimmten Zeitrahmen werden so unterdrückt. Ansonsten läuft es natürlich auf eine Mustererkennung hinaus.
Klaus2 schrieb: > Sind es Uhu-Rufe? Uhu Uhuhu schrieb: > Nein, das ist ein Wachtelkönig. Na, wenigstens kein Unkenrufe.... MfG Paul
gibt es irgendwelche hardware beschränkungen? vielleicht würde ja auch eine Support Vector Machine funktionieren wenn du die Amplitudenspektren in einen Vektor schiebst und die SVM ein bisschen lernen lässt. Vielleicht muss die Auflösung der FFT ja dann auch garnicht mehr so hoch sein.
mbmbmm schrieb: > gibt es irgendwelche hardware beschränkungen? Das ist kein kommerzielles Projekt und soll auf einem PC halbwegs vernünftig laufen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.