• Tidak ada hasil yang ditemukan

EL3110_2_13213060

N/A
N/A
Protected

Academic year: 2021

Membagikan "EL3110_2_13213060"

Copied!
8
0
0

Teks penuh

(1)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

MODUL II SIMULASI FILTER FIR REALTIME

Rosana Dewi Amelinda (13213060)

Asisten : Kalam A. L.(13212090) Tanggal Percobaan: 21/9/2015 EL3110-Praktikum Pengolahan Sinyal Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Abstrak Pada praktikum Modul II ini dilakukan beberapa

percobaan yaitu melakukan pem-filter-an FIR realtime

dengan 3 buah metode yang berbeda memanfaattkan aplikasi

Dec-C++. Cara pertama yaitu membuat m-file untuk

simulasi filter realtime FIR dengan metoda biasa, kedua yaitu

membuat m-file untuk simulasi filter realtime FIR dengan

buffer sirkular, dan ketiga yaitu membuat m-file untuk

simulasi filter realtime FIR dengan bilangan fraksional.

Kata kunci : Dev-C++, Buffer sirkular, Bilangan

fraksional.

1. PENDAHULUAN

Filter FIR adalah salah satu tipe dari filter digital yang dipakai pada aplikasi Digital Signal Processing (DSP). FIR kepanjangan dari Finite Impulse Response. Disebut respons impulsnya terbatas (finite) karena tidak ada feedback didalam filter, jika anda memasukkan sebuah impulse (yaitu sebuah sinyal ‘1’ diikuti dengan banyak sinyal ‘0’), sinyal nol akan keluar setelah sinyal 1 melewati semua delay line dengan koefisiennya. Keuntungan filter FIR antara lain adalah stabil dan memiliki phasa yang linier. Sedangkan kerugiannya adalah filter FIR terkadang membutuhkan lebih banyak memory dan/atau perhitungan untuk mencapai karakteristik respon filter yang diberikan. Dan juga, respon tertentu

tidak mudah dilaksanakan untuk

diimplementasikan dengan filter FIR.

Tujuan yang ingin dicapai dari percobaan II ini antara lain :

a. Mempelajari bagaimana

mengimplementasikan dan melakukan simulasi filter FIR realtime menggunakan Dev-C++.

b. Mengenal model bilangan fraksional untuk prosesor DSP fixed point.

c. Mengimplementasikan dan melakukan simulasi filter FIR realtime dengan bilangan fraksional menggunakan Dev-C++.

2. S

TUDI

P

USTAKA

a. FILTER FIR REALTIME

Sistem realtime disebut juga dengan sistem waktu nyata. Sistem realtime harus dapat memberikan respon yang tepat dalam batasan waktu yang ditentukan. Realtime adalah metode realisasi, sehingga setiap tugas spesifik dapat dikerjakan pada waktu spesifik dengan siklus clock sistem. Pada modul sebelumnya kita menggunakan filter FIR offline (non realtime). Terdapat pebedaaan di antara algoritma sistem realtime dan algoritma sistem offline. Ide dasar dari algoritma realtime adalah hanya input saat ini dan yang telah lewat yang tersedia. Kita tidak memiliki akses kepada input yang akan datang berikutnya. Pada modul sebelumnya fungsi filter yang digunakan memiliki akses kepada keseluruhan sampel pada sinyal input.

Algoritma filter realtime diperlukan untuk implementasi filter realtime dengan hardware DSP. Untuk keperluan ini maka diperlukan simulasi algoritma filter realtime-like dan dibandingkan hasilnya dengan algoritma filter offline.

Sistem DSP adalah sistem waktu diskrit yang mengambil sampel sinyal input dan menghasilkan sampel sinyal output dengan frekuensi sampling tertentu yang konstan. Artinya pada sistem DSP realtime, pada rentang waktu antar sampling, haruslah dapat dilakukan proses perhitungan

(2)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2 sampel output yang merupakan hasil pengolahan

sinyal digital (bisa berupa filter). Artinya proses komputasi pengolahan sinyal digital untuk tiap sampel haruslah dapat diselesaikan sebelum sampel berikutnya diambil.

