www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Noten aus Audiosignal ausschneiden


Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

Ich habe ein wave Datei die verschiedene Gitarrennoten enthält, jetzt 
will ich die Noten einzeln ausschneiden, so das ich ermitteln kann 
wielange die Note gespielt wurde und wielange die Pausen waren.

Ich habe die Wav Datei bereits mit 8Khz abgetastet. Jedoch sind meine 
Versuche die Noten zu filtern mehr schlecht als recht.

Ich habe gemwessen inwieweit die Pauseschwingungen auschlagen. Danach 
habe ich nach dem ersten Maximum gesucht im Signal und dann die 
darauffolgenden Werte mit den Pausenwerten verglichen, sobald die Werte 
eine gewisse Zeit nicht über die Pausegrenze kamen, hatte ich eine Note, 
Jedoch liefert der Algo nur fehlerhafte Ergebnisse.

Dazu müsste es doch ein Algorithmus geben?

Inwiefern hilft mir die Autokorrelationsfunktion?

Autor: Tom Ekman (tkon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Michi,
wenn du dein Signal Fourier transformiert erhälst du ein 
Frequenzspektrum. Über die Zeit betrachtet solltest relativ leicht die 
Dauer einzelner Noten, welche ja auch eine(mehrere) Frequenz(en) ist, 
erkennen können.

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja hmm ich will halt später anaysieren aus welchen bestandteilen die 
Note (akkord, Otave) besteh, dazu benutze ich die FFT, mache ich diese 
aber übers ganze Signal bekomm ich überallstörfrequenzen rein!

Autor: Tom Ekman (tkon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.. was ich vorhin meine nennt sich Spektrogramm.

Kannst du vielleicht ein kleines Beispiel geben? vielleicht ein Bild 
oder Ähnliches

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michi schrieb:
> ja hmm ich will halt später anaysieren aus welchen bestandteilen die
> Note (akkord, Otave) besteh, dazu benutze ich die FFT, mache ich diese
> aber übers ganze Signal bekomm ich überallstörfrequenzen rein!

Womöglich ist die Abtastrate mit 8 kHz zu niedrig? Wie sieht es mit der 
Fensterung aus?

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Signal ist aufgenommen mit 8kHz, deshalb taste ich es auch miot 
8Khz ab! Ich wills nicht über die FFT machen, da ich es da schwerer 
finde es rauszufiltern, weil ab welchem Ausschlag ist die Note 
angeschlagen und ab welchem Wert hört sie auf

Ich wills im zeitdiskreten Bereich machen, da man da schon deutlich 
sieht wann eine Note anfängt und wann aufhört.

Irgendwie kann ich keine Anhänge hochladen!

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Shannon läßt grüßen, 16 kHz sollten es schon sein.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bingo. Abtasttheorem beachten, dann sollte es klappen.

Um Anhänge hochzuladen, muss man glaube ich im Forum angemeldet sein?

Autor: Christoph Lauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bischen Werbung in eigener sache, schau mal hier, da siehst Du was 
gemeint ist: www.christoph-lauer.de

Ich kann dir aber jetzt schon sagen das es mit einfacher 
Short-Time-Fourier-Transfomation alleine nicht getan ist.

Autor: was_is_mit_du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab da mal so was mit hidden markov models (HMMs) gemacht.
Einfach mal googeln.

mfg

Autor: Peter K. (peter26)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi ...

Ich habe mich ein wenig gespielt und eine Signal mit irgendeinem 
Leadsynth generiert -> timesignal zeigt dir das Signal im Zeitbereich 
dabei sind die ersten 5 Peaks die interessanten (also die ich wirklich 
angeschlagen habe) ... die nächste Datei zeigt das Spektrogram 
(Frequenz/Zeitanalyse) wobei man recht schön die 5 Anschläge bzw. auch 
die dominante (Grundfrequenz) anhand der dunkelroten Färbung erkennt.

Um nun die Anschläge zu detektieren kann man z.b die spectral difference 
verwenden wobei eigentlich nur die Differenz (zeitlich) nachfolgender 
Frequenzbins gebildet wird und dann durch Aufsummieren wieder in den 
Zeitbereich gewechselt wird (Parsevals Theorem) -> 
http://www.elec.qmul.ac.uk/people/markp/2006/Davie...

Im file spectral difference ist dieses dargestellt jedoch immer mittels 
2 Peaks d.h einmal der Anschlag und einmal das Loslassen -> d.h du musst 
dann einfach nur einen geeigeneten Algorithmus anhängen der nach erstem 
Überschreiten einer Treshold eine flag setzt während dieser Zeit bis zum 
nächsten Überschreiten das Maximum in der STFT abliest -> also die 
Grundfrequenz und danach die flag wieder zurücksetzen ... in meinem Plot 
sind die Detektionen (cyan) gekennzeichnet.

lg Peter

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.