www.mikrocontroller.net

Forum: PC-Programmierung AutoBPM, genialer BPMcounter, wie funktioniert der?


Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

http://www.pyramidedata.dk/autobpm.html

Dort kann man sich den BPMcounter AutoBPM runterladen. Leider meldet 
sich der Autor auf keine eMail. Ich würde gerne wissen wie das dingchen 
funktioniert. Mein großer Traum ist es gerade das ding mal auf einen µC 
zu verbannen der mir die BPM zuverlässig zählt ;-)

Scheinbar wird das Audiosignal in sein frequenzspektrum aufgeteilt, was 
nun das Programm allerdings damit anfängt ist mir noch nicht ganz 
geläufig.

Das Faszinierende daran ist, dass es sogar komplizierte oder etwas 
verschleierte Rhythmen wie die von Salsa tadellos erkennt wo sogar ich 
gelegentlich Probleme hab.

mfg Paul H.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt einfach mal ins Blaue würde ich das wie folgt berechnen:
- Audiosignal stark downsamplen, so, dass nur noch die Frequenzen bis 
vielleicht 100 Hz oder 500 Hz übrigbleiben (44100 Hz  2  500 Hz ~= 44, 
also einfach über 64 Samples mitteln - π mal Daumen)
- Dann die Amplitudenfolge berechnen (Differenz benachbarter Samples 
quadrieren und wegschreiben)
- Die amplitudenfolge mit einer breiten FFT analysieren (je breiter das 
Fenster, desto besser die Ergebnisse - wie immer ;))
- Die Frequenz, bei der die FFT die größte Amplitude liefert ist die 
gesuchte  bpm-Rate (oder ein Vielfaches oder ganzteiliges, wenn's nicht 
so gut läuft)

Ist mit Sicherheit nicht das beste Verfahren, aber das sollte 
funktionieren und in 'nem Microcontroller locker Platz finden. ich habe 
das damals mit Resonatoren gemacht - Sau langsam, sah animiert aber cool 
aus.

Die Ergebnisse werden besser, wenn du bei der FFT eine geeignete 
Fensterfunktion verwendest - zur Not einfach ein Dreieck.

Hoffe, du kannst damit was anfangen - sonst frag einfach.

Letztendlich ist eine bpm-Analyse nichts weiter als eine 
Frequenzbestimmung der Amplituden im unteren Frequenzband.

Wenn ich gleich noch Zeit habe schau ich mir den Code mal an.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm ich glaube ich muss noch viel lernen. Tut mir leid wenn ich dämlich 
frag.

Trotz deiner Erklärung in Klammern habe ich leider nicht verstanden was 
du mit Amplitudenfolge meinst ;-)

Fast Fourier Transformation hab ich schon gehört. Damit meinst du eine 
Spektralanalyse der Amplitudenfolge? Was ist denn hier ein "Fenster"? 
:confused:


Ich denke bevor wir von der konkreten Umsetzung reden ist dein 
(fast)Schlusssatz am wichtigsten:

>Letztendlich ist eine bpm-Analyse nichts weiter als eine
>Frequenzbestimmung der Amplituden im unteren Frequenzband.

In wie fern haben die Amplituden hier frequenzen? Meinst du wie oft eine 
bestimmte Amplitude in einer bestimmten Zeit vorkommt?

Ich komm mir grad richtig unwissend und blöd vor :-D Aber danke für die 
Erklärungen!

mfg PoWl

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm arbeitet anhand der kurzen Beschreibung wie folgt:
Die nehmen auch einfach die Amplitudenfolgen, allerdings für alle drei 
Bänder. Halte ich persönlich für nicht ganz so sinnvoll - insbesondere 
die Mitten in denen sich Melodien und Stimmen befinden sind nicht so 
geeignet für  die Bestimmung. Die Höhen gehen noch wegen der Percussions 
- da die aber selten ohne Bassbegleitung laufen, kann man die meiner 
Meinung nach auch weglassen.

Danach einfach nach der Holzhammermethode:
In dem gegebenen Frequenzintervall werden alle Wellenlängen 
(Samplingfrequenz / Testfrequenz) ausprobiert. Vermutlich findet 
zwischenzeitig auch ein Downsampling statt, um auf eine moderate 
Datenmenge zu kommen.
Es wird ein Fenster mit der errechneten Wellenlänge gebildet. Dann wird 
aus dem gerade vergangenen Signal (Amplitudenfolge) ein Abschnitt mit 
n-facher Wellenlänge herausgeschnitten. Von diesem Abschnitt wird die 
Amplitudensumme (wieder quadrierte Differenzen) A gebildet. Jetzt wird 
der Abschnitt zyklisch per Addition in das Fenster übertragen (alles was 
rechts raushängt wird von links angefangen wieder fortgesetzt - 
einfacher modulo verwenden). Am Ende wird von dem Fenster wieder die 
Gesamtlautstärke B bestimmt. Das Verhältnis C = B / A ist bei derjenigen 
Fensterlänge am größten, bei der die Fensterlänge der BPM-Rate 
entspricht. Unpassende Fensterlängen sorgen dafür, dass sich das 
periodische Amplitudensignal teilweise aufhebt. Bei der passenden 
Fensterlänge gibt's kaum noch Auslöschungen.

Das Problem, dass man sich bei der bpm-Bestimmung um ein Vielfaches 
vertut umgehen die einfach, durch die Vorgabe des Messintervalls.

Da ist noch viel Platz für Optimierungen (und Erklärungen).

Eine Kompromisslösung ist zuerst grob die Fourier-Variante durchzuführen 
um den Intervall zu bestimmen und dann mit der anderen Methode das 
Finetuning durchzuführen.

Hoffe, das gibt dir schonmal einen groben Überblick.

Gruß und gute Nacht

Kai

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Thema - kann ja nicht wissen, wie viel du schon weißt ;)

Fenster ist einfach ein Array-Intervall. Schau mal in Wikipedia unter 
Fensterung oder so nach.

ich führ das hier bei Gelegenheit noch was näher aus... bin im Moment 
noch kurz angebunden.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

da gibts nen Haufen wissenschaftliche Papers dazu, such einfach mal nach 
Schriften von den Leuten auf dieser Seite:
http://www.music-ir.org/mirex2006/index.php/Audio_...

Autor: DG1RTO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aufwärm

auch nach langer Zeit findet das Thema wiederkehrend Anhänger und 
Interessenten... (siehe www.cool-dmx.de)

Von dort her bin ich befragt worden, wie das wohl ginge ;))

Hat sich mittlerweile jemand mit dieser Thematik befasst?

Gruß
DG1RTO

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich würde meine damaligen Ausführungen eigentlich nur nochmal 
wiederholen ...

Gruß,
Kai

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.