Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

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

Re: Seltsame Ergebnisse bei DFT

  Alt 31. Jan 2007, 09:13
Funktioniert doch

Ich hab alles so verwendet wie bei deiner FFT, mit folgenden Änderungen:
Delphi-Quellcode:
rocedure TForm1.Button1Click(Sender: TObject);
const Abtastwerte=3000;
      Abtastfrequenz=1000;
var l:Tlineseries;
    a:array[0..Abtastwerte-1] of single;
    i:integer;
begin
  for i:=0 to Abtastwerte-1 do
    a[i]:=2 //Gleichanteil
          +5*sin(2*pi*50*i/abtastfrequenz) //50Hz
          +3*sin(2*pi*440*i/Abtastfrequenz) //440Hz
          +1*sin(2*pi*300*i/Abtastfrequenz);//300Hz
  fft(a);

  chart1.FreeAllSeries;
  l:=tlineseries.create(chart1);
  chart1.AddSeries(l);
  for i:=0 to Abtastwerte-1 do l.AddXY(i*abtastfrequenz/Abtastwerte,a[i]);
end;
Delphi-Quellcode:
procedure FFT(var a: array of Single);
var I: Integer;
    b: TComplexArray;
begin
  setlength(b, length(a));
  for I:=0 to high(a) do b[I]:=MakeC(a[I], 0);
  DoDFT(b, length(a), 0, MakeC(cos((2*Pi/length(a))), sin((2*Pi/length(a)))));
  for I:=0 to high(a) do a[I]:=sqrt(sqr(b[I].re)+sqr(b[i].im))/length(a); //nur den Betrag
end;
+Exakt der angegebenen DoDFT
-->Bild ist im Anhang


Zitat:
EDIT: Nebenbei bemerkt ist dieser Algorithmus trotz einiger Optimierungen, die ich mir ausgedacht habe, sehr, sehr langsam. Nicht verwunderlich, wenn man bedenkt, dass bei n=2000 einige Millionen (Milliarden?) Additionen und Multiplikationen ausgeführt werden müssen.
Na ein "sehr" kann man weglassen (zumindest bei 2GHz Dual Core)
Aber nicht umsonst hat die FFT ihren Namen bekommen. Sie hat aber eben den Nachteil, dass du immer 2^n Abtastwerte nehmen musst. Wenn das nicht geht, musst du eben auf die DFT zurückgreifen.
Nebenbei bemerkt: Man kann die For-Schleifen noch optimieren. Dazu müsste man wahrscheinlich zu Assembler gehen. Mathworks schaffts nämlich auch ohne merkliche Zeitverzögerung (eben ausprobiert). [Edit: Quatsch Mathworks, die benutzen auch nur das hier]

Du kannst mir ja mal sagen, was genau du vor hast. Wahrscheinlich kann man es für eine FFT hinbiegen.
Angehängte Grafiken
Dateityp: bmp test_103.bmp (371,5 KB, 39x aufgerufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat