{"id":6543,"date":"2015-08-18T08:21:50","date_gmt":"2015-08-18T06:21:50","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=6543"},"modified":"2023-05-14T08:23:44","modified_gmt":"2023-05-14T06:23:44","slug":"mittlere-mathematik-audioanalyse-linktipp-zu-fourier-transformation","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2015\/08\/mittlere-mathematik-audioanalyse-linktipp-zu-fourier-transformation.htm","title":{"rendered":"Mittlere Mathematik: Audioanalyse &#038; Linktipp zu Fourier-Transformation"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2015\/08\/mittlere-mathematik-audioanalyse-linktipp-zu-fourier-transformation.htm#comments'>3 Kommentare.<\/a>)<\/small> <\/div>\n<p class=\"wp-block-paragraph\">Wie es angefangen hat, wei\u00df ich nicht mehr. Irgendwann in der Mitte wollte ich jedenfalls wissen, wie das mit dem automatischen Erkennen von Musikst\u00fccken geht &#8211; man spielt zehn oder zwanzig Sekunden eines Liedes vor, und das Handy meldet sich danach und sagt einem, von wem das Lied ist und wie es hei\u00dft.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Googeln stie\u00df ich <a href=\"http:\/\/www.royvanrijn.com\/blog\/2010\/06\/creating-shazam-in-java\/\">auf diese phantastische Seite dar\u00fcber,<\/a> wie einer genau das in Java nachbaute. Einfach, nachvollziehbar, \u00fcbersichtlich. Allerdings ist der Code nicht vollst\u00e4ndig, das h\u00e4ngt auch mit Drohungen des Marktf\u00fchrers zusammen, das gegen Patente versto\u00dfen werde. Nicht glaubw\u00fcrdig, aber ich verstehe sehr gut, dass man da als kleiner Blogger vorsichtig ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trotzdem habe ich den Code nach und nach vervollst\u00e4ndigt und nachprogrammiert und dabei viel gelernt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Schritt 1: Mikrofon anschlie\u00dfen und mit Java Ton vom Mikro aufnehmen<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Funktioniert. Wie so eine Aufnahme aussieht, das kennt man aus dem Fernsehen:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"147\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1.png\" alt=\"audioanalyse1\" class=\"wp-image-6544\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1.png 738w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1-150x30.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1-550x110.png 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1-660x131.png 660w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings, wenn man mit der Lupe richtig nahe herangeht, sieht man, dass die Wellen, die man zu sehen meint, gar keine sind: Stattdessen sind einfach nur eine Menge von Punkten gespeichert, die in gleichm\u00e4\u00dfigem Abstand einer nach dem anderen eingezeichnet werden.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"146\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2.png\" alt=\"audioanalyse2\" class=\"wp-image-6545\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2.png 750w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-150x29.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-550x107.png 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-660x128.png 660w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Das passiert n\u00e4mlich beim Digitalisieren von Schallwellen. Es wird n\u00e4mlich gar keine Schallwelle gespeichert, sondern in regelm\u00e4\u00dfigen Abst\u00e4nden gemessen, was gerade an Schall hereinkommt. Regelm\u00e4\u00dfige Abst\u00e4nde hei\u00dft: h\u00e4ufig misst man 44100 mal pro Sekunde. (Damit erwischt man Frequenzen von bis zu 22050 Hz.) Wie viel verschiedene Amplituden (also Lautst\u00e4rken, die vertikale Position des eingetragenen Messpunkts) m\u00f6glich sind, h\u00e4ngt von einem weiteren Wert ab. Reserviert man pro gespeichertem Punkt 1 Byte (8 bit), dann kann man zwischen 256 verschiedenen horizontalen Positionen w\u00e4hlen. Bei 2 Byte (16 bit) sind es schon 65536. Und wenn man richtig genau sein woll, nimmt man 4 Byte (32 bit) pro Punkt. Der Einfachkeit halber habe ich mit 8 bit pro Punkt gearbeitet, was sicher keine high-fidelity Aufnahme erm\u00f6glicht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gespeichert wird die Aufnahme also in einer langen Reihe von Bytes. Wenn man die Bytes als ganze Zahlen interpretiert, sieht ein Ausschnitt etwa so aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><small>-50, -45, -37, -31, -26, -24, -25, -26, -26, -28, -26, -25, -22, -18, -11, -4, 5, 13, 20, 24, 29, 31, 33, 34, 32, 29, 23, 16, 7, 1, -4, -6, -8, -7, -8, -6, -5, -3, 1, 7, 12, 16, 16, 9, 0, -10, -20, -22, -19, -12, -1, 9, 16, 21, 22, 22, 21, 21, 19, 20, 19, 18, 18, 19, 20, 22, 22, 23, 20, 18, 14, 10, 3, -4, -11, -21, -31, -39, -49, -54, -59, -59, -59, -57, -51, -44, -32, -20, -5, 7, 18, 23, 22, 20, 15, 13, 13, 16, 24, 30, 36, 39, 41, 42, 43, 44, 45, 46, 45, 43, 39, 35, 29, 24, 17, 12, 4, -1, -7, -13, -19, -25, -32, -37, -43, -50, -55, -61, -64, -69, -71, -75, -74, -74, -69, -63, -55, -47, -42, -42, -43, -48, -52, -54, -52, -45, -37, -24, -14, -3, 5, 15, 21, 30, 35, 38, 40, 38, 33, 27, 19, 13, 4, -3, -11, -16, -22, -25, -30, -32, -35, -36, -38, -39, -40, -42, -46, -49, -55, -59, -63, -64, -63, -56, -48, -37, -26, -20, -14, -13, -12, -10, -8, -1, 5, 12, 17, 19, 21, 20, 22, 22, 24, 23, 23, 20, 20, 18, 18, 19, 19, 20, 19, 18, 16, 15, 12, 12, 10, 12, 15, 19, 24, 31, 36, 44, 48, 55, 60, 68, 75, 84, 91, 99, 101, 99, 94, 84, 76, 66, 61, 56, 50, 44, 34, 24, 11, 1, -10, -16, -24, -28, -32, -35, -36, -33, -30, -26, -22, -20, -17, -17, -14, -12, -9, -8, -5, -3, 0, 4, 11, 18, 28, 36, 42, 46, 49, 52, 57, 61, 66, 67, 68, 63, 58, 50, 46, 43, 43, 47, 49, 50, 46, 42, 36, 28, 23, 15, 7, -3, -16, -25, -34, -40, -41, -43, -44, -48, -55, -60, -65, -71, -74, -79, -84, -89, -94, -98<\/small><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Das sind 318 Punkte. Bei 44100 Punkten pro Sekunde macht das gut 0,007 Sekunden, bei 32000 Punkten pro Sekunde sind das knap 0,01 Sekunden.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn ich diese Zahlen in mein Tabellenkalkulationsprogramm eintrage und mir als Diagramm anzeigen lasse, sieht man, dass das tats\u00e4chlich irgendwie den im Audioprogramm dargestellten Werten entspricht:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"667\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse3.png\" alt=\"audioanalyse3\" class=\"wp-image-6546\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse3.png 630w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse3-142x150.png 142w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse3-519x550.png 519w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(Tats\u00e4chlich exportiert mein Audioprogramm das 8-bit-Wav-Format nur als &#8222;unsigned&#8220;, das hei\u00dft ohne Vorzeichen, also zu lesen als Zahlen von 0 bis 255. F\u00fcr Java musste ich das umrechnen, da Java grunds\u00e4tzlich mit &#8222;signed&#8220; Bytes arbeitet, die als Zahlen von -128 bis 127 zu lesen sind.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Schritt 2: Umwandeln der gemessenen Zahlenwerte in Frequenzen<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Man kann die Audioaufnahme beschreiben &#8211; und speichern &#8211; als einen Haufen Messpunkte, kontinuierlich aufeinanderfolgend in regelm\u00e4\u00dfigen Zeitabst\u00e4nden, so wie oben. F\u00fcr manche Dinge ist diese Betrachtungsweise aber nicht so praktisch. Die folgende Aufnahme k\u00f6nnte man &#8211; statt auf Messpunkte zur\u00fcckzugreifen &#8211; eleganter beschreiben als eine regelm\u00e4\u00dfige Schwingung.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" height=\"148\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse4.png\" alt=\"audioanalyse4\" class=\"wp-image-6547\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse4.png 564w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse4-150x39.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse4-550x144.png 550w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Und die folgende Aneinanderreihung von Messpunkten kann man pr\u00e4gnant unter einem anderen Gesichtspunkt beschreiben als: eine regelm\u00e4\u00dfige Schwingung und gleichzeitig eine von doppelter so gro\u00dfer Frequenz. (Ein Ton und die Oktave dar\u00fcber.)<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"563\" height=\"148\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse5.png\" alt=\"audioanalyse5\" class=\"wp-image-6549\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse5.png 563w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse5-150x39.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse5-550x145.png 550w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tats\u00e4chlich kann man jede beliebige Sammlung von Punkten als eine \u00dcberlagerung von Wellen darstellen. Selbst die komplizierte Sammlung von oben:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"146\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2.png\" alt=\"audioanalyse2\" class=\"wp-image-6545\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2.png 750w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-150x29.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-550x107.png 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse2-660x128.png 660w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tats\u00e4chlich lassen sich diese 318 Messpunkte auch darstellen als eine \u00dcberlagerung von (h\u00f6chstens) 318 verschiedenen Schwingungen. Die Umwandlung von n Messpunkten in n Schwingungen, mit relativen Frequenzen von 1 bis n hei\u00dft Fourier-Transformation, und davon h\u00f6rt man gelegentlich Mathelehrer Anekdoten aus dem Studium erz\u00e4hlen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Und weil ich wissen wollte, was es mit dieser Fourier-Transformation auf sich hat, bin ich auf diese Seite gesto\u00dfen: <a href=\"http:\/\/betterexplained.com\/articles\/an-interactive-guide-to-the-fourier-transform\/\">An Interactive Guide To The Fourier Transform.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Genial erkl\u00e4rt, jedenfalls f\u00fcr einen Laien wie mich. Hilfreich sind auch zwei hervorragende Werkzeuge zum Verst\u00e4ndnis, eines erst im Anhang. Bei dem ersten kann man einfach eine Reihe von Messpunkten eingeben, egal welche, und das Programm spuckt die entsprechenden Schwingungen aus. (Und umgekehrt auch.) Die drei Punkte 1, 0, 2 trifft man mit der Kombinationen aus folgenden Wellen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><iframe loading=\"lazy\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/fourier\/fourier.htm\" width=\"600\" height=\"300\"> <\/iframe><br><small><a href=\"https:\/\/gist.github.com\/kazad\/8bb682da198db597558c\">Quellcode, <\/a><a href=\"http:\/\/treeblurb.com\/dev_math\/sin_canv00.html\">basierend hierauf<\/a>. <a href=\"http:\/\/opensource.org\/licenses\/MIT\">MIT License<\/a>. <a href=\"http:\/\/betterexplained.com\/articles\/an-interactive-guide-to-the-fourier-transform\/\">Blogeintrag dazu.<\/a><\/small><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um wirklich sch\u00f6n damit zu spielen, muss man den verlinkten Beitrag lesen.<br><a href=\"http:\/\/1ucasvb.tumblr.com\/post\/42650491777\/fouriertoy-inspired-by-matt-hendersons-post-i\">Beim anderen Programm sieht man gut,<\/a> was Kreise und Schwingungen und \u00fcberlagerte Schwingungen miteinander zu tun haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au\u00dferdem habe ich mir auf der Seite gleich noch <a href=\"http:\/\/betterexplained.com\/articles\/intuitive-understanding-of-sine-waves\/\">den Sinus<\/a> erkl\u00e4ren lassen und die <a href=\"http:\/\/betterexplained.com\/articles\/an-intuitive-guide-to-exponential-functions-e\/\">Eulersche Zahl<\/a>. Erhellend!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Wie es bei dem urspr\u00fcnglichen Projekt weiter geht<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die gespeicherten Bytes (die Messpunkte) werden umgewandelt in Schwingungen. Das geht so: Man nimmt einen Packen Bytes, zum Beispiel 2048. Diesen Packen wandelt man um in 2048 Schwingungen, eine mit Frequenz 1, eine mit Frequenz 2, eine mit Frequenz 3 und so weiter. Zu jeder Frequenz geh\u00f6rt eine Amplitude (wie laut, also die vertikale Komponente) und die Phase. Wenn man den verlinkten Blogeintrag gelesen hat, ist das kein Problem mit der Phase &#8211; das ist die Verschiebung der Welle nach rechts oder links, was wichtig daf\u00fcr ist, welche Wellen sich mit welchen anderen aufheben oder hochschaukeln. Jede Schwingung wird gespeichert als komplexe Zahl (<a href=\"http:\/\/betterexplained.com\/articles\/a-visual-intuitive-guide-to-imaginary-numbers\/\">auch die kann man sich sch\u00f6n erkl\u00e4ren lassen<\/a>). Wo also vorher 2048 Bytes da waren, sind jetzt 2048 komplexe Zahlen, jede f\u00fcr eine eigene Frequenz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auf Basis dieser 2048 Frequenzen, jeweils mit mehr oder weniger gro\u00dfer Amplitude, wird dann quasi ein Fingerabdruck der Aufnahme gemacht, der dann sp\u00e4ter mit einer gespeicherten Kartei solcher Fingerabdr\u00fccke verglichen wird. Wie das geht: anderes Thema.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(3 Kommentare.) Wie es angefangen hat, wei\u00df ich nicht mehr. Irgendwann in der Mitte wollte ich jedenfalls wissen, wie das mit dem automatischen Erkennen von Musikst\u00fccken geht &#8211; man spielt zehn oder zwanzig Sekunden eines Liedes vor, und das Handy meldet sich danach und sagt einem, von wem das Lied ist und wie es hei\u00dft. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":6544,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227,233],"class_list":["post-6543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-programmierprojekte"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/audioanalyse1.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/6543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=6543"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/6543\/revisions"}],"predecessor-version":[{"id":56414,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/6543\/revisions\/56414"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/6544"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=6543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=6543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=6543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}