Karakteristik simulasi realtime-like adalah sebagai berikut:

1. Loop untuk kesesuaian dengan kelakuan clock 2. Akses hanya kepada input yang telah ada pada array input

3. Update output setiap siklus loop b. ISU NUMERIK

Kebanyakan prosesor DSP merupakan prosesor fixed point. Prosesor floating point jauh lebih rumit dari prosesor fixed point sehingga membutuhkan harga yang lebih mahal. Untuk membuat sistem yang cost effective maka prosesor DSP direalisasikan dengan prosesor fixed point. Prosesor fixed point secara natural set intruksi dasar matematiknya hanya mendukung operasi bilangan bulat (integer)

Memahami isu numerik adalah sangat penting untuk memperoleh performansi terbaik dari sebuah prosesor fixed-point. Masalahnya adalah kebanyakan sinyal dan juga koefisien bernilai bilangan real. Sehingga operasi pengolahan sinyal merupakan operasi perkalian dan penjumlahan bilangan real. Namun DSP yang kita gunakan merupakan prosesor fixed point.

Dari percobaan sebelumnya Anda telah memperoleh koefisien filter untuk melakukan

pem-filter-an. Kita akan menggunakannya sebagai

koefisien filter yang akan diterapkan di BF561. Nantinya kita akan mencoba program filter dalam bahasa pemograman C ataupun Assembly, jadi kita dapat menuliskan koefisien tersebut di program kita, seperti berikut :

int koef={a1,a2,a3,a4};

Perhatikan bahwa koefisien harus ditulis dalam format Q32 dan jangan lupa bahwa prosesor yang kita gunakan adalah prosesor fixed-point 32 bit sehingga setiap bilangan direpresentasikan dalam 32 bit dengan kisaran –2-31 sampai 231-1 atau – 2147483648 – 2147483647 untuk –1 sampai 1. Q31 adalah salah satu contoh format Q, yaitu penulisan bilangan untuk bilangan fixed-point. Pada BF561 yang merupakan prosesor fixed-point 32 bit, maka untuk N=32, digunakan format Q31. Format Q31 ini merepresentasikan fraksional 31 bit.

Pada format ini, MSB adalah sign bit yang diikuti oleh suatu titik imajiner, dan kemudian 31 bit atau mantisa yang dinormalisasi ke 1. Bilangan Q31 memiliki kisaran desimal antara –1 sampai 0.9999 (0x8000h sampai 0x7FFFh). Bilangan fraksional h dapat direpresentasikan sebagai atau h= -b020+ b12-1 + b22-2 + ... + bN2-N, dimana h adalah bilangan fraksional dan b adalah biner 1 atau 0. Konversi bilangan real ke bilangan fraksional dilakukan dengan

koef=round(2^31*koef);

Untuk konversi bilangan fraksional ke bilangan real dilakukan dengan

koef=koef / 2^31;

Sub-bab pada percobaan ini, yaitu :

 Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR.  Percobaan membuat m-file untuk

simulasi pem-filer-an realtime FIR dengan buffer sirkular.

 Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR dengan bilangan fraksional.

3. M

ETODOLOGI

Pada percobaan 1 ini, alat dan bahan yang digunakan yaitu :

1. 1 unit computer 2. Software MATLAB Memulai percobaan

1. Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR.

Pastikan komputer yang akan

digunakan berfungsi dengan normal

dan tidak ada masalah apapun.

Software Matlab sudah terinstal

dalam komputer.

Pada bagian ini dibuat m-file untuk melakukan pemfilteran realtime FIR dengan Dev-C++. Fungsi internal filter menggunakan metoda non relatime, karena menghitung sinyall output dengan sinyal input

yang lengkap. Kemudian dibandingkan hasil simuasi dengan fungsi internal filter

(3)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3 2. Percobaan membuat m-file untuk simulasi

pem-filter-an realtime FIR dengan buffer sirkular.

3. Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR dengan bilangan fraksional.

Mengakhiri Percobaan

4. HASIL DAN ANALISIS

 Percobaan membuat m-file untuk simulasi pem-filer-an realtime FIR.

Pada percobaan ini dibuat terlebih dahulu m-file untuk filter FIR realtime dengan mengcopy source code yang sudah ada pada modul praktikum. Source kode tersebut berisi fungsi konvolusi dari sinyal total (modul 1) dengan filter low-pass. Kemudian dijalankan dengan aplikasi Dev-C++. Hasilnya yaitu berupa file text yang berisi nilai-nilai koefisien filter. Dari koefisien filter tersebut

selanjutnya dilakukan plot grafik dengan menggunakan Microsoft Office Excel. Hasilnya yaitu sebagai berikut :

Gambar 1 Filter FIR realtime

Gambar 2 Filter FIR realtime dengan MATLAB

Dapat terlihat bahwa hasil sinyal hasil konvolusi yang diperoleh dari source code (Dev-C++) dengan hasil konvolusi yang diperoleh dari MATLAB. Hal ini membuktikan bahwa source code yang telah dibuat benar.

 Percobaan membuat m-file untuk simulasi pem-filer-an realtime FIR dengan buffer sirkular.

Pada praktikum ini dilakukan modifikasi hasil percobaan pertama dengan menggunakan metode buffering sirkular. Dengan metoda ini setiap kali didapatkan sampel input, maka sampe-sampel terdahulu pada buffer yang tidak perlu digeser. Hasil nilai-nilai pada file text dari program kemudian dibuat kedalam grafik dengan menggunakan Excel.

Perbedaan source code untuk buffer sirkular dengan source code sebelumnya yaitu adanya variable k yang di assign dengan nilai 0 serta adanya perhitungan filter dengan circular buffer. Berikut cuplikan source code :

int i,j,k=0;

float filter(float input) { float hasil;

//buffering

buffer[k] = input;

((perhitungan filter dengan circular buffer))

Pada bagian ini dilakukan modfikasi hasil percobaan sebelumnya menggunakan metode buffering sirkular. dengan metode ini maka setiap kali didapatkan sampel

input, maka sampel-sampel terdahulu pada buffer tidak perlu digeser. Setelah diperoleh hasilnya kemudian dibandingkan hasil simulasi dengan hasil

sebelumnya.

Pada bagian ini dilakukan modfikasi hasil percobaan sebelumnya menggunakan bilangan fraksional 32 bit.

Semua koefisien filter direpresentaiskan dengan bilangan fraksional. Buffer diisi dengan sampel input

yang telah dikonversikan dari bilangan real menjad bilangan fraksional. Dilakukan modifikasi perkalian bilangan real menjadi perkalian bilangan fraksional. Lalu

disimpan sampel dinyal output yang dihasilkan dengan terlebih dahulu mengonversikan bilangan fraksional

menjadi bilanga real. Setelah diperoleh hasilnya kemudian dibandingkan hasil simulasi dengan hasil

sebelumnya.

Sebelum keluar dati ruang praktikum, dirapikan meja praktikum dan dimatikan komuter dati jala-jala listrik.

Dimatikan MCB dimeja praktikum sebelum meninggalkan ruangan.

Diperiksa lembar penggunaan meja.

Dipastikan asisten telah menandatangani catatan percobaan kali ini pada Buku Catatan Laboratorium.

(4)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 hasil = 0; for(j=0; j<BUFFERLENGHT; j++) { hasil = hasil + buffer[(j+k)%BUFFERLENGHT] * koef_filter[j]; } if (k<=0) { k=k+BUFFERLENGHT-1; } else { k--; }; return hasil; }

Setelah ditambahkan source code diatas menghasilkan plot grafik sebagai berikut :

Gambar 3 Filter FIR realtime dengan metoda buffer sirkular

Terlihat bahwa grafik filter yang dihasilkan dengan metoda buffer sirkular sama dengan grafik filter dengan sebelumnya. Hal ini mengindikasikan bahwa source code yang dibuat telah benar.

 Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR dengan bilangan fraksional.

Pada percobaan ketiga ini dilakukan modifikasi dari source code percobaan sebelumnya dengan menggunakan bilangan fraksional 32 bit. Semua koefisien filter direpresentasikan dengan bilangan fraksional. Dilakukan peng-edit-an source code pada bagian sebelumnya dengan mengubah isi fungsi filter, koefisien serta buffer menjadi tipe integer. Hasil nilai-nilai pada file text dari program kemudian dibuat kedalam grafik dengan menggunakan excel. Metode bilangan yang digunakan pada percobaan ini yaitu dengan mengedit soutce code yang telah ada. Yaitu menambahkan perhitungan filter dengan bilangan fraksional sebagai berikut :

((perhitungan filter dengan bilangan fraksional))

hasil = 0;

for(j=0; j<BUFFERLENGHT; j++) {

hasil = hasil +

buffer[(j+k)%BUFFERLENGHT] * round(koef_filter[j]*pow(2,31)); } if (k<=0) { k=k+BUFFERLENGHT-1; } else { k--; }; return hasil; }

Setelah dilakukan penambahan source code diatas, maka diperoleh plot grafik sebagai berikut :

Gambar 4 Filter FIR realtime dengan metode bilangan fraksional

Terlihat bahwa plot grafik filter yang dihasilkan dengan metoda bilangan fraksional sama dengan grafik filter dengan sebelumnya. Hal ini

mengindikasikan bahwa source code yang dibuat telah benar.

5. K

ESIMPULAN

Dari percobaan didapatkan kesimpulan :

 Filter FIR realtime dapat disimulasikan dan dapat diimplementasikan dengan membuat source code menggunakan Dev-C++.

 Filter FIR realtime yang diperoleh dengan MATLAB, Dev-C++, metoda buffer sirkular, dan metode bilangan fraksioal menampilkan output hasil konvolusi yang sama.

 Kelebihan penggunaan filter dengan metoda buffer sirkular yaitu dapat

menghemat memori. Sedangkan

penggunaan metode bilangan fraksional digunakan karena adanya isu numeric pada prosessor fixed point.

(5)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5

D

AFTAR

P

USTAKA

[1]. Mervin T Hutabarat, Praktikum Pengolahan Sinyal

Digital Laboratorium Dasar Teknik Elektro

ITB,Bandung, 2015.

[2]. Proakis, Jhon. Manolakis, Dimitris, Digital Signal

Processing, principles, algoritm, and application,

Prentice Hall, 1998

(6)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6

LAMPIRAN

Source code

Percobaan 1

#include <cstdlib> #include <iostream> #include <stdio.h> #include <math.h> using namespace std; // panjang tap filter #define BUFFERLENGTH 33 #define LENGTH 100 #define PI 3.14159265

//definisi koefisien fllter

float koef_filter[BUFFERLENGTH] =

{-0.00152884475502033, -0.00190413765156085 , -0.00251201020053917 , -0.00315172285923541 ,-0.00338157483002662, -0.00256899869677061, 1.43303986898520e-18, 0.00497037076557457 , 0.0127558532986817, 0.0233996310513060 ,0.0364901801525690 ,0.0511553725692717 , 0.0661431077396454 , 0.0799794721992498 ,0.0911792726013163 ,0.0984722196424889 ,0.101003617946099 ,0.0984722196424889 ,0.0911792726013163 ,0.0799794721992498 ,0.0661431077396454 ,0.0511553725692717 ,0.0364901801525690 ,0.0233996310513060 ,0.0127558532986817 ,0.00497037076557457 ,1.43303986898520e-18 ,-0.00256899869677061 ,-0.00338157483002662 ,-0.00315172285923541 ,-0.00251201020053917 ,-0.00190413765156085 ,-0.00152884475502033};

float buffer[BUFFERLENGTH]; float x[LENGTH];

float y[LENGTH]; int i, j;

float filter(float input) { float hasil; //buffering for(j = BUFFERLENGTH - 1; j > 0; j--) { buffer[j] = buffer[j-1]; }

//input disimpan di buffer 0 buffer[0] = input;

// perhitungan filter hasil = 0;

for(j = 0; j < BUFFERLENGTH; j++) {

hasil = hasil + buffer[j] * koef_filter[j];

}

// kembalikan hasil pemfilteran return hasil;

}

int main(int argc, char *argv[]) { FILE *pFile; //siapkan input for(i=0; i < LENGTH; i++) { x[i] = (sin(2*PI*200/16000*i)+sin(2*PI*1000/ 16000*i)+sin(2*PI*5000/16000*i)) / 3; }

//inisialisasi buffer dengan nol

for(i=0; i < BUFFERLENGTH; i++) {

buffer[i] = 0; }

//loop mengambil input tiap sampel dan menaruhnya pada output for(i=0; i < LENGTH; i++) {

y[i] = filter(x[i]); }

//tulis output ke file pFile = fopen("output.txt", "w"); for(i=0; i < LENGTH; i++) { fprintf(pFile,"%4.4f\n", y[i]); } fclose(pFile); return EXIT_SUCCESS; }

(7)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7

Percobaan 2

#include <cstdlib> #include <iostream> #include <stdio.h> #include <math.h> using namespace std; //panjang tap filter #define BUFFERLENGHT 33 #define LENGHT 100

#define PI 3.14159265

//definisi koefisien filter

float koef_filter [BUFFERLENGHT] =

{-0.00152884475502033, -0.00190413765156085 , -0.00251201020053917 , -0.00315172285923541 ,-0.00338157483002662, -0.00256899869677061, 1.43303986898520e-18, 0.00497037076557457 , 0.0127558532986817, 0.0233996310513060 ,0.0364901801525690 ,0.0511553725692717 , 0.0661431077396454 , 0.0799794721992498 ,0.0911792726013163 ,0.0984722196424889 ,0.101003617946099 ,0.0984722196424889 ,0.0911792726013163 ,0.0799794721992498 ,0.0661431077396454 ,0.0511553725692717 ,0.0364901801525690 ,0.0233996310513060 ,0.0127558532986817 ,0.00497037076557457 ,1.43303986898520e-18 ,-0.00256899869677061 ,-0.00338157483002662 ,-0.00315172285923541 ,-0.00251201020053917 ,-0.00190413765156085 ,-0.00152884475502033};

float buffer[BUFFERLENGHT]; float x[LENGHT];

float y[LENGHT]; float yr[LENGHT]; int i,j,k=0;

float filter(float input) { float hasil;

//buffering

buffer[k] = input;

//perhitungan filter dengan circular buffer hasil = 0; for(j=0; j<BUFFERLENGHT; j++) { hasil = hasil + buffer[(j+k)%BUFFERLENGHT] * koef_filter[j]; } if (k<=0) { k=k+BUFFERLENGHT-1; } else { k--; }; return hasil; }

int main(int argc, char *argv[]) { FILE *pFILE; //siapkan input for(i=0; i<LENGHT; i++) { x[i] = (sin(2*PI*i*200/16000) + sin(2*PI*i*1000/16000) + sin(2*PI*i*5000/16000))/3; }

//inisialisasi buffer dengan nol for(i=0; i<BUFFERLENGHT; i++) { buffer[i] = 0;

}

//loop ambil input tial sampel dan menaruhnya pada output

for(i=0; i<LENGHT; i++) { y[i] = filter(x[i]); }

//tulis ouput ke file

pFILE = fopen("output2.txt","w"); for(i = 0; i < LENGHT; i++) { fprintf(pFILE,"%4.4f\n",y[i]); } fclose(pFILE); return EXIT_SUCCESS; }

(8)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8

Percobaan 3

#include <cstdlib> #include <iostream> #include <stdio.h> #include <math.h> using namespace std; //panjang tap filter #define BUFFERLENGHT 33 #define LENGHT 100

#define PI 3.14159265

//definisi koefisien filter

float koef_filter [BUFFERLENGHT] =

{-0.00152884475502033, -0.00190413765156085 , -0.00251201020053917 , -0.00315172285923541 ,-0.00338157483002662, -0.00256899869677061, 1.43303986898520e-18, 0.00497037076557457 , 0.0127558532986817, 0.0233996310513060 ,0.0364901801525690 ,0.0511553725692717 , 0.0661431077396454 , 0.0799794721992498 ,0.0911792726013163 ,0.0984722196424889 ,0.101003617946099 ,0.0984722196424889 ,0.0911792726013163 ,0.0799794721992498 ,0.0661431077396454 ,0.0511553725692717 ,0.0364901801525690 ,0.0233996310513060 ,0.0127558532986817 ,0.00497037076557457 ,1.43303986898520e-18 ,-0.00256899869677061 ,-0.00338157483002662 ,-0.00315172285923541 ,-0.00251201020053917 ,-0.00190413765156085 ,-0.00152884475502033};

float buffer[BUFFERLENGHT]; float x[LENGHT];

float y[LENGHT]; float yr[LENGHT]; int i,j,k=0;

float filter(float input) { float hasil;

//buffering

buffer[k] = input;

//perhitungan filter dengan bilangan fraksional

hasil = 0;

for(j=0; j<BUFFERLENGHT; j++) { hasil = hasil +

buffer[(j+k)%BUFFERLENGHT] * round(koef_filter[j]*pow(2,31)); } if (k<=0) { k=k+BUFFERLENGHT-1; } else { k--; }; return hasil; }

int main(int argc, char *argv[]) { FILE *pFILE; //siapkan input for(i=0; i<LENGHT; i++) { x[i] = (sin(2*PI*i*200/16000) + sin(2*PI*i*1000/16000) + sin(2*PI*i*5000/16000))/3; }

//inisialisasi buffer dengan nol for(i=0; i<BUFFERLENGHT; i++) { buffer[i] = 0;

}

//loop ambil input tial sampel dan menaruhnya pada output

for(i=0; i<LENGHT; i++) { y[i] = filter(x[i]); }

//konversi output menjadi float for(i=0; i<LENGHT; i++) {

yr[i] = y[i];

yr[i] = yr[i]/pow(2,31); }

//tulis ouput ke file

pFILE = fopen("output3.txt","w"); for(i = 0; i < LENGHT; i++) { fprintf(pFILE,"%4.4f\n",yr[i]); } fclose(pFILE); return EXIT_SUCCESS; }

Gambar

Gambar 1 Filter FIR realtime
Gambar 3 Filter FIR realtime dengan metoda buffer  sirkular

Referensi

Dokumen terkait

Dengan menggunakan GUI MATLAB, kita dapat membuat sistem interfacing untuk mengontrol arah gerak robot, serta dengan GUI MATLAB dapat pula menampilkan output video secara

Pada pengujian filter digital FIR dengan metode window Hamming dan Blackman dilakukan simulasi menggunakan Matlab terlebih dahulu, untuk melihat respon frekuensi yang

Persamaan 2.9 adalah persamaan selisih untuk FIR, ini adalah persamaan dalam domain waktu dan menyatakan filter FIR dalam bentuk tidak rekursif yaitu output pada suatu saat,

Berikut ini merupakan contoh program MATLAB yang dapat digunakan untuk mendesain filter dijital lowpass dengan menggunakan filter prototipe Butterworth.. Misal filter dijital

Algoritma filter FIR telah dapat di implementasikan pada FPGA dan output filter telah sesuai dengan spesifikasi yaitu dengan frekuensi cut- off 20KHz, ini

Pada pengujian filter digital FIR dengan metode window Hamming dan Blackman dilakukan simulasi menggunakan Matlab terlebih dahulu, untuk melihat respon frekuensi yang

Kode Matlab untuk analisa kestabilan sistem eksitasi generator dengan pengendali Proporsional (P) menggunakan metoda Ziegler – Nichols dengan pendekatan empiris berdasarkan

• Kernel Select adalah menentukan apakah fungsi mengembalikan nilai Kernel 5x5 atau Kernel 3x3 dalam output kernel yang akan masuk ke input konvolusi dengan image.. Jika kita memasang