Abstrak—Pada praktikum kali ini akan dilakukan Dan juga, respon tertentu tidak mudah dilaksanakan
beberapa percobaan yaitu pertama membuat m-file untuk untuk diimplementasikan dengan filter FIR.
simulasi pem-filteran realtime FIR, percobaan kedua yaitu
dengan membuat m-file untuk simulasi pem-filteran
realtime FIR dengan buffer sirkular, percobaan ketiga
yaitu membuat m-file untuk simulasi pem-filteran realtime
FIR dengan bilangan fraksional. Ketiga percobaan tersebut
akan memanfaatkan aplikasi yang bernama Dev C++.
I. PENDAHULUAN
Gambar 1: Flow Graph Filter FIR orde 3
Pada praktikum percobaan kali ini akan diperkenalkan
sebuah aplikasi yang bernama Dev C++. Dev C++
adalah gabungan sebuah IDE (Integrated Development
Environment) C/C++ yang sudah dilengkapi dengan
y(n)
m
h[m]x[n m]
TDM-GCC Complier (bagian dari GNU Compiler
Collection/GCC). Dev C++ merupakan IDE gratis dan
full featur yang didistribusikan dibawah lisensi GNU
x[n] h[n] y[n]
(General Public License) untuk pemrograman C dan
C++. IDE sendiri adalah suatu lembar kerja terpadu
h[n] {b0 , b1 ,..., bq }
untuk pengembangan program.
Sistem Dev C++ terdiri atas lima fungsi utama :
n0
1. Menulis Program/Source Code
Diperoleh :
2. Mengkompilasi Program (Compile)
3.
4.
Melakukan Pengujian Program (Debugging)
Mengaitkan Object dan Library ke Program
y[n]
bm x[n m]
m
(Linking)
5. Menjalankan Progeam (Running)
Adapun tujuan dari modul ini, sebagai berikut:
Filter FIR adalah salah salah satu tipe dari filter digital 1. Mempelajari bagaimana mengimplementasikan
yang dipakai pada aplikasi Digital Singal Processing dan melakukan simulasi filter FIR realtime
(DSP). FIR kepanjangan dari Finite Impulse Response. menggunakan Dev C++.
Disebut respons impulsnya terbatas (finite) karena tidak
ada feedback didalam filter, jika anda memasukkan 2. Mengenal model bilangan fraksional untuk
sebuah impulse yaitu sebuah sinyal “1” diikuti dengan prosesor DSP fixed point.
banyak sinyal “0”, sinyal nol akan keluar setelah sinyal 3. Mengimplementasikan dan melakukan simulasi
ke-satu melewati semua delay line dengan koefisiennya. filter FIR realtime dengan bilangan fraksional
menggunakan Dev C++.
Keuntungan filter FIR antara lain adalah salah satu tipe
filter digital yang stabil dan memiliki phasa yang linier.
Sedangkan kerugiannya adalah filter FIR terkadang
membutuhkan lebih banyak sekali memory dan
perhitungan untuk mencapai karakteristik respon filter
yang diberikan.
II. LANDASAN TEORITIS 2.2 ISI NUMERIK
Dev C++ adalah gabungan sebuah IDE (Integrated Kebanyakan prosesor DSP merupakan prosesor fixed
Development Environment) C/C++ yang sudah point. Prosesor floating point jauh lebih rumit dari
dilengkapi dengan TDM-GCC Complier (bagian dari prosesor fixed point sehingga membutuhkan harga yang
GNU Compiler Collection/GCC). Dev C++ merupakan lebih mahal. Untuk membuat sistem yang cost effective
IDE gratis dan full featur yang didistribusikan dibawah maka prosesor DSP direalisasikan dengan prosesor fixed
lisensi GNU (General Public License) untuk point. Prosesor fixed point secara natural set intruksi
pemrograman C dan C++. IDE sendiri adalah suatu dasar matematiknya hanya mendukung operasi bilangan
lembar kerja terpadu untuk pengembangan program. bulat (integer).
Sistem Dev C++ terdiri atas lima fungsi utama : Memahami isu numerik adalah sangat penting untuk
memperoleh performansi terbaik dari sebuah prosesor
1. Menulis Program/Source Code fixed-point. Masalahnya adalah kebanyakan sinyal dan
juga koefisien bernilai bilangan real. Sehingga operasi
2. Mengkompilasi Program (Compile) pengolahan sinyal merupakan operasi perkalian dan
3. Melakukan Pengujian Program (Debugging) penjumlahan bilangan real. Namun DSP yang kita
gunakan merupakan prosesor fixed point.
4. Mengaitkan Object dan Library ke Program
(Linking) Dari percobaan sebelumnya Anda telah memperoleh
koefisien filter untuk melakukan pem- filter-an. Kita
5. Menjalankan Progeam (Running) akan menggunakannya sebagai koefisien filter yang akan
diterapkan di BF561. Nantinya kita akan mencoba
2.1 FILTER FIR REALTIME program filter dalam bahasa pemograman C ataupun
Assembly, jadi kita dapat menuliskan koefisien tersebut
Sistem realtime disebut juga dengan sistem waktu nyata. di program kita, seperti berikut :
Sistem realtime harus dapat memberikan respon yang
tepat dalam batasan waktu yang ditentukan. Realtime
adalah metode realisasi, sehingga setiap tugas spesifik
int koef={a1,a2,a3,a4};
dapat dikerjakan pada waktu spesifik dengan siklus clock
sistem. Perhatikan bahwa koefisien harus ditulis dalam format
Q32 dan jangan lupa bahwa prosesor yang kita gunakan
Pada modul sebelumnya kita menggunakan filter FIR adalah prosesor fixed-point 32 bit sehingga setiap
offline (non realtime). Terdapat pebedaaan di antara bilangan direpresentasikan dalam 32 bit dengan kisaran –
algoritma sistem realtime dan algoritma sistem offline. 2-31 sampai 231-1 atau –2147483648 – 2147483647
Ide dasar dari algoritma realtime adalah hanya input saat untuk –1 sampai 1. Q31 adalah salah satu contoh format
ini dan yang telah lewat yang tersedia. Kita tidak Q, yaitu penulisan bilangan untuk bilangan fixed-point.
memiliki akses kepada input yang akan datang Pada BF561 yang merupakan prosesor fixed-point 32
berikutnya. Pada modul sebelumnya fungsi filter yang bit, maka untuk N=32, digunakan format Q31. Format
digunakan memiliki akses kepada keseluruhan sampel Q31 ini merepresentasikan fraksional 31 bit.
pada sinyal input.
Algoritma filter realtime diperlukan untuk implementasi Pada format ini, MSB adalah sign bit yang diikuti oleh
filter realtime dengan hardware DSP. Untuk keperluan suatu titik imajiner, dan kemudian 31 bit atau mantisa
ini maka diperlukan simulasi algoritma filter realtime- yang dinormalisasi ke 1. Bilangan Q31 memiliki kisaran
like dan dibandingkan hasilnya dengan algoritma filter desimal antara –1 sampai 0.9999 (0x8000h sampai
offline. 0x7FFFh). Bilangan fraksional h dapat direpresentasikan
sebagai atau h= -b020+ b12-1 + b22-2 + ... + bN2-N,
Sistem DSP adalah sistem waktu diskrit yang mengambil dimana h adalah bilangan fraksional dan b adalah biner 1
sampel sinyal input dan menghasilkan sampel sinyal atau 0. Konversi bilangan real ke bilangan fraksional
output dengan frekuensi sampling tertentu yang konstan. dilakukan dengan:
Artinya pada sistem DSP realtime, pada rentang waktu
antar sampling, haruslah dapat dilakukan proses koef=round(2^31*koef);
perhitungan sampel output yang merupakan hasil
pengolahan sinyal digital (bisa berupa filter). Artinya
proses komputasi pengolahan sinyal digital untuk tiap Konversi bilangan fraksional ke bilangan real dilakukan
sampel haruslah dapat diselesaikan sebelum sampel dengan:
berikutnya diambil.
koef=koef / 2^31;
Karakteristik simulasi realtime-like adalah sebagai
berikut:
Software MATLAB dan aplikasi Dev C++ Pada setiap loop (clock) hitunglah sampel sinyal
sudah terinstal dalam komputer output yang dihasilkan pada loop tersebut, lalu
tempatkan pada array output.
Pada bagian ini dibuat m-file untuk melakukan Setelah diperoleh hasil ouputnya kemudian
pemfilteran realtime FIR dengan Dev C++. praktikan diminta untuk membandingkan hasil
Fungsi internal filter menggunakan metode non simulasi dengan hasil sebelumnya
realtime, karena menghitung sinyal output
dengan sinyal input yang lengkap. Kemudian
membandingkan hasil simulasi dengan fungsi 3.2.3. Percobaan membuat m-file untuk simulasi
internal filter pem-filteran realtime FIR dengan bilangan
fraksional
Rumus fungsi;
IV. HASIL DAN ANALISIS sin1 = sin(2*pi*i*(f1/fs)) (fungsi1)
sin2 = sin(2*pi*i*(f2/fs)) (fungsi2)
4.1 Percobaan membuat m-file untuk simulasi pem- sin3 = sin(2*pi*i*(f3/fs)) (fungsi3)
filteran realtime FIR
Dapat terlihat bahwa hasil sinyal hasil konvolusi yang Gambar 5: Respon frequensi sinyal total
diperoleh dari source code (Dev C++) dengan hasil
konvolusi yang diperoleh dari MATLAB.
Pada praktikum ini dilakukan modifikasi hasil percobaan
Rumus fungsi; pertama dengan menggunakan metode buffering sirkular.
Sintot = (sin1+sin2+sin3)/3 merupakan sinyal Dengan metoda ini setiap kali didapatkan sampel input,
total yang merupakan penjumlahan dari ketiga maka sampe-sampel terdahulu pada buffer yang tidak
sinyal 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
Display:
yang di assign dengan nilai 0 serta adanya perhitungan
Subplot (2,1,2); plot (i,sintot); title („sintot)
filter dengan circular buffer. Berikut cuplikan source
merupakan suatu hasil dari grafik sinyal total
code :
dan pemberitaan judul grafik
int i, j, k=0;
Display:
Subplot (2,1,2); plot (i,sintot); merupakan suatu float filter(float input){
hasil dari grafik sinyal total
float hasil;
//buffering
buffer[k] = input;
Fungsi: hasil = 0;
Freqz (sintot); merupakan suatu perintah untuk for(j = 0; j <BUFFERLENGTH;j++){
mengamati respons hasil = hasil
+buffer[(j+k)%BUFFERLENGTH]*(koef_filter
[j]);
Dari data yang diperoleh dari sebuah sinyal input filter }
yaitu berupa sinyal total hasil dari penjumlahan 3 buah
sinyal sinusoidal dengan frequensi 200Hz, 1000Hz, dan // kembalikan hasil pemfilteran
5000Hz. Dapat dilihat perbandingan dengan perintah if (k>0){
nilai i = 1:100 tergantung dengan banyaknya sampel. I = k--;
100 merupakan suatu hasil superposisi dengan panjang }
vektor gabungan dari suatu sinyal 1, sinyal 2, dan sinyal else{
3. k=k+BUFFERLENGTH-1;
}
4.2 Percobaan membuat m-file untuk simulasi pem- return hasil;
filteran realtime FIR dengan buffer sircular }
Pada percobaan kedua ini dilakukan modifikasi dari
source code dari hasil percobaan sebelumnya dengan
menggunakan bilangan fraksional 16 bit. Semua Terlihat bahwa grafik filter yang dihasilkan dengan
koefisien filter direpresentasikan dengan buffer sircular. metoda buffer sirkular sama dengan grafik filter dengan
Dilakukan peng-edit-an source code pada bagian sebelumnya. Hal ini mengindikasikan bahwa source code
sebelumnya dengan mengubah isi fungsi filter, koefisien yang dibuat telah benar.
serta buffer menjadi tipe integer. Hasil nilai-nilai pada
file text dari program kemudian dibuat kedalam grafik Berikut ini merupakan hasil dari frekuensi response yang
dengan menggunakan excel. Metode bilangan yang dihasilkan untuk dua orde yang berbeda yakni pada orde
digunakan pada percobaan ini yaitu dengan mengedit 16:
source code yang telah ada. Yaitu menambahkan
perhitungan filter dengan buffer sircular sebagai berikut :
Diperoleh:
1 Wn fcut off 800 0,1(Lowpass)
FS 0, 5 16000 0, 5
V. SIMPULAN
float buffer[BUFFERLENGTH];
float x[LENGTH];
float y[LENGTH];
int i, j, k=0;
float hasil;
//buffering
buffer[k] = input;
hasil = 0;
for(j = 0; j <BUFFERLENGTH;j++){
hasil = hasil +buffer[(j+k)%BUFFERLENGTH]*(koef_filter[j]);
}
fprintf(pFile,"%4.4f\n", y[i]);
}
fclose(pFile);
system("PAUSE");
return EXIT_SUCCESS;
}
PERCOBAAN 2
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
float buffer[BUFFERLENGTH];
float x[LENGTH];
float y[LENGTH];
int i, j, k=0;
float hasil;
//buffering
buffer[k] = input;
hasil = 0;
for(j = 0; j <BUFFERLENGTH;j++){
hasil = hasil +buffer[(j+k)%BUFFERLENGTH]*(koef_filter[j]);
}
fprintf(pFile,"%4.4f\n", y[i]);
}
fclose(pFile);
system("PAUSE");
return EXIT_SUCCESS;
}
PERCOBAAN 3
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
float buffer[BUFFERLENGTH];
float x[LENGTH];
float y[LENGTH];
int i, j, k=0;
float hasil;
//buffering
buffer[k] = input;
hasil = 0;
for(j = 0; j <BUFFERLENGTH;j++){
hasil = hasil +buffer[(j+k)%BUFFERLENGTH]*(koef_filter[j]*pow(2,31)));
}
fprintf(pFile,"%4.4f\n", y[i]);
}
fclose(pFile);
system("PAUSE");
return EXIT_SUCCESS;
}