Anda di halaman 1dari 8

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 Tujuan yang ingin dicapai dari percobaan II ini
antara lain :
Abstrak Pada praktikum Modul II ini dilakukan beberapa
percobaan yaitu melakukan pem-filter-an FIR realtime a. Mempelajari bagaimana
dengan 3 buah metode yang berbeda memanfaattkan aplikasi mengimplementasikan dan melakukan
Dec-C++. Cara pertama yaitu membuat m-file untuk simulasi filter FIR realtime menggunakan
simulasi filter realtime FIR dengan metoda biasa, kedua yaitu Dev-C++.
membuat m-file untuk simulasi filter realtime FIR dengan
b. Mengenal model bilangan fraksional
buffer sirkular, dan ketiga yaitu membuat m-file untuk
untuk prosesor DSP fixed point.
simulasi filter realtime FIR dengan bilangan fraksional.
c. Mengimplementasikan dan melakukan
Kata kunci : Dev-C++, Buffer sirkular, Bilangan
simulasi filter FIR realtime dengan
fraksional.
bilangan fraksional menggunakan Dev-
C++.
1. PENDAHULUAN
Filter FIR adalah salah satu tipe dari filter digital 2. STUDI PUSTAKA
yang dipakai pada aplikasi Digital Signal
Processing (DSP). FIR kepanjangan dari Finite a. FILTER FIR REALTIME
Impulse Response. Disebut respons impulsnya
terbatas (finite) karena tidak ada feedback didalam Sistem realtime disebut juga dengan sistem waktu
filter, jika anda memasukkan sebuah impulse nyata. Sistem realtime harus dapat memberikan
(yaitu sebuah sinyal ‘1’ diikuti dengan banyak respon yang tepat dalam batasan waktu yang
sinyal ‘0’), sinyal nol akan keluar setelah sinyal 1 ditentukan. Realtime adalah metode realisasi,
melewati semua delay line dengan koefisiennya. sehingga setiap tugas spesifik dapat dikerjakan
pada waktu spesifik dengan siklus clock sistem.
Keuntungan filter FIR antara lain adalah stabil dan
memiliki phasa yang linier. Sedangkan
Pada modul sebelumnya kita menggunakan filter
kerugiannya adalah filter FIR terkadang
FIR offline (non realtime). Terdapat pebedaaan di
membutuhkan lebih banyak memory dan/atau
antara algoritma sistem realtime dan algoritma
perhitungan untuk mencapai karakteristik respon
sistem offline. Ide dasar dari algoritma realtime
filter yang diberikan. Dan juga, respon tertentu
adalah hanya input saat ini dan yang telah lewat
tidak mudah dilaksanakan untuk
yang tersedia. Kita tidak memiliki akses kepada
diimplementasikan dengan filter FIR.
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
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
sampel output yang merupakan hasil pengolahan Pada format ini, MSB adalah sign bit yang diikuti
sinyal digital (bisa berupa filter). Artinya proses oleh suatu titik imajiner, dan kemudian 31 bit atau
komputasi pengolahan sinyal digital untuk tiap mantisa yang dinormalisasi ke 1. Bilangan Q31
sampel haruslah dapat diselesaikan sebelum memiliki kisaran desimal antara –1 sampai 0.9999
sampel berikutnya diambil. (0x8000h sampai 0x7FFFh). Bilangan fraksional h
dapat direpresentasikan sebagai atau h= -b020+
Karakteristik simulasi realtime-like adalah sebagai b12-1 + b22-2 + ... + bN2-N, dimana h adalah
berikut: bilangan fraksional dan b adalah biner 1 atau 0.
1. Loop untuk kesesuaian dengan kelakuan clock Konversi bilangan real ke bilangan fraksional
2. Akses hanya kepada input yang telah ada pada dilakukan dengan
array input koef=round(2^31*koef);
3. Update output setiap siklus loop Untuk konversi bilangan fraksional ke bilangan
real dilakukan dengan
b. ISU NUMERIK koef=koef / 2^31;
Sub-bab pada percobaan ini, yaitu :
Kebanyakan prosesor DSP merupakan prosesor
fixed point. Prosesor floating point jauh lebih  Percobaan membuat m-file untuk
rumit dari prosesor fixed point sehingga simulasi pem-filter-an realtime FIR.
membutuhkan harga yang lebih mahal. Untuk
 Percobaan membuat m-file untuk
membuat sistem yang cost effective maka prosesor
simulasi pem-filer-an realtime FIR
DSP direalisasikan dengan prosesor fixed point.
dengan buffer sirkular.
Prosesor fixed point secara natural set intruksi
dasar matematiknya hanya mendukung operasi  Percobaan membuat m-file untuk
bilangan bulat (integer) simulasi pem-filter-an realtime FIR
dengan bilangan fraksional.
Memahami isu numerik adalah sangat penting
untuk memperoleh performansi terbaik dari 3. METODOLOGI
sebuah prosesor fixed-point. Masalahnya adalah
Pada percobaan 1 ini, alat dan bahan yang
kebanyakan sinyal dan juga koefisien bernilai
digunakan yaitu :
bilangan real. Sehingga operasi pengolahan sinyal
merupakan operasi perkalian dan penjumlahan 1. 1 unit computer
bilangan real. Namun DSP yang kita gunakan
2. Software MATLAB
merupakan prosesor fixed point.
Memulai percobaan
Dari percobaan sebelumnya Anda telah
memperoleh koefisien filter untuk melakukan pem- Pastikan komputer yang akan
filter-an. Kita akan menggunakannya sebagai digunakan berfungsi dengan normal
koefisien filter yang akan diterapkan di BF561. dan tidak ada masalah apapun.
Nantinya kita akan mencoba program filter dalam
bahasa pemograman C ataupun Assembly, jadi
kita dapat menuliskan koefisien tersebut di
program kita, seperti berikut : Software Matlab sudah terinstal
int koef={a1,a2,a3,a4}; dalam komputer.

Perhatikan bahwa koefisien harus ditulis dalam


format Q32 dan jangan lupa bahwa prosesor yang
kita gunakan adalah prosesor fixed-point 32 bit 1. Percobaan membuat m-file untuk simulasi
sehingga setiap bilangan direpresentasikan dalam pem-filter-an realtime FIR.
32 bit dengan kisaran –2-31 sampai 231-1 atau –
2147483648 – 2147483647 untuk –1 sampai 1. Pada bagian ini dibuat m-file untuk melakukan
Q31 adalah salah satu contoh format Q, yaitu pemfilteran realtime FIR dengan Dev-C++. Fungsi
penulisan bilangan untuk bilangan fixed-point. internal filter menggunakan metoda non relatime,
Pada BF561 yang merupakan prosesor fixed-point karena menghitung sinyall output dengan sinyal input
32 bit, maka untuk N=32, digunakan format Q31. yang lengkap. Kemudian dibandingkan hasil simuasi
dengan fungsi internal filter
Format Q31 ini merepresentasikan fraksional 31
bit.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


2. Percobaan membuat m-file untuk simulasi selanjutnya dilakukan plot grafik dengan
pem-filter-an realtime FIR dengan buffer menggunakan Microsoft Office Excel. Hasilnya
sirkular. yaitu sebagai berikut :
Gambar 1 Filter FIR realtime
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.

3. Percobaan membuat m-file untuk simulasi


pem-filter-an realtime FIR dengan
bilangan fraksional.

Pada bagian ini dilakukan modfikasi hasil percobaan Gambar 2 Filter FIR realtime dengan MATLAB
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.

Mengakhiri Percobaan Dapat terlihat bahwa hasil sinyal hasil konvolusi


yang diperoleh dari source code (Dev-C++)
Sebelum keluar dati ruang praktikum, dirapikan meja dengan hasil konvolusi yang diperoleh dari
praktikum dan dimatikan komuter dati jala-jala listrik.
MATLAB. Hal ini membuktikan bahwa source
code yang telah dibuat benar.
 Percobaan membuat m-file untuk simulasi
Dimatikan MCB dimeja praktikum sebelum pem-filer-an realtime FIR dengan buffer
meninggalkan ruangan. sirkular.
Pada praktikum ini dilakukan modifikasi hasil
percobaan pertama dengan menggunakan metode
buffering sirkular. Dengan metoda ini setiap kali
Diperiksa lembar penggunaan meja. 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
Dipastikan asisten telah menandatangani catatan menggunakan Excel.
percobaan kali ini pada Buku Catatan Laboratorium.
Perbedaan source code untuk buffer sirkular
dengan source code sebelumnya yaitu adanya
4. HASIL DAN ANALISIS variable k yang di assign dengan nilai 0 serta
adanya perhitungan filter dengan circular buffer.
 Percobaan membuat m-file untuk simulasi
Berikut cuplikan source code :
pem-filer-an realtime FIR.
int i,j,k=0;
Pada percobaan ini dibuat terlebih dahulu m-file
untuk filter FIR realtime dengan mengcopy source float filter(float input) {
code yang sudah ada pada modul praktikum. float hasil;
Source kode tersebut berisi fungsi konvolusi dari //buffering
sinyal total (modul 1) dengan filter low-pass. buffer[k] = input;
Kemudian dijalankan dengan aplikasi Dev-C++.
Hasilnya yaitu berupa file text yang berisi nilai- ((perhitungan filter dengan circular
nilai koefisien filter. Dari koefisien filter tersebut buffer))
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
hasil = 0; hasil = hasil +
for(j=0; j<BUFFERLENGHT; j++) { buffer[(j+k)%BUFFERLENGHT] *
hasil = hasil + round(koef_filter[j]*pow(2,31));
buffer[(j+k)%BUFFERLENGHT] * }
koef_filter[j]; if (k<=0) {
} k=k+BUFFERLENGHT-1;
if (k<=0) { }
k=k+BUFFERLENGHT-1; else {
} k--;
else { };
k--;
}; return hasil;
}
return hasil;
} Setelah dilakukan penambahan source code diatas,
maka diperoleh plot grafik sebagai berikut :
Setelah ditambahkan source code diatas
Gambar 4 Filter FIR realtime dengan metode bilangan
menghasilkan plot grafik sebagai berikut : fraksional
Gambar 3 Filter FIR realtime dengan metoda buffer
sirkular

Terlihat bahwa plot grafik filter yang dihasilkan


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

 Percobaan membuat m-file untuk simulasi 5. KESIMPULAN


pem-filter-an realtime FIR dengan bilangan
Dari percobaan didapatkan kesimpulan :
fraksional.
 Filter FIR realtime dapat disimulasikan
Pada percobaan ketiga ini dilakukan modifikasi
dan dapat diimplementasikan dengan
dari source code percobaan sebelumnya dengan
membuat source code menggunakan Dev-
menggunakan bilangan fraksional 32 bit. Semua
C++.
koefisien filter direpresentasikan dengan bilangan
fraksional. Dilakukan peng-edit-an source code  Filter FIR realtime yang diperoleh dengan
pada bagian sebelumnya dengan mengubah isi MATLAB, Dev-C++, metoda buffer
fungsi filter, koefisien serta buffer menjadi tipe sirkular, dan metode bilangan fraksioal
integer. Hasil nilai-nilai pada file text dari program menampilkan output hasil konvolusi yang
kemudian dibuat kedalam grafik dengan sama.
menggunakan excel. Metode bilangan yang
digunakan pada percobaan ini yaitu dengan  Kelebihan penggunaan filter dengan
mengedit soutce code yang telah ada. Yaitu metoda buffer sirkular yaitu dapat
menambahkan perhitungan filter dengan bilangan menghemat memori. Sedangkan
fraksional sebagai berikut : penggunaan metode bilangan fraksional
digunakan karena adanya isu numeric
((perhitungan filter dengan bilangan pada prosessor fixed point.
fraksional))
hasil = 0;
for(j=0; j<BUFFERLENGHT; j++) {

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


DAFTAR PUSTAKA [2]. Proakis, Jhon. Manolakis, Dimitris, Digital Signal
Processing, principles, algoritm, and application,
[1]. Mervin T Hutabarat, Praktikum Pengolahan Sinyal
Prentice Hall, 1998
Digital Laboratorium Dasar Teknik Elektro
ITB,Bandung, 2015.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


LAMPIRAN
Source code }
Percobaan 1 //input disimpan di buffer 0
#include <cstdlib> buffer[0] = input;
#include <iostream>
#include <stdio.h> // perhitungan filter
#include <math.h> hasil = 0;
for(j = 0; j < BUFFERLENGTH;
using namespace std; j++) {
hasil = hasil + buffer[j]
// panjang tap filter * koef_filter[j];
#define BUFFERLENGTH 33 }
#define LENGTH 100
#define PI 3.14159265 // kembalikan hasil pemfilteran
return hasil;
//definisi koefisien fllter }
float koef_filter[BUFFERLENGTH] = {-
0.00152884475502033, - int main(int argc, char *argv[])
0.00190413765156085 , - {
0.00251201020053917 , - FILE *pFile;
0.00315172285923541 ,- //siapkan input
0.00338157483002662, - for(i=0; i < LENGTH; i++) {
0.00256899869677061, x[i] =
1.43303986898520e-18, (sin(2*PI*200/16000*i)+sin(2*PI*1000/
0.00497037076557457 , 16000*i)+sin(2*PI*5000/16000*i)) / 3;
0.0127558532986817, }
0.0233996310513060
,0.0364901801525690 //inisialisasi buffer dengan
,0.0511553725692717 , nol
0.0661431077396454 , for(i=0; i < BUFFERLENGTH; i++)
0.0799794721992498 {
,0.0911792726013163 buffer[i] = 0;
,0.0984722196424889 }
,0.101003617946099
,0.0984722196424889 //loop mengambil input tiap
,0.0911792726013163 sampel dan menaruhnya pada output
,0.0799794721992498 for(i=0; i < LENGTH; i++) {
,0.0661431077396454 y[i] = filter(x[i]);
,0.0511553725692717 }
,0.0364901801525690
,0.0233996310513060 //tulis output ke file
,0.0127558532986817 pFile = fopen("output.txt",
,0.00497037076557457 "w");
,1.43303986898520e-18 ,- for(i=0; i < LENGTH; i++) {
0.00256899869677061 ,- fprintf(pFile,"%4.4f\n",
0.00338157483002662 ,- y[i]);
0.00315172285923541 ,- }
0.00251201020053917 ,- fclose(pFile);
0.00190413765156085 ,- return EXIT_SUCCESS;
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];
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6
Percobaan 2 //perhitungan filter dengan
circular buffer
hasil = 0;
#include <cstdlib> for(j=0; j<BUFFERLENGHT; j++) {
#include <iostream> hasil = hasil +
#include <stdio.h> buffer[(j+k)%BUFFERLENGHT] *
#include <math.h> koef_filter[j];
}
using namespace std; if (k<=0) {
k=k+BUFFERLENGHT-1;
//panjang tap filter }
#define BUFFERLENGHT 33 else {
#define LENGHT 100 k--;
#define PI 3.14159265 };

//definisi koefisien filter return hasil;


float koef_filter [BUFFERLENGHT] = {- }
0.00152884475502033, -
0.00190413765156085 , - int main(int argc, char *argv[]) {
0.00251201020053917 , - FILE *pFILE;
0.00315172285923541 ,-
0.00338157483002662, - //siapkan input
0.00256899869677061, for(i=0; i<LENGHT; i++) {
1.43303986898520e-18, x[i] =
0.00497037076557457 , (sin(2*PI*i*200/16000) +
0.0127558532986817, sin(2*PI*i*1000/16000) +
0.0233996310513060 sin(2*PI*i*5000/16000))/3;
,0.0364901801525690 }
,0.0511553725692717 ,
0.0661431077396454 , //inisialisasi buffer dengan nol
0.0799794721992498 for(i=0; i<BUFFERLENGHT; i++) {
,0.0911792726013163 buffer[i] = 0;
,0.0984722196424889 }
,0.101003617946099
,0.0984722196424889 //loop ambil input tial sampel
,0.0911792726013163 dan menaruhnya pada output
,0.0799794721992498 for(i=0; i<LENGHT; i++) {
,0.0661431077396454 y[i] = filter(x[i]);
,0.0511553725692717 }
,0.0364901801525690
,0.0233996310513060
,0.0127558532986817 //tulis ouput ke file
,0.00497037076557457 pFILE = fopen("output2.txt","w");
,1.43303986898520e-18 ,- for(i = 0; i < LENGHT; i++) {
0.00256899869677061 ,-
0.00338157483002662 ,- fprintf(pFILE,"%4.4f\n",y[i]);
0.00315172285923541 ,- }
0.00251201020053917 ,- fclose(pFILE);
0.00190413765156085 ,- return EXIT_SUCCESS;
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;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7


Percobaan 3 //perhitungan filter dengan
bilangan fraksional
hasil = 0;
#include <cstdlib> for(j=0; j<BUFFERLENGHT; j++) {
#include <iostream> hasil = hasil +
#include <stdio.h> buffer[(j+k)%BUFFERLENGHT] *
#include <math.h> round(koef_filter[j]*pow(2,31));
}
using namespace std; if (k<=0) {
k=k+BUFFERLENGHT-1;
//panjang tap filter }
#define BUFFERLENGHT 33 else {
#define LENGHT 100 k--;
#define PI 3.14159265 };

//definisi koefisien filter return hasil;


float koef_filter [BUFFERLENGHT] = {- }
0.00152884475502033, -
0.00190413765156085 , - int main(int argc, char *argv[]) {
0.00251201020053917 , - FILE *pFILE;
0.00315172285923541 ,-
0.00338157483002662, - //siapkan input
0.00256899869677061, for(i=0; i<LENGHT; i++) {
1.43303986898520e-18, x[i] =
0.00497037076557457 , (sin(2*PI*i*200/16000) +
0.0127558532986817, sin(2*PI*i*1000/16000) +
0.0233996310513060 sin(2*PI*i*5000/16000))/3;
,0.0364901801525690 }
,0.0511553725692717 ,
0.0661431077396454 , //inisialisasi buffer dengan nol
0.0799794721992498 for(i=0; i<BUFFERLENGHT; i++) {
,0.0911792726013163 buffer[i] = 0;
,0.0984722196424889 }
,0.101003617946099
,0.0984722196424889 //loop ambil input tial sampel
,0.0911792726013163 dan menaruhnya pada output
,0.0799794721992498 for(i=0; i<LENGHT; i++) {
,0.0661431077396454 y[i] = filter(x[i]);
,0.0511553725692717 }
,0.0364901801525690
,0.0233996310513060 //konversi output menjadi float
,0.0127558532986817 for(i=0; i<LENGHT; i++) {
,0.00497037076557457 yr[i] = y[i];
,1.43303986898520e-18 ,- yr[i] = yr[i]/pow(2,31);
0.00256899869677061 ,- }
0.00338157483002662 ,-
0.00315172285923541 ,- //tulis ouput ke file
0.00251201020053917 ,- pFILE = fopen("output3.txt","w");
0.00190413765156085 ,- for(i = 0; i < LENGHT; i++) {
0.00152884475502033};
fprintf(pFILE,"%4.4f\n",yr[i]);
float buffer[BUFFERLENGHT]; }
float x[LENGHT]; fclose(pFILE);
float y[LENGHT]; return EXIT_SUCCESS;
float yr[LENGHT]; }

int i,j,k=0;

float filter(float input) {


float hasil;
//buffering
buffer[k] = input;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8

Anda mungkin juga menyukai