You are on page 1of 8

PENGOLAHAN SIGNAL DIGITAL

DISCRETE FOURIER TRANSFORM

Nama : Muhammad Realdi


NIM : 09011281823070
Kelas : SK6B
Dosen Pengampuh : Rendyansyah, S.Kom, M.T.

JURUSAN SISTEM KOMPUTER


FAKULTAS ILMU KOMPUTER
UNIVERSITAS SRIWIJAYA
2021
Discrete Fourier Transform

Berikut implementasi dari discrete fourier transform


Program :
unit unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
pcont1: TPageControl;
pcont2: TPageControl;
Analog: TTabSheet;
Diskrit: TTabSheet;
RealX: TTabSheet;
ImX: TTabSheet;
Magnitudo: TTabSheet;
Chart1: TChart;
Series1: TLineSeries;
Chart2: TChart;
Chart3: TChart;
Chart4: TChart;
Chart5: TChart;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Button6: TButton;
Edit6: TEdit;
Label3: TLabel;
Edit5: TEdit;
Series6: TBarSeries;
Series2: TBarSeries;
Series4: TBarSeries;
Series3: TBarSeries;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);


var s1,s2,s3,x,ns,t,dt,pjg_t,f1,f2,f3,a :Double;

begin
f1:=StrToInt(Edit1.Text);
if checkBox2.Checked = True then
begin f2:=StrToInt(Edit2.Text);
end
else begin f2:=0;
end;
if checkBox3.Checked = True then
begin f3:=StrToInt(Edit3.Text);
end
else begin f3:=0;
end;

dt:=1/StrToFloat(Edit4.Text);
pjg_t:=StrToFloat(Edit5.Text);

Series1.Clear;
a:=1;
t:=0;

while t<=pjg_t do
begin
s1:=a*Sin((2*3.14*f1*t));
s2:=a*Sin((2*3.14*f2*t));
s3:=a*Sin((2*3.14*f3*t));
if checkBox1.Checked then begin
ns:=0.2*Sin((2*3.14*100*t));
end
else
begin
ns:=0;
end;
x:=s1+s2+s3+ns;
Series1.AddXY(t,x);
t:=t+dt;

end;
Analog.Show;
end;

procedure TForm1.Button6Click(Sender: TObject);


begin
Application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);


begin
checkBox1.Checked := True ;
Edit2.Enabled := False ;
Edit3.Enabled := False ;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);


begin
if checkBox2.Checked = True then Edit2.Enabled := True
else Edit2.Enabled := False ;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);


begin
if checkBox3.Checked = True then Edit3.Enabled := True
else Edit3.Enabled := False ;
end;

procedure TForm1.Button2Click(Sender: TObject);


var
del_n,x4:Double;
leb_n,f1,f2,f3,a,n:Integer;
x:Array[1..1000]of Double;
x1:Array[1..1000]of Double;
x2:Array[1..1000]of Double;
x3:Array[1..1000]of Double;
begin
f1:=StrToInt(Edit1.Text);
if checkBox2.Checked = True then begin
f2:=StrToInt(Edit2.Text) ;
end else begin f2:=0 end;
if checkBox3.Checked = True then begin
f3:=StrToInt(Edit3.Text) ;
end else begin f3:=0 end;
del_n:=StrToFloat(Edit4.Text);
leb_n:=StrToInt(Edit6.Text);

Series6.Clear;
a:=1;
n:=0;
while n<=leb_n do
begin
x1[n]:=a*Sin((2*3.14*(f1/del_n)*n));
x2[n]:=a*Sin((2*3.14*(f2/del_n)*n));
x3[n]:=a*Sin((2*3.14*(f3/del_n)*n));
if checkBox1.Checked then begin
x4:=a*Sin((2*3.14*(100/del_n)*n));
end
else begin
x4:=0;
end;
x[n]:=x1[n]+x2[n]+x3[n]+x4;
Series6.AddXY(n,x[n]);
n:=n+1;
end;
Diskrit.Show;
end;

procedure TForm1.Button3Click(Sender: TObject);


var
del_n,x4:double;
k,leb_n,f1,f2,f3,a,n:Integer;
f,sig_euler1,sig_euler2:double;
z:Array[1..1000]of Double;
real:Array[1..1000]of Double;
imaji:Array[1..1000]of Double;
x:Array[1..1000]of Double;
x1:Array[1..1000]of Double;
x2:Array[1..1000]of Double;
x3:Array[1..1000]of Double;

begin
f1:=StrToInt(Edit1.Text);
if checkBox2.Checked = True then
begin f2:=StrToInt(Edit2.Text);
end
else begin f2:=0;
end;
if checkBox3.Checked = True then
begin f3:=StrToInt(Edit3.Text);
end
else begin f3:=0;
end;
del_n:=StrToFloat(Edit4.Text);
leb_n:=StrToInt(Edit6.Text);

Series3.Clear;
Series4.Clear;
a:=1;
n:=0;

while n<=leb_n do
begin
x1[n]:=a*Sin((2*3.14*(f1/del_n)*n));
x2[n]:=a*Sin((2*3.14*(f2/del_n)*n));
x3[n]:=a*Sin((2*3.14*(f3/del_n)*n));
if checkBox1.Checked then begin
x4:=a*Sin((2*3.14*(100/del_n)*n));
end else begin
x4:=0;
end;
x[n]:=x1[n]+x2[n]+x3[n]+x4;
n:=n+1;
end;

k:=0;
while k<=(leb_n-1)/2 do
begin
n:=0;
sig_euler1:=0;
sig_euler2:=0;
while n<=(leb_n-1)/2 do
begin
sig_euler1:=sig_euler1+(x[n]*cos((2*3.14*n*k)/leb_n));
sig_euler2:=sig_euler2-(x[n]*sin((2*3.14*n*k)/leb_n));
n:=n+1;
end;
real[k]:=sig_euler1;
imaji[k]:=sig_euler2;
Series3.AddXY(k,real[k]);
Series4.AddXY(k,imaji[k]);
k:=k+1;
end;

k:=0;
while k<=(leb_n-1)/2 do
begin

z[k]:=sqrt((real[k]*real[k])+(imaji[k]*imaji[k]));
f:=(k/(leb_n/2))*(del_n/2);
Series2.AddXY(f,z[k]);
k:=k+1;
end;
RealX.Show;
end;

procedure TForm1.Button5Click(Sender: TObject);


begin
Application.Terminate;
end;

procedure TForm1.Button4Click(Sender: TObject);


var Z:array[1..1000] of Double;
imaji:array[1..1000] of Double ;
real:array[1..1000] of Double ;
del_n:Double;
leb_n,k:Integer;
f:Double;
begin
del_n:=StrToFloat(Edit4.Text);
leb_n:=StrToInt(Edit6.Text);

while k<=(leb_n-1)/2 do
begin
z[k]:=sqrt((real[k]*real[k])+(imaji[k]*imaji[k]));
f:=(k/(leb_n/2))*(del_n/2);
Series2.AddXY(f,z[k]);
k:=k+1;
end;
Magnitudo.Show;
end;
end.

You might also like