Rufe in einer Tonaufnahme finden

OP #4067427
Lesenswert?
• ▲
▼
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?
Angehängte Dateien:
Gast #4067446
Lesenswert?
• ▲
▼
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)
Gast #4067466
Lesenswert?
• ▲
▼
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.
#4067471
Lesenswert?
• ▲
▼
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?
OP #4067493
Lesenswert?
• ▲
▼
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?
Angehängte Dateien:
OP #4067546
Lesenswert?
• ▲
▼
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.
#4067550
Lesenswert?
• ▲
▼
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.
#4067559
Lesenswert?
• ▲
▼
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.
Persönliche Seite #4068019
Lesenswert?
• ▲
▼
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.
Gast #4068542
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.