Forum: PC-Programmierung Rufe in einer Tonaufnahme finden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Uhu U. (uhu)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

: Bearbeitet durch User
von Peter (Gast)


Bewertung
0 lesenswert
nicht 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)

von oszi40 (Gast)


Bewertung
0 lesenswert
nicht 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.

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht 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?

von Uhu U. (uhu)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

: Bearbeitet durch User
von Klaus2 (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Sind es Uhu-Rufe?

Klaus.

von Uhu U. (uhu)


Bewertung
0 lesenswert
nicht lesenswert
Nein, das ist ein Wachtelkönig.

von Uhu U. (uhu)


Bewertung
0 lesenswert
nicht lesenswert
Mit kürzerer FFT gleichen sich die Spektren der Rufe immer mehr dem der 
Pausen an - kein Wunder, denn im Hintergrund rufen weitere.

von Vlad T. (vlad_tepesch)


Bewertung
0 lesenswert
nicht lesenswert
hatten wir das nicht schon mal kopfkratz

von Possetitjel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:

> hatten wir das nicht schon mal

Ja, hatten wir.

von Uhu U. (uhu)


Bewertung
0 lesenswert
nicht 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.

von F. F. (foldi)


Bewertung
0 lesenswert
nicht 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.

von Uhu U. (uhu)


Bewertung
0 lesenswert
nicht lesenswert
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?

von F. F. (foldi)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Abdul K. (ehydra) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

von Paul B. (paul_baumann)


Bewertung
2 lesenswert
nicht lesenswert
Klaus2 schrieb:
> Sind es Uhu-Rufe?

Uhu Uhuhu schrieb:
> Nein, das ist ein Wachtelkönig.

Na, wenigstens kein Unkenrufe....
MfG Paul

von mbmbmm (Gast)


Bewertung
0 lesenswert
nicht 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.

von Uhu U. (uhu)


Bewertung
0 lesenswert
nicht lesenswert
mbmbmm schrieb:
> gibt es irgendwelche hardware beschränkungen?

Das ist kein kommerzielles Projekt und soll auf einem PC halbwegs 
vernünftig laufen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.