mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Spektrum aus Audio Daten nur wie?


Autor: dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich muss ein Programm schreiben das aus Audio Daten ein Power Spektrum
erstellt.
Eingangs Daten: 44100Hz; Stereo; 5 Sekunden; float
Ausgangs Daten: log. 20-22500Hz --> 20Hz=0,9 25Hz=1,1 30Hz=0,8 ....

Nun die Audio Daten habe ich im Speicher.
Nur wie mache ich daraus meine Ausgangs Daten?
Wie eine FFT genau funktioniert habe ich bis jetzt noch nicht richtig
verstanden. Klar ist nur das ich sie brauche. Nun ja eigentlich muss
ich sie ja nur anwenden, aber WIE?

Dirk

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf opensource und sourceforge gibt es c-codes die das direkt leisten.
Die fft ermittelt dir aber erstmal nur die Verteilung. Bei der Leistung
must Du die f noch gesondert beruecksichtigen.

Autor: dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir die FFT Routinen aus dem Audacity Projekt mal angesehen.
Nur habe ich keine Idee, wie ich damit umgehen muss. Oder anders
gesagt, wie & was ich da rein schieben muss, um mein Ergebniss zu
bekommen. Ist mit Sicherheit ganz einfach, nur ich sehe nicht wie ich
es machen muss und bin ein wenig am verzweifeln.

Dirk

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Musst du das in C machen oder in Matlab oder sowas? In Matlab ist es ja
drin. Ein bisschen Erklärung zum fft Algorithmus von Matlab findest du
auf deren Seite:
http://www.mathworks.com/access/helpdesk/help/tech...
Dann gibts auch noch auf folgenden Seiten Hilfe:
http://www.kgw.tu-berlin.de/statisch/lehre/skript/...
http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation

Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FFT wird hier gut erklaert, finde ich.

http://www.dspguide.com/

Autor: dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Code ist sogar in C++ geschreiben. Also da ist nichts mit Matlab
oder sowas.
Eigentlich will ich auch gar nicht verstehen wie eine FFT geht, sondern
nur wissen wie ich sie anwenden muss.
Ich habe mir in den letzten Tagen einige FFT Routinen angesehen und
eingebaut.
Nun bekomme ich zwar Ausgangs-Daten (Array) nur es fehlt mir der Bezug
zur Frequenz (Array[X]--> ??Hz). Soweit ich es verstanden habe sind die
Daten linear im Array. Ich brauche sie aber mit einer log. Aufteilung.
Muss ich mir da die gewünschten Frequenzen aus dem Array selber raus
suchen?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Daten sind mit der Samplerate f_s=44100 abgetastet, das ergibt t_0 =
1/f_s = ...
Du machst die FFT über N Samples =>
f_0 = f_s / N
beispielsweise 1024 Punkte FFT
f_0 = 44100 / 1024 = 43.0664Hz

Das heißt der Abstand deiner Spektrallinien im Bildbereich ist ca
43Hz.
Die erste Spektrallinie die du hast steht für 0Hz, die nächste für
43Hz, die nächste für 86Hz, ..., bis zu letzten, die für (44100-43)Hz
steht. Alles über f_s/2 sind aber in Wirklichkeit die Werte für die
negativen Frequenzen, am besten du schmeißt sie gleich weg.
Du siehst also, dass du im Frequenzbereich auch eine lineare Skala
erhälst. Wie du das ganze jetzt am besten logarithmisch machst fällt
mir jetzt auch nicht sofort ein. Ich denke die passenden Linien
raussuchen reicht nicht aus. Eventuell musst du du schon alle Linien
verwenden, und dann eben in den höheren Frequenzen immer mehrere
zusammenaddieren.
Dabei gehts darum, dass die Gesamtenergie ja stimmen muss.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es wirklich so einfach! Und ich habe es nicht selber gesehen.
Hätte ich das nur mal richtig gelernt oder besser aufgepasst.

Danke Dirk

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.