Audio FFT Darstellung

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von skyscater.

    Audio FFT Darstellung

    Hallo.
    Hab vor mir einen LED Audio Spektrum Analysator zu bauen.
    Soweit läuft auch alles, zur Zeit schick ich das Audiosignal durch einen 10kHz Tiefpass (2ter Ordnung) les es mit einem Atmega8 ein berechne die FFT (128 Punkt) und schicks per UART an den PC. (wenn alles geht wir der PC durch einen 2ten uC ausgetauscht, der die Ansteuerung der LED Matrix 32*16 übernimmt)

    Nun ist mein Problem, dass die ersten paar Frequenzen immer viel viel höher sind als die letzteren. Sprich die letzteren erreichen nie die Höhe der ersten paar. Hab mir gestern das Winamp Plugin Classic Spectrum Analyzer runter geladen und eine Einstellung namens equalize (=ausgleichen) gefunden. Wenn ich die deaktivier seh ich das selbe Problem das ich derzeit hab. Ich hab aber keine Ahnung wie ich das softwaremäßig ausgleichen könnte.
    Hat jemand eine Idee was ich falsch mache, bzw. wie ich das richten kann?

    mfg.skyscater
    Bilder
    • fft-screen.png

      245,84 kB, 961×599, 189 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „skyscater“ ()

    Machen gerade so ziemlich genau das selbe doch wir haben nur noch arbeit beim LED-Löten.
    Wir verwenden ebenfalls einen Atmega8 jedoch machen wir das wesentlich einfacher. Wir spielen das Lied in einem eigens entwickelten Programm ab und jagen dann den Stream durch den FFTAnalysator. Wenn dieser einen Block fertig gerechnet hat hauen wir das auf die Leitung und das geht zum Atmega8. Dieser Interpretiert nur noch die Daten und schickt diese weiter an die LED's

    Falls dir das zeug selbst zu coden zu viel arbeit ist (geht eigentlich wenn man weiß wie) kannst du auch die Bass.dll verwenden welche auch die FFT-Rohdaten (ohne die schicken Bitmaps) liefern kann.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Na es soll am schluss autonom ohne Pc laufen. Ein Atmega rechnet die FFT und ein anderer übernimmt die ansteuerung. Der Pc is derzeit nur zu Analyse.
    Hast du das selbe Problem mit den großen Unterschieden ?
    Könntest villeicht mal n Screen posten wenns schon so weit seits?
    Wenn du die großen Unterschiede den hohen Berg meinst der sich meistens am Anfang befindet. Da kannst du nix machen.
    Du kannst mich aber gerne mal in Skype anschreiben dann schauen wir mal wie das bei meinem FFT-Algo aussieht.

    EDIT:
    so sind jetzt 2 Screens oben. Aber du siehst schon bei nem normalen lied liegen halt frequenzanteile eher in ersten paar frequenzbändern.
    Bilder
    • normales lied.jpg

      250,56 kB, 1.342×696, 144 mal angesehen
    • sinus_100Hz.jpg

      34,91 kB, 908×370, 153 mal angesehen


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    er könnte sich eine Funktion modellieren, die den Berg ungefähr ausgleicht und alle Balken mit den Funktionswerten an der jeweiligen Stelle multiplizieren. Geeignet wären Wurzelfunktionen oder zB f(x) = (1/2) * ln(x) + 1

    probier einfach ein bisschen herum.
    Naja mit Formeln gehts glaub ich nicht, da die Verteilung ja nichgt immer gleich ist.
    Werd mir da was dynamisches überlegen müssen, dass er villeicht pro Balken das maxima speichert und denn da dementsprechend skaliert.
    Wenn noch jemand damit Erfahrung oder eine Idee hat nur her damit.
    mfg.skyscater

    VB.NET-Quellcode

    1. For i As integer = 0 To FFTArray.Length - 1
    2. FFTArray(i) = 255
    3. Next
    oder was? *facepalm* -.-'

    um es anders auszudrücken: wenn du immer, wenn große Werte kommen diese "kleinrechnest", bzw. kleine Werte IMMER "großrechnest" bekommst du überhaupt kein Spectogramm mehr, sondern (sehr konstanten) Datenmüll. Der Trick ist es, herauszufinden, warum und um welches Verhältnis niedrige Frequenzen größere Ausschläge ergeben. Das das so ist, ist der Normalfall und kein Berechnungsfehler.

    Meine Vermutung wäre, das niedrige Frequenzen in der Akustik meist sehr energiereich sind. Gff. resultiert daraus ihr größerer Einfluss.
    Eine andere Theorie wäre, dass in unserem hörbaren Spektrum ein sehr breites band an hohen Frequenzen vorhanden ist, jedoch ein deutlich schmaleres Band an Niedrigen. Möglicherweise wäre die Summe aller Auslenkungen für hohe Frequenzbereiche bei einem "gemischten" Ton genauso groß, wie die Ausschläge der niedrigen Frequenzen.
    Näher begründen kann ich das allerdings nicht. Alles was sich um Frequenzen dreht, ist in der Physik sehr kompliziert. Es spielen viele Faktoren und Gesetzte zusammen (deutlich mehr als in der Schule modellhaft gelehrt werden).



    Wenn du also alles dynamisch auf ein Niveau pegelst bekommst du Datenmüll. Es gilt die oben genannte Verschiebung zum tiefen Frequenzspektrum herauszurechnen. Und dafür modellierst du am besten eine geeignete Funktion! Mein Ansatz wäre s, für ein Lied 1000-10.000 FTTs generieren zu lassen und zu berechnen, bis zu welchem Frequenzbereich und wie strak die Messwerte besonders "ausschlagen". Daraus modellierst du dann eine passende Funktion, die sich an der mittleren Abweichung orientiert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FuFu^^“ ()

    Dass dieser Frequenzbereich so stark vertreten ist liegt ganz simpel an der Datei/Stream der berechnet wird.
    Generier eine Sinus welle mit einer anderen Frequenz und du hast was komplett anderes auf dem Schirm.

    Nur als Beispiel nen 10kHz Bild (dafür hab ich jetzt Ohrenweh):
    Bilder
    • 10000Hz.PNG

      10,65 kB, 656×296, 159 mal angesehen


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Es geht um Musik und Musik ist nunmal keine Sinuswelle. Bei Musik ist auffällig, dass niedrige Frequenzen besonders stark ausschlagen. Kannst du begründet sagen, warum das so ist, obwohl die Bässe rein akustisch nicht als wesentlich lauter wahrgenommen werden als alle anderen Frequenzen?

    mir schrieb:

    Meine Vermutung wäre, das niedrige Frequenzen in der Akustik meist sehr energiereich sind. Gff. resultiert daraus ihr größerer Einfluss.
    Dass das so ist steht fest. Warum das so ist beantwortet das nicht.


    Wie gesagt, ich würde diesen Effekt mit einer modellierten Funktion herrausrechnen und nicht irgendetwas angleichen.
    So hochfräquente Töne kommen einfach nicht so oft vor...
    Hab grad gesehn das professionelle equalizer nur bestumnte frequenzen anzeigen. Hauptsächlich die kleineren:
    klick
    Werd das morgn wenn ich wieder am pc bin mal ausprobieren.
    Mfg.skyscater