Witam!! Jak wyrysowac wykres widma amplitudowego sygnału? Cała funkcja jest obliczana za pomocą FFT i do tego na ekranie musi mi jesszcze wyświetlić wykres. Poniżej cały schemat obliczenia, chociaz nie wiem czy do końca jest poprawny, bo może zawierać błedy, mógłby go ktoś przy okazji sprawdzić??
const
NN = 256; //liczba probek
LPI = 3.14159265358979323846;
procedure TForm1.fourier(Sender: TObject; X,Y: array of Double);
//procedure TForm1.fourier(Sender: TObject; X,Y: array of
Double):[ewentualnie_typ_zwracany]; // jeli co zwraca??
var
a,z,licznik : Integer;
b,c,d,e,g,L,M,mm,i: Integer;
W_r,W_i,Wi_r,Wi_i,T_r,T_i: Double;
//licz[1024]: real;
T : array [] of real;
licznik:= 0;
a:=1;
//-----------------------------------------przestawianie elementow
for b:=1 to b<NN do
begin
if b<a then
T:=X[a-1];
X[a-1]:=X[b-1];
X[b-1]:=T;
end;
c:=NN/2;
while c<a do
begin
a:=a-c;
c:=c/2;
end;
a:=a+c; //??
b:=b+1;
end;
//--------------------------------------FFT
for e:=0 to e<NN do
begin
Y[e]:=0;
e:=e+1;
end
for e:=1 to e<=9 do
begin
L:= 1<<e; // z tego co obczaiłem pow(1,e) niewiem trzeba by to
jako napisac procedurke
//albo jest może gotowa implementacja w delphi
M := L/2;
Wi_r:=1;
Wi_i:=0;
W_r= cos(LPI/M);
W_i=-sin(LPI/M);
for mm:=1 to mm<M+1 do // jak w pocie można
chyba jako zlikwidować M+1, NN+1
begin
for g:=mm to g<NN+1 do
begin
d:= g+M;
//T=x(d)*Wi
T_r := X[d-1]*Wi_r-Y[d-1]*Wi_i;
T_i := X[d-1]*Wi_i+Y[d-1]*Wi_r;
// x(d)=x(g)-T
X[d-1] := X[g-1]-T_r;
Y[d-1] := Y[g-1]-T_i;
//x(g)=x(g)+T
X[g-1] := X[g-1]+T_r;
Y[g-1] := Y[g-1]+T_i;
g:=g+L;
end;
Wi_r:=Wi_r*W_r-Wi_i*W_i;
Wi_i:=Wi_r*W_i+Wi_i*W_r;
mm:=mm+1;
end;
e:=e+1;
end;
end;
</delphi>