Download - Laporan (Autosaved)

Transcript
Page 1: Laporan  (Autosaved)

LAPORAN TUGAS

ANALISA SINYAL BIOMEDIKA

“Program Plot H(Ω) dengan masukan koordinat Pole dan Zero pada Bidang Z”

Oleh:

2213204203 Muhammad Alfiansyah

PASCA SARJANA ELEKTRONIKA JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNOLOGI INDUSTRI INSTITUT TEKNOLOGI SEPULUH NOPEMBER SURABAYA

2014

Page 2: Laporan  (Autosaved)

A. Pendahuluan

Laporan terbagi dalam 5 bab yakni Pendahuluan, Perancangan Program, Pembahasan Soal, Kesimpulan, dan Lampiran. Pada Bab Perancangan Program akan di paparkan implementasi dari penurunan respon magnitude terhadap Omega dalam bentuk source code program dan bagian bagian interface program. Pada Bab Pembahasan Soal akan dijelaskan hasil plot dengan menggunakan program yang sudah dirancang pada bab sebelumnya, berbagai kondisi akan di uji dalam bab ini agar dapat diketahui pengaruh masing masing parameter bebas terhadap hasil plot respon magnitude terhadap omega. Pada Bab kesimpulan akan disimpulkan beberapa poin penting dari hasil analisa dari bab pembahasan soal. Bab Lampiran berisi listing program secara keseluruhan.

B. Perancangan Program Program dibagi kedalam dua bagian yakni Ilustrasi diagram pole zero dan plot respon magnitude. Berikut akan dijelaskan satu persatu.

Program ilustrasi diagram pole zero menerima masukan berupa radius dan sudut theta pole dari 2 scrollbar. Masukan kemudian diolah untuk di tampilkan dalam gambar menggunakan komponen dephi GLScene. Tiap Tiap Soal memiliki Posisi Zero yang tetap, sehingga tampilan Zero untuk tiap soal berubah sesuai dengan Tab yang dipilih disebelah gambar diagram pole zero. Gambar1 menjelaskan pencitraan dari program ilustrasi pole zero.

Gambar 1. Tampilan antarmuka ilustrasi program pole zero

Berikut Source Code dari Program Ilustrasi Pole Zero : . . . radius := scrollbar2.Position / 1000; theta := scrollbar3.Position / 1000 * 3.14; MaskEdit1.Text := floattostr(radius); MaskEdit2.Text := floattostr(theta * 180 / 3.14); Pole1.Up.SetVector(cos(theta),sin(theta),0); Pole1.Nodes[1].Y := radius; Pole2.Up.SetVector(cos(theta),-sin(theta),0); Pole2.Nodes[1].Y := radius; . . .

Listing diatas bertujuan untuk mengambil nilai radius dan theta dari pergerakan scrollbar, yang kemudian ditampilkan pada maskedit, Dilanjutkan dengan proses menggambar posisi dari pole1 dan pole2.

Page 3: Laporan  (Autosaved)

. . . procedure TForm1.TabSheet1Show(Sender: TObject); begin zero1.Up.SetVector(-1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(-1,0,0); zero2.NodeSize := 0.2; zero2.Nodes[1].Y := 1; point1 := 1; olahdata; end; procedure TForm1.TabSheet2Show(Sender: TObject); begin zero1.Up.SetVector(1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(1,0,0); zero2.NodeSize := 0.2; zero2.Nodes[1].Y := 1; point1 := 2; olahdata; end; procedure TForm1.TabSheet3Show(Sender: TObject); begin zero1.Up.SetVector(1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(-1,0,0); zero2.NodeSize := 0.1; zero2.Nodes[1].Y := 1; point1 := 3; olahdata; end; procedure TForm1.TabSheet4Show(Sender: TObject); begin zero1.Up.SetVector(cos(theta),sin(theta),0); zero1.NodeSize := 0.13; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(cos(theta),-sin(theta),0); zero2.NodeSize := 0.13; zero2.Nodes[1].Y := 1; point1 := 4; olahdata; end; . . . Listing diatas bertujuan untuk menggambar posisi dari Zero1 dan Zero dua berdasarkan TabSheet mana yang aktif. Tabsheet1 untuk soal A Tabsheet2 untuk Soal B demikian seterusnya. Tiap tiap procedure diahiri dengan memanggil subrutin “Olahdata”. Sub rutin Olah Data adalah bagian dari Program Plot Respon Magnitude.

Page 4: Laporan  (Autosaved)

Program Plot Respon Magnitude menerima masukan berupa radius dan theta dari scollbar dan menggunakannya untuk menghitung nilai dari |H(Ω)| terhadap Omega dari 0π sampai 1π. Detail penurunan persamaan |H(Ω)| terdapat pada tugas penurunan yang kemudian hasil ahirnya dituliskan dalam program. Bentuk umum hasil penurunan dapat diamati pada persamaan 1 dan 2.

( ) ( ) ( )

( ) ( )

(1)

| ( )| √( ) ( )

( ) ( )

(2)

Source Code dari persamaan 2 dituliskan sebagai berikut : . . . Re1 := cos(2*Omega) + 2*cos(Omega) +1 ; Im1 := sin(2*Omega) + 2*sin(Omega); Re2 := cos(2*Omega) - 2*radius*cos(theta)*cos(Omega) + radius*radius; Im2 := sin(2*Omega) - 2*radius*cos(theta)*sin(Omega); H_Omega := sqrt( (sqr(Re1)+sqr(Im1)) / (sqr(Re2)+sqr(Im2)) ); . . .

Masing masing komponen real dan imaginer dihitung secara terpisah yang kemudian diakar kuadratkan untuk menghasilkan nilai |H(Ω)|. Listing diatas menggunakan penurunan Soal A sebagai contoh. Ilustrasi Grafik Program Secara Keseluruhan dapat diamati pada Gambar2.

Gambar 2. Ilustrasi Program Secara Menyeluruh.

Page 5: Laporan  (Autosaved)

C. Pembahasan Soal Metode pembahasan yang digunakan adalah mengamati hasil plot magnitude filter dengan membuat tetap nilai salah satu variable bebas (Radius / Theta) dan memvariasikan nilai variable lainnya. Dari metode ini diharapkan dapat diketahui peran masing masing variable bebas dan sifat Respon Magnitude secara keseluruhan apakah bersifat Lowpass Filter, Highpass filter, Bandpass filter dan BandStop Filter. C.1 Soal A

(3)

Nilai Radius Pole dipilih 0.5 Nilai Theta Divariasikan.

Gambar 3. Radius 0.5 Theta 30 Derajat.

Gambar 4. Radius 0.5 Theta 60 Derajat.

Page 6: Laporan  (Autosaved)

Gambar 5. Radius 0.5 Theta 90 Derajat.

Gambar 6. Radius 0.5 Theta 120 Derajat.

Nilai Theta dipilih 90 Derajat Nilai Radius Divariasikan.

Gambar 7. Radius 0.2 Theta 90 Derajat.

Page 7: Laporan  (Autosaved)

Gambar 8. Radius 0.4 Theta 90 Derajat.

Gambar 9. Radius 0.6 Theta 90 Derajat.

Gambar 10. Radius 0.8 Theta 90 Derajat.

Dengan Mengamati gambar 3 sampai dengan gambar 10 dapat disimpulkan bahwa soal A memiliki respon magnitude yang bersifat lowpass filter karena cenderung menguatkan masukan dengan frekuensi yang rendah dan melemahkan masukan dengan frekuensi tinggi.

Page 8: Laporan  (Autosaved)

Dalam kondisi dimana theta di rubah berkala dapat diamati respon magnitude mengalami perubahan berupa pergeseran zona cut off. Semakin besar sudut theta terhadap sumbu real positif mengakibatkan zona cut off bergeser kearah omega yang lebih tinggi demikian pula sebaliknya. Dalam Kondisi dimana radius dirubah secara berkala dapat diamati bahwa (masih dalam rentang < 1) respon magnitude mengalami perubahan berupa redamannya.Semakin tinggi radius pole semakin terkuatkan masukan, demikian pula sebaliknya. C.2 Soal B

(4)

Nilai Radius Pole dipilih 0.5 Nilai Theta Divariasikan.

Gambar 11. Radius 0.5 Theta 30 Derajat.

Gambar 12. Radius 0.5 Theta 60 Derajat.

Page 9: Laporan  (Autosaved)

Gambar 13. Radius 0.5 Theta 90 Derajat.

Gambar 14. Radius 0.5 Theta 120 Derajat.

Nilai Theta dipilih 90 Derajat Nilai Radius Divariasikan.

Gambar 15. Radius 0.2 Theta 90 Derajat.

Page 10: Laporan  (Autosaved)

Gambar 16. Radius 0.4 Theta 90 Derajat.

Gambar 17. Radius 0.6 Theta 90 Derajat.

Gambar 18. Radius 0.8 Theta 90 Derajat.

Page 11: Laporan  (Autosaved)

Dengan Mengamati gambar 11 sampai dengan gambar 18 dapat disimpulkan bahwa soal B memiliki respon magnitude yang bersifat Highpass filter karena cenderung menguatkan masukan dengan frekuensi yang tinggi dan melemahkan masukan dengan frekuensi rendah. Dalam kondisi dimana theta di rubah berkala dapat diamati respon magnitude mengalami perubahan berupa pergeseran zona cut off. Semakin besar sudut theta terhadap sumbu real positif mengakibatkan zona cut off bergeser kearah omega yang lebih tinggi demikian pula sebaliknya. Dalam Kondisi dimana radius dirubah secara berkala dapat diamati bahwa (masih dalam rentang < 1) respon magnitude mengalami perubahan berupa redamannya.Semakin tinggi radius pole semakin terkuatkan masukan, demikian pula sebaliknya. C.3 Soal C

(5)

Nilai Radius Pole dipilih 0.5 Nilai Theta Divariasikan.

Gambar 19. Radius 0.5 Theta 30 Derajat.

Page 12: Laporan  (Autosaved)

Gambar 20. Radius 0.5 Theta 60 Derajat.

Gambar 21. Radius 0.5 Theta 90 Derajat.

Gambar 22. Radius 0.5 Theta 120 Derajat.

Page 13: Laporan  (Autosaved)

Nilai Theta dipilih 90 Derajat Nilai Radius Divariasikan.

Gambar 23. Radius 0.2 Theta 90 Derajat.

Gambar 24. Radius 0.4 Theta 90 Derajat.

Gambar 25. Radius 0.6 Theta 90 Derajat.

Page 14: Laporan  (Autosaved)

Gambar 26. Radius 0.8 Theta 90 Derajat.

Dengan Mengamati gambar 19 sampai dengan gambar 26 dapat disimpulkan bahwa soal C

memiliki respon magnitude yang bersifat Bandpass filter karena cenderung menguatkan masukan yang terdapat dalam rentang omega Cutoff 1 dan Cutoff 2. Dalam kondisi dimana theta di rubah berkala dapat diamati respon magnitude mengalami perubahan berupa pergeseran zona Cutoff. Semakin besar sudut theta terhadap sumbu real positif mengakibatkan zona cut off bergeser kearah omega yang lebih tinggi demikian pula sebaliknya. Dalam Kondisi dimana radius dirubah secara berkala dapat diamati bahwa (masih dalam rentang < 1) respon magnitude mengalami perubahan berupa redamannya.Semakin tinggi radius pole semakin terkuatkan masukan, demikian pula sebaliknya. C.4 Soal D

(6)

Nilai Radius Pole dipilih 0.5 Nilai Theta Divariasikan.

Gambar 27. Radius 0.5 Theta 30 Derajat.

Page 15: Laporan  (Autosaved)

Gambar 28. Radius 0.5 Theta 60 Derajat.

Gambar 29. Radius 0.5 Theta 90 Derajat.

Gambar 30. Radius 0.5 Theta 120 Derajat.

Page 16: Laporan  (Autosaved)

Nilai Theta dipilih 90 Derajat Nilai Radius Divariasikan.

Gambar 31. Radius 0.2 Theta 90 Derajat.

Gambar 32. Radius 0.4 Theta 90 Derajat.

Gambar 33. Radius 0.6 Theta 90 Derajat.

Page 17: Laporan  (Autosaved)

Gambar 34. Radius 0.8 Theta 90 Derajat.

Dengan Mengamati gambar 27 sampai dengan gambar 34 dapat disimpulkan bahwa soal D

memiliki respon magnitude yang bersifat Bandstop filter karena cenderung menguatkan masukan yang terdapat diluar rentang omega Cutoff 1 dan Cutoff 2. Dalam kondisi dimana theta di rubah berkala dapat diamati respon magnitude mengalami perubahan berupa pergeseran zona Cutoff. Semakin besar sudut theta terhadap sumbu real positif mengakibatkan zona Cutoff bergeser kearah omega yang lebih tinggi demikian pula sebaliknya. Dalam Kondisi dimana radius dirubah secara berkala dapat diamati bahwa (masih dalam rentang < 1) respon magnitude mengalami perubahan berupa redamannya.Semakin tinggi radius pole semakin terkuatkan masukan, demikian pula sebaliknya.

D. Kesimpulan Analisa soal A sampai dengan D memaparkan beberapa hal penting Antara lain, Letak Zero pada diagram Z menentukan sifat kerja dari filter yang dirancang, apakah itu Lowpass, Highpass, Bandpass dan Bandstop. Sedangkan Letak Pole Seperti yang dikonfigurasikan pada soal menentukan redaman dan letak dari omega cutoff dari filter yang dirancang. Semakin besar radius pole semakin tinggi penguatan semakin rendah radius pole semakin teredam respon magnitude. Semakin besar sudut theta terhadap sumbu real semakin bergeser Zona Cutoff ke omega yang lebih tinggi, demikian pula sebaliknya. Perlu dilakukan percobaan bagaimana respon magnitude dengan posisi Zero yang terletak pada bidang imaginer atau real namun juga memiliki radius sebagai variable bebas. Perlu diamati juga Plot dari respon fase untuk mengetahui kinerja filter secara menyeluruh.

Page 18: Laporan  (Autosaved)

E. Lampiran Berikut dilampirkan listing program secara keseluruhan.

unit Unit1; interface uses Math, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Tabs, Vcl.ComCtrls, GLCrossPlatform, BaseClasses, GLScene, GLWin32Viewer, GLObjects, GLGraph, GLCoordinates, GLSpaceText, GLGeomObjects, VCLTee.TeEngine, VCLTee.Series, Vcl.ExtCtrls, VCLTee.TeeProcs, VCLTee.Chart, Vcl.StdCtrls, Vcl.Mask, Vcl.Imaging.pngimage; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; GLScene1: TGLScene; GLSceneViewer1: TGLSceneViewer; GLLightSource1: TGLLightSource; GLCamera1: TGLCamera; Coordinate: TGLDummyCube; GLXYZGrid1: TGLXYZGrid; GLDisk1: TGLDisk; Im_Text: TGLSpaceText; Re_Text: TGLSpaceText; Pole1: TGLLines; Pole2: TGLLines; Zero1: TGLLines; Zero2: TGLLines; ScrollBar1: TScrollBar; Chart1: TChart; Series1: TLineSeries; ScrollBar2: TScrollBar; ScrollBar3: TScrollBar; MaskEdit1: TMaskEdit; MaskEdit2: TMaskEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Chart2: TChart; LineSeries1: TLineSeries; CheckBox1: TCheckBox; procedure olahdata; procedure TabSheet1Show(Sender: TObject); procedure FormCreate(Sender: TObject);

Page 19: Laporan  (Autosaved)

procedure ScrollBar2Change(Sender: TObject); procedure ScrollBar1Change(Sender: TObject); procedure ScrollBar3Change(Sender: TObject); procedure TabSheet2Show(Sender: TObject); procedure TabSheet3Show(Sender: TObject); procedure TabSheet4Show(Sender: TObject); procedure MaskEdit1Change(Sender: TObject); procedure CheckBox1Click(Sender: TObject); private Private declarations public Public declarations end; var Form1: TForm1; Re1,Im1,Re2,Im2,Omega,Alpha,buff,buff2,H_Omega,pipi,radius,theta,resolusi : real; H_Fase : real; point1 : integer; implementation $R *.dfm procedure TForm1.MaskEdit1Change(Sender: TObject); begin // scrollbar2.Position := Trunc(strtofloat(MaskEdit1.Text)*1000); //olahdata; end; procedure TForm1.olahdata; begin pipi := 0; Omega := 0; resolusi := 0.001; radius := scrollbar2.Position / 1000; theta := scrollbar3.Position / 1000 * 3.14; MaskEdit1.Text := floattostr(radius); MaskEdit2.Text := floattostr(theta * 180 / 3.14); Pole1.Up.SetVector(cos(theta),sin(theta),0); Pole1.Nodes[1].Y := radius; Pole2.Up.SetVector(cos(theta),-sin(theta),0); Pole2.Nodes[1].Y := radius; Series1.Clear; LineSeries1.Clear; if (point1 = 1) then begin while pipi <= 1.01 do begin Omega := pipi*355/113; Re1 := cos(2*Omega) + 2*cos(Omega) +1 ; Im1 := sin(2*Omega) + 2*sin(Omega);

Page 20: Laporan  (Autosaved)

Re2 := cos(2*Omega) - 2*radius*cos(theta)*cos(Omega) + radius*radius; Im2 := sin(2*Omega) - 2*radius*cos(theta)*sin(Omega); H_Omega := sqrt( (sqr(Re1)+sqr(Im1)) / (sqr(Re2)+sqr(Im2)) ); //H_Fase := arctan2(Im1,Re1) - arctan2(Im2,Re2); Series1.AddXY(pipi,H_Omega); LineSeries1.AddXY(pipi,H_Fase); pipi := pipi + resolusi; end; end else if (point1 = 2) then begin while pipi <= 1.01 do begin Omega := pipi*355/113; Re1 := cos(2*Omega) - 2*cos(Omega) +1 ; Im1 := sin(2*Omega) - 2*sin(Omega); Re2 := cos(2*Omega) - 2*radius*cos(theta)*cos(Omega) + radius*radius; Im2 := sin(2*Omega) - 2*radius*cos(theta)*sin(Omega); H_Omega := sqrt( (sqr(Re1)+sqr(Im1)) / (sqr(Re2)+sqr(Im2)) ); //H_Fase := arctan2(Im1,Re1) - arctan2(Im2,Re2); Series1.AddXY(pipi,H_Omega); LineSeries1.AddXY(pipi,H_Fase); pipi := pipi + resolusi; end; end else if (point1 = 3) then begin while pipi <= 1.01 do begin Omega := pipi*355/113; Re1 := cos(2*Omega) - 1 ; Im1 := sin(2*Omega) ; Re2 := cos(2*Omega) - 2*radius*cos(theta)*cos(Omega) + radius*radius; Im2 := sin(2*Omega) - 2*radius*cos(theta)*sin(Omega); H_Omega := sqrt( (sqr(Re1)+sqr(Im1)) / (sqr(Re2)+sqr(Im2)) ); //H_Fase := arctan2(Im1,Re1) - arctan2(Im2,Re2); Series1.AddXY(pipi,H_Omega); LineSeries1.AddXY(pipi,H_Fase); pipi := pipi + resolusi; end; end else if (point1 = 4) then begin zero1.Up.SetVector(cos(theta),sin(theta),0); zero2.Up.SetVector(cos(theta),-sin(theta),0); while pipi <= 1.01 do begin Omega := pipi*355/113; Re1 := cos(2*Omega) - 2*cos(theta)*cos(Omega) +1 ; Im1 := sin(2*Omega) - 2*cos(theta)*sin(Omega); Re2 := cos(2*Omega) - 2*radius*cos(theta)*cos(Omega) + radius*radius; Im2 := sin(2*Omega) - 2*radius*cos(theta)*sin(Omega);

Page 21: Laporan  (Autosaved)

H_Omega := sqrt( (sqr(Re1)+sqr(Im1)) / (sqr(Re2)+sqr(Im2)) ); // H_Fase := arctan2(Im1,Re1) - arctan2(Im2,Re2); Series1.AddXY(pipi,H_Omega); LineSeries1.AddXY(pipi,H_Fase); pipi := pipi + resolusi; end; end; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if Checkbox1.Checked then begin chart1.Width := 492; chart2.Visible := true; scrollbar1.Left:=487; end else begin chart1.Width := 985; chart2.Visible := false; scrollbar1.Left:=9; end; end; procedure TForm1.FormCreate(Sender: TObject); begin // Chart1.LeftAxis.Maximum := 100 - scrollbar1.Position; pipi := 0; radius := scrollbar2.Position / 1000; theta := scrollbar3.Position / 1000 * 3.14; MaskEdit1.Text := floattostr(radius); MaskEdit2.Text := floattostr(theta * 180 / 3.14); Chart1.LeftAxis.Maximum := 101 - scrollbar1.Position; Pole1.Up.SetVector(cos(theta),sin(theta),0); Pole1.Nodes[1].Y := radius; Pole2.Up.SetVector(cos(theta),-sin(theta),0); Pole2.Nodes[1].Y := radius; Series1.Clear; end; procedure TForm1.ScrollBar1Change(Sender: TObject); begin // Chart1.LeftAxis.Maximum := 101 - scrollbar1.Position; Chart2.LeftAxis.Maximum := 101 - scrollbar1.Position; Chart2.LeftAxis.Minimum := -Chart2.LeftAxis.Maximum; end; procedure TForm1.ScrollBar2Change(Sender: TObject);

Page 22: Laporan  (Autosaved)

begin olahdata; end; procedure TForm1.ScrollBar3Change(Sender: TObject); begin olahdata; end; procedure TForm1.TabSheet1Show(Sender: TObject); begin zero1.Up.SetVector(-1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(-1,0,0); zero2.NodeSize := 0.2; zero2.Nodes[1].Y := 1; point1 := 1; olahdata; end; procedure TForm1.TabSheet2Show(Sender: TObject); begin zero1.Up.SetVector(1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(1,0,0); zero2.NodeSize := 0.2; zero2.Nodes[1].Y := 1; point1 := 2; olahdata; end; procedure TForm1.TabSheet3Show(Sender: TObject); begin zero1.Up.SetVector(1,0,0); zero1.NodeSize := 0.1; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(-1,0,0); zero2.NodeSize := 0.1; zero2.Nodes[1].Y := 1; point1 := 3; olahdata; end; procedure TForm1.TabSheet4Show(Sender: TObject); begin zero1.Up.SetVector(cos(theta),sin(theta),0); zero1.NodeSize := 0.13; zero1.Nodes[1].Y := 1; zero2.Up.SetVector(cos(theta),-sin(theta),0); zero2.NodeSize := 0.13; zero2.Nodes[1].Y := 1; point1 := 4; olahdata; end; end.