Thema: Delphi Problem bei FFT

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

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

Re: Problem bei FFT

  Alt 29. Jan 2007, 16:13
So, jetzt habe ich mal ein wenig geanuer reingeschaut

Ich bin über die Variante (array of single) reingegangen
sieht jetzt so aus:
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);
  DoFFT(b, length(a), 0, MakeC(cos((2*Pi/length(a))), -sin((2*Pi/length(a))))); //das Minus ist erstmal egal
  for I:=0 to high(a) do a[I]:=sqrt(sqr(b[I].re)+sqr(b[i].im))/length(a);
end;
Das Minus ist egal, da wir nur den Betrag auswerten.
Dein Fehler ist, dass du nur den Realteil auswertest.

Getestet mit Tchart:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var l:Tlineseries;
    a:array[0..1023] of single;
    i:integer;
begin
  for i:=0 to 1023 do a[i]:=5*sin(2*pi*10*i/1000);
  for i:=0 to chart1.SeriesCount-1 do chart1.Series[0].free;
  l:=tlineseries.create(chart1);
  chart1.AddSeries(l);

  fft(a);
  for i:=0 to 1023 do l.AddXY(i*1000/1024,a[i]);
end;
Wenn du aus den beiden 1000 auch eine 1024 machst, bekommst du ein "scharfes" Ergebnis.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat