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.