Forum: Digitale Signalverarbeitung / DSP / Machine Learning Noten aus Audiosignal ausschneiden


von Michi (Gast)


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?

von Tom E. (tkon)


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.

von Michi (Gast)


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!

von Tom E. (tkon)


Lesenswert?

.. was ich vorhin meine nennt sich Spektrogramm.

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

von Mark B. (markbrandis)


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?

von Michi (Gast)


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!

von Chris (Gast)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

Bingo. Abtasttheorem beachten, dann sollte es klappen.

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

von Christoph Lauer (Gast)


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.

von was_is_mit_du (Gast)


Lesenswert?

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

mfg

von Peter K. (peter26)


Angehängte Dateien:

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/DaviesPlumbley06-eusipco.pdf

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

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
Noch kein Account? Hier anmelden.