AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Seltsame Ergebnisse bei DFT
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsame Ergebnisse bei DFT

Ein Thema von inherited · begonnen am 30. Jan 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 15:53
Zitat von gammatester:
Ich weiß nicht ganz, vorauf sich dein Einwand bezieht. Mein Hinweis bezog sich auf FFTs, deren Längen keine 2-er-Potenz sind, und davon finde ich nichts (oder bin blind).
Nee, da war ich blind

Das ist ja interessant. Zugegeben, ich hab mich noch nie intensiver mit FFT-Algos beschäftigt,... ich habs schon mal runtergeladen. Das werde ich mir mal reinziehen.


Edit: Sehr schön der zweite Link
Aber Hanning machen die alle nicht (und in den Kurzfassungen beim ersten Link stehts auch nicht drin). Die Bass.dll tuts laut Beschreibung. Sollte man vielleicht noch ergänzen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 21:20
OK, ich hab hier noch ein Problem.

Ich suche mir momentan den Spitzenwert und rechne aus dem die Frequenz aus.

Meine Idee war jetzt, alle Werte der ersten Hälfte des fouriertransformierten Vektors mit der Frequenz, für die sie stehen, zu multiplizieren und dann am Ende das ganze durch alle Werte dieser Vektorhälfte zu teilen. Also in etwa so wie im Anhang.

Da bekomme ich Werte die ziemlich (aber nicht aber nicht ganz) gar nichts mit den wirklichen Frequenzen zu tun haben.

Also habe ich etwas eingebaut, was ich als NOISE_THRESHOLD bezeichne. NOISE_THRESHOLD ist eine Single-Konstante mit dem Wert 0.001. Werte aus dem Vektor gehen nur dann in die Berechnung ein, wenn sie >= NOISE_THRESHOLD*a[max] sind, wobei a mein Vektor ist und max der Index des Spitzenwertes. Das heißt, alle Werte, die kleiner sind als 1/1000 des Maximalwertes, werden vernachlässigt.

Dadurch erreiche ich eine Genauigkeit von +/- 1Hz, also statt 1420Hz erhalte ich 1419Hz.

Das klingt sehr gut, funktioniert aber nur bei Sinustönen.

Bei Square- oder Sägezahntönen stimmen die Werte überhaupt nicht.
Miniaturansicht angehängter Grafiken
formel_207.gif  
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 21:37
Ich habs jetzt mehrmals durchgelesen und verstehe nicht, was du willst.

Deine Formel kann man übrigens noch kürzen, dann bleibt nur noch die Summe aller Frequenzen übrig, die Amplituden (a) verschwinden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 21:56
Bei meiner Formel hab ich mich verschrieben, ich hab die richtige Version wieder im Anhang. Bin mir aber nicht ganz sicher, ob man die nicht auch kürzen kann.

Ich will sozusagen den Durchschnitt aller Frequenzen haben, gewichtet nach Lautstärke und hoffe, damit die Frequenz meines Tons genau herauszufinden.

Soweit ich weiß, bekommt man doch die Frequenz des vorherrschenden Tons genau dadurch, dass man den Durchschnitt nimmt, oder?

EDIT: Die Formel lässt sich nicht weiter kürzen.
Miniaturansicht angehängter Grafiken
formel_174.gif  
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 22:24
Hmm, da fehlen mir wohl ein paar Akustik vorlesungen. Keine ahnung. Ich dachte man hat ein eindeutiges Maximum, dass sich von allen anderen abhebt. Dem ist anscheinend nicht so. Kannst du mal so ein Spektrum zeichnen. Das würde mich mal persönlich interessieren.

Was du da mathematisch machst, da bin ich noch nicht ganz durchgestiegen. Aber du wichtest irgendwie höhere Frequenzen stärker als niedrige.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 22:30
Nein.

Ich habe eine eindeutige Spitze, aber nur bei Sinustönen. Bei Sägezahntönen zum Beispiel habe ich die nicht, da habe ich etwa 3 solche Spitzen, die von der Amplitude her abnehmen, also eine sehr große, eine mittlere und eine kleinere.

Mathematisch gesehen mache ich eine einfache, gewichtete Durchschnittsbildung. Höhere Frequenzen werden natürlich nicht höher gewichtet, sie sind nur einfach größer und ziehen damit den Durchschnitt "in die Höhe". Man könnte es vergleichen mit einem Vektor für Notenverteilungen bei einem Test in der Schule:

Man hat einen Vektor (a1,...,a6), bei dem a1 die Anzahl der 1en und a6 die Anzahl der 6en ist. Die Durchschnittsnote des Tests bildet sich aus (a1*1+a2*2+a3*3+a4*4+a5*5+a6*6)/(a1+a2+a3+a4+a5+a6).

Das ist mathematisch gesehen das gleiche wie bei meiner Frequenzberechnung.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 22:39
Mit der Mathematik hast du Recht. Ist für mich jetzt zu spät.

Aus Wiki: "Die Schwingung mit der niedrigsten Frequenz (gleichartige Schwingung der gesamten Saite) ist hier die Grundfrequenz, die anderen Schwingungen Oberschwingungen."
Soweit

Was ist den Sägezahn für ein Ton? Harmonisch ist der bestimmt nicht. Und er besteht auch nicht aus einem Grundton.
Was ist den z.B., wenn ich am Klavier drei Tasten anschlage, oder auf der Gitarre alle 6 Saiten schlage?
Für was entscheidet sich dann so ein Gitarrenstimmgerät?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 22:46
*kratz*

Frag mich nicht.

Ein Sägezahnton hat halt statt der Sinusfunktion eine lineare Funktion.

Schwingung (rot) und FFT (grün) hab ich mal angehängt.

EDIT: http://de.wikipedia.org/wiki/Kippschwingung
Miniaturansicht angehängter Grafiken
saegezahn_193.png  
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Seltsame Ergebnisse bei DFT

  Alt 1. Feb 2007, 08:20
Zitat von Wiki:
Sägezahnschwingung als Überlagerung von Obertönen
wzbw (was zu beweisen war)
Der Sägezahn ist eine reine Überlagerung von Oberschwingungen.

Wenn also die Länge eines Zahns 0,2s dauert, also T=0,2s, dann ist f=5Hz deine Grundschwingung. Zu dieser Grundschwingung überlagern sich jetzt noch alle Harmonischen (bzw. Oberschwingungen), also alle n*5Hz (n..jede natürliche Zahl) Die Amplituden verkleinern sich allerdings mit jeder Oberschwingung (nur der Gleichanteil 0Hz kann etwas aus der Reihe tanzen, je nachdem wo der Sägezahn die Mitte hat).

Und das sieht man auch in deinem Bild: Eine Spitze immer im gleichen Abstand. die erste Spitze nach dem Gleichanteil ist die Grundschwingung.
Evtl. ist die Grundschwinung kein Vielfaches von Abtastfrequenz/(Anzahl der Abtastwerte), dann musst du die umliegenden Frequenzen irgendwie gruppieren.

btw: Wenn du ein Hanningfenster drüber legst, werden die Spitzen schärfer.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Seltsame Ergebnisse bei DFT

  Alt 1. Feb 2007, 14:14
Ich schätze mal, ein Hanningfenster ist eine Art Filter. Wie funktioniert der?

EDIT: Aha. Das Ding heißt korrekt von Hann-Fenster und hat die Gleichung 0.5*(1+cos(2*Pi*n/M)) mit -M/2<=n<=M/2

Meine Implementation sieht so aus:

Delphi-Quellcode:
procedure vonHannWindow(var a: array of Single);
var I, M, n: Integer;
begin
  M:=length(a);
  for I:=0 to (M shr 1)-1 do
  begin
    n:=I-(M shr 2);
    a[I]:=a[I]*0.5*(1+cos(2*Pi*n/(M shr 2)));
  end;
end;
Ich erhalte klare Spitzen, kann aber immer noch keine Rechtecks/Sägezahntöne erkennen. Aber vielleicht geht das auch einfach nicht.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz