Anda di halaman 1dari 20

Modul II

SIMULASI FILTER FIR REALTIME


M Adnan Zulkarnain (118130088)
Asisten : M Masyhuda (1311707)
Tanggal Percobaan : 29/05/2021
EL3031 Praktikuk Pengolahan Sinyal Digital II.
Laboratorium Teknik Elektro
Institut Teknologi Sumatera

LANDASAN TEORETIS
Abstrak— Pada praktikum. Pengolahan sinyal digital
A. Pengertian Filter FIR Real Time
dimodul ke 02 ini praktikan melakuakn praktikum secara
online dengan judul modul yaitu simulasi filter FIR realtime Sistem realtime disebut juga dengan sistem waktu nyata.
pada praktikum ini dilakukan 3 percobaan yang berbeda Sistem realtime harus dapatmemberikan respon yang tepat
yaitu percobaan yang pertama Percobaan membuat m-file dalam batasan waktu yang ditentukan. Realtime adalahmetode
untuk simulasi pem-filter-an realtime FIR, Percobaan realisasi, sehingga setiap tugas spesifik dapat dikerjakan pada
membuat m-file untuk simulasi pem-filter-an realtime FIR waktu spesifik dengansiklus clock sistem. Pada modul
dengan buffer sirkular dan percobaan yang ketiga sebelumnya kita menggunakan filter FIR offline (non
Percobaan membuat m-file untuk simulasi pem-filter-an realtime). Terdapat pebedaaan di antara algoritma sistem
realtime FIR realtime dan algoritma sistem offline. Ide dasar dari algoritma
dengan bilangan fraksional. Pada praktikum ini realtime adalah hanya input saat ini dan yang telah lewat yang
menggunakan simulasi pada dev c++ untuk melakukan tersedia. Kita tidak memiliki akses kepada input yang akan
simulasi filter FIR dan menggunakan simulasi pada datang berikutnya. Pada modul sebelumnya fungsi filter yang
MATLAB dan mengkonversi bilangan biner ke bilangan digunakan memiliki akses kepada keseluruhan sampel pada
konvensional sinyal input. Algoritma filter realtime diperlukan untuk
implementasi filter realtime dengan hardware DSP. Untuk
Kata Kunci — Dev C ++, Filter, FIR, keperluan ini maka diperlukan simulasi algoritma filter
realtime-like dan dibandingkan hasilnya dengan algoritma
I. PENDAHULUAN filter offline.Sistem DSP adalah sistem waktu diskrit yang
mengambil sampel sinyal input dan menghasilkan sampel
Pada modul kedua berjudul simulasi filter realtime , Sistem
sinyal output dengan frekuensi sampling tertentu yang
realtime disebut juga dengan sistem waktu nyata. Sistem
konstan.
realtime harus dapat memberikan respon yang tepat dalam Artinya pada sistem DSP realtime, pada rentang waktu antar
batasan waktu yang ditentukan. Realtime adalah metode sampling, haruslah dapat dilakukan proses perhitungan sampel
realisasi, sehingga setiap tugas spesifik dapat dikerjakan pada output yang merupakan hasil pengolahan sinyal digital (bisa
waktu spesifik dengan siklus clock sistem. Pada modul berupa filter). Artinya proses komputasi pengolahan sinyal
sebelumnya modul FIR offline kita menggunakan FIR non digital untuk tiap sampel haruslah dapat diselesaikan sebelum
realtime Terdapat pebedaaan di antara algoritma sistem sampel berikutnya diambil.
realtime dan algoritma sistem offline. Ide dasar dari algoritma
realtime adalah hanya input saat ini dan yang telah lewat yang Karakteristik simulasi realtime-like adalah sebagai berikut:
tersedia. Kita tidak memiliki akses kepada input yang akan 1. Loop untuk kesesuaian dengan kelakuan clock
datang berikutnya. Pada modul sebelumnya fungsi filter yang 2. Akses hanya kepada input yang telah ada pada array input
digunakan memiliki akses kepada keseluruhan sampel pada 3. Update output setiap siklus loop
sinyal input.
Tujuan Praktikum modul kedua adalah : Filter FIR adalah salah satu tipe dari filter digital yang dipakai
 Mempelajari bagaimana mengimplementasikan pada aplikasi Digital SignalProcessing (DSP). FIR
dan melakukan simulasi filter FIR realtime kepanjangan dari Finite Impulse Response. Mengapa disebut
menggunakan Dev-C++ responsimpulsnya terbatas (finite)? Karena tidak ada feedback 
 didalam filter, jika anda memasukkansebuah impulse
 Mengenal model bilangan fraksional untuk
(yaitu sebuah sinyal ‘1’ diikuti dengan banyak sinyal
prosesor DSP fixed point.
‘0’), sinyal nol akankeluar setelah sinyal 1 melewati
 Mengimplementasikan dan melakukan simulasi semua delay line dengan koefisiennya.Keuntungan filter FIR
filter FIR realtime dengan bilangan fraksional antara lain adalah stabil dan memiliki phasa yang linier.
menggunakan Dev-C++ Sedangkankerugiannya adalah filter FIR terkadang
membutuhkan lebih banyak memory dan/atauperhitungan 2147483647 untuk –1 sampai 1.
untuk mencapai karakteristik respon filter yang diberikan. Dan Q31 adalah salah satu contoh format Q, yaitu penulisan
juga, respontertentu tidak mudah dilaksanakan untuk bilangan untuk bilangan fixed-point. Pada BF561 yang
diimplementasikan dengan filter FIR : 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) Konversi
bilangan real ke bilangan fraksional dilakukan dengan :

koef=round(2^31*koef);

Untuk konversi bilangan fraksional ke bilangan real dilakukan


Gambar 2.1 Flow Graph Filter FIR orde 3 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.

B. ISU NUMERIK
III. METODOLOGI PERCOBAAN
Kebanyakan prosesor DSP merupakan prosesor fixed point.
Prosesor floating point jauh lebih rumit dari prosesor fixed A. Alat dan Bahan
point sehingga membutuhkan harga yang lebih mahal. Untuk  Laptop/ PC
membuat sistem yang cost effective maka prosesor DSP  Software
direalisasikan dengan prosesor fixed point. Prosesor fixed  Software Matlab
point secara natural set intruksi dasar matematiknya hanya
mendukung operasi bilangan bulat (integer) B. Langkah Kerja
Memahami isu numerik adalah sangat penting untuk Sebelum Memulai Percobaan
memperoleh performansi terbaik dari sebuah prosesor fixed-
point. Masalahnya adalah kebanyakan sinyal dan juga
koefisien
bernilai bilangan real. Sehingga operasi pengolahan sinyal Pastikan komputer yang akan digunakan
merupakan operasi perkalian dan penjumlahan bilangan real. berfungsi dengan normal dan tidak ada
Namun DSP yang kita gunakan merupakan prosesor fixed masalah apapun.
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 (contoh)

int koef={a1,a2,a3,a4}; Software Dev-C++ sudah terinstal


dalam komputer.
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 2
31
-1 atau –2147483648 –
A. Percobaan membuat m-file untuk simulasi pem-filter Pada bagian ini untuk memodifikasi hasil dari
an realtime FIR percobaan sebelumnya dengan menggunakan bilangan
fraksional 32 bit. Semua koefisien filter
direpresentasikan dengan bilangan fraksional.
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 Buffer diisi dengan sampel input baru yang diisi dengan
fungsi internal filter sampel input yang telah dikonversikan dari bilangan real
menjadi bilangan fraksional. Modifikasi perkalian
bilangan real menjadi perkalian bilangan fraksional.

Gunakan buffer input sepanjang orde filter


(Contoh: jika orde filter adalah 16 maka Edit source code dari bagian sebelumnya dengan
buffer input adalah 16) mengubah fungsi filter, juga koefisien dan buffer menjadi
tipe integer. Tambahkan bagian konversi output menjadi
float sebelum ditulis ke file. (Gunakan casting).

Gunakan metoda loop sejumlah sampel


sinyal input untuk simulasi clock Pada IV. HASIL DAN ANALISIS
setiap loop (clock) mengindikasikan adanya A. Percobaan membuat m-file untuk simulasi pem-filter
sampel input yang baru. Ambil input baru an realtime FIR
dan tempatkan pada buffer input
Source code pada dev C ++ yang digunakan :

#include <cstdlib>
#include <iostream>
Pada setiap loop (clock) hitunglah sampel #include <stdio.h>
sinyal output yang dihasilkan pada loop #include <math.h>
tersebut, lalu tempatkan pada array output using namespace std;
// panjang tap filter
#define BUFFERLENGTH
9 #define LENGTH 100
#define PI 3.14159265
Lalu masukan source code pada Dev C+
float koef_filter[BUFFERLENGTH] = {0.020041, 0.064976,
yang ada pada modul percobaan dan edit
0.167492, 0.250847, 0.250847, 0.167492, 0.064976,
filter yang di desain pada MATLAB
0.020041};
float buffer[BUFFERLENGTH];
float x[LENGTH];
B. Percobaan membuat m-file untuk simulasi pem- float y[LENGTH];
filter-an realtime FIR dengan buffer sirkular int i, j;
float filter(float input)
{ float hasil;
Pada bagian ini dilakukan modfikasi hasil percobaan
//buffering
sebelumnya menggunakan metode buffering sirkular.
for(j = BUFFERLENGTH - 1; j > 0; j--) {
dengan metode ini maka setiap kali didapatkan sampel
input, maka sampel-sampel terdahulu pada buffer tidak buffer[j] = buffer[j-1];
perlu digeser. Setelah diperoleh hasilnya kemudian }
dibandingkan hasil simulasi dengan hasil sebelumnya. //input disimpan di buffer
0 buffer[0] = input;
// perhitungan
filter hasil = 0;
C Percobaan membuat m-file untuk simulasi pem- for(j = 0; j < BUFFERLENGTH; j++) {
filter-an realtime FIR dengan bilangan fraksional 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*P
*5000/16000*i) )
/ 3;
} Gambar 4.2 Grafik MATLAB percobaan 1
//inisialisasi buffer dengan nol
Analisis :
for(i=0; i < BUFFERLENGTH; i++) {
buffer[i] = 0; Pada Percobaan pertama kita melakukan percobaan membuat
} m-File untuk simulasi pemfilteran FIR realtime. Pada
//loop mengambil input tiap sampel dan menaruhnya pada percobaan ini kita menggunakan software DEV C++ untuk
output memasukkan source code yang ada pada modul praktikum.
for(i=0; i < LENGTH; i++) { Setelah mengcompile dan run source code nya kita
y[i] = filter(x[i]); mendapatkan hasil output berupa nilai koefisien filter yang
} akan digunakan untuk melihat hasil keluaran sinyal output di
//tulis output ke file grafik pada Ms. Excel . pada hasil sinyal output dari orde/ N=
pFile = fopen("output.txt", "w"); 16 nilai koefisien filter berada di sumbu x dan y dengan
for(i=0; i < LENGTH; i++) { rentang nilai di sumbu y 0.8 hingga – 0.8 dan sumbu x dengan
rentang nilai dari 1 hingga 100. turun naiknya grafik
fprintf(pFile,"%4.4f\n", y[i]); menggambarkan kondisi filter Ketika digunakan. Setelah itu
dilakukan juga pengujian pada MATLAB dan mendapatkan
} hasil plot sinyal grafik yang sama dan ini membuktikan
pemfilteran filter FIR realtime yang telah dilakukan telah
berhasil.
fclose(pFile);
system("PAUSE"); B. Percobaan membuat m-file untuk simulasi pem-filter-
return EXIT_SUCCESS; an realtime FIR dengan buffer sirkular
}
Source code pada dev C++ :
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
// panjang tap filter
#define BUFFERLENGTH 9
#define LENGTH 100
#define PI 3.14159265
float koef_filter[BUFFERLENGTH] = {0.020041, 0.064976,
0.167492, 0.250847, 0.250847, 0.167492, 0.064976,
0.020041};
float buffer[BUFFERLENGTH];
float x[LENGTH];
Gambar 4.1 Grafik Excel Percobaan 1
float y[LENGTH];
Pada percobaan ke satu dilakukan juga pengujian dengan int i, j, k;
menggunakan MATLAB apakah sinyal yang dihasilkan sama float filter(float input)
seperti output pada EXCEL { float hasil;
for(j = BUFFERLENGTH - 1; j > 0; j--) {
buffer[j] = buffer[j-1];
}
//input disimpan di buffer 0
buffer[k] = input;
// perhitungan
hasil = 0;
for(j = 0; j < BUFFERLENGTH; j++) {
hasil = hasil + buffer[j+k] * 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;
Gambar 4.4 Grafik Sinyal Pada Matlab
}
//inisialisasi buffer dengan nol Analisis :
for(i=0; i < BUFFERLENGTH; i++) { Pada percobaan ke 2 ini kita melakukan percobaan membuat
buffer[i] = 0; m-file untuk simulasi pemfilteran realtime FIR dengan buffer
} circular . untuk mekanisme percobaannya sama kita
//loop mengambil input tiap sampel dan menaruhnya pada memasukan source code pada dev c++ dan mendapatkan
output output nilai koefisien filter dan nilai koefisien filter tersebut
for(i=0; i < LENGTH; i++) { diinputkan di MS Excel dan mendapatkan plot grafik sinyal
y[i] = filter(x[i]); pemfilteran realtime. Yang membedakan pada percobaan ini
} kita menggunakan buffer circular pada source codenya dan
//tulis output ke file berikut inputan source code pada bagian buffer circular di
pFile = fopen("output.txt", "w"); MATLAB :
for(i=0; i < LENGTH; i++) {
fprintf(pFile,"%4.4f\n", y[i]); int i,j,k=0;
}
fclose(pFile); float filter(float input) {
system("PAUSE"); float hasil;
return EXIT_SUCCESS; //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];
}
I (k< =0) {
k= k+BUFFERLENGHT-1 ;
}
Else {
k-- ;
};
return hasil;
Gambar 4.3 Grafik Excel Percobaan 2 }

Pada hasil grafik yang dihasilkan pada MS EXCEL dan


MATLAB memliki kesamaan dalam bentuk grafiknya. Pada
buffer circular ada 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
C. Percobaan membuat m-file untuk simulasi pem-filter- for(i=0; i < LENGTH; i++) {
an realtime FIR dengan bilangan fraksional fprintf(pFile,"%4.4f\n", y[i]);
}
Source Code pada Excel : fclose(pFile);
#include <cstdlib> system("PAUSE");
#include <iostream> return EXIT_SUCCESS
#include <stdio.h>
#include <math.h>
using namespace std;
// panjang tap filter
#define BUFFERLENGTH 9
#define LENGTH 100
#define PI 3.14159265
Float koef_filter[BUFFERLENGTH]={0.020041,
0.064976,0.167492, 0.250847, 0.250847, 0.167492, 0.064976,
0.020041};
float buffer[BUFFERLENGTH];
float x[LENGTH];
float y[LENGTH];
int i, j; Gambar 4.5 Grafik Excel Percobaan 3
int k;
float filter(float input)
{ float hasil;
for(j = BUFFERLENGTH - 1; j > 0; j--) {
buffer[j] = buffer[j-1];
}
//input disimpan di buffer 0
buffer[k] = input;
// perhitungan
hasil = 0;
for(j = 0; j < BUFFERLENGTH; j++) {
hasil = hasil + buffer[j+k] * round
(koef_filter[j]*pow(2,31));
} Gambar 4.6 Grafik pada MATLAB percobaan 3
// kembalikan hasil pemfilteran
return hasil; Analisis :
} Pada percobaan ke tiga ini kita melakukan percobaan
int main(int argc, char *argv[]) membuat m-file untuk simulasi pemfilteran realtime FIR
{ dengan menggunakan bilangan fraksional dan sama seperti
FILE *pFile; percobaan sebelumnya kita menggunakan DEV C++ untuk
memasukkan source code yang ada dan mendapatkan output
//siapkan input
bilangan nilai koefisien filter untuk dimasukkan pada MS
for(i=0; i < LENGTH; i++) {
EXCEL dan mendapatkan output plot sinyal grafik seperti
x[i] =(sin(2*PI*200/16000*i)+sin(2*PI*1000/16000*i)
pada percobaan diatas. Seteleh melakukan percobaan di dev
+sin(2*PI*5000/16000*i) )/ 3; C++ kita juga menguji dengan menggunakan MATLAB dan
} mengubah source code dengan fungsi bilangan fraksional.
//inisialisasi buffer dengan nol Berukut source code yang menampilkan bilangan fraksional
for(i=0; i < BUFFERLENGTH; i++) {
buffer[i] = 0; hasil = 0;
} for(j=0; j< BUFFERLENGHT; j++) {
//loop mengambil input tiap sampel dan menaruhnya pada hasil = hasil +
output buffer [(j*k) % BUFFERLENGHT] *
for(i=0; i < LENGTH; i++) { round (koef_filter[j]*pow(2,3)) ;
y[i] = filter(x[i]); }
} If (k<=0) {
//tulis output ke file K= k+ BUFFERLENGHT – 1 ;
pFile = fopen("output.txt", "w"); }
Else {
k--;
};
return hasil ;
}

Dan hasil grafik yang dihasilkan sama dengan percobaan yang


sebelumnya yaitu dengan m-file filter realtime dan filter
realtime dengan menggunakan circular buffer dan yang
membedakan adalah hasil output nilai koefisien pada ms
excel. Pada percobaan ketiga ini nilai bilangan fraksional
adalah 0,00 dan seterusnya dan Pada percobaan ketiga ini
dilakukan modifikasi dari source code percobaan sebelumnya
dengan menggunakan bilangan fraksional 32 bit.

V. KESIMPULAN
Pada Modul II praktikum pengolahan sinyal digital dengan
judul modul yaitu “Simulasi Filter FIR realtime” dapat ditarik
kesimpulan bahwa :

[1] Pada percobaan dimodul ini filter FIR realtime yang


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

[2] Filter FIR realtime dapat disimulasikan dan dapat


diimplementasikan dengan membuat source code
menggunakan Dev C++ dan untuk pengujian lebih akurat bisa
dengan menggunakan MATLAB

[3] MS EXCEL dapat menampilkan plot grafik dari output dev


C ++
.

Referensi
[1]http://repository.usu.ac.id/bitstream/handle/123456789/286
77/Chapter%20II.pdf;sequence=4

Hutabarat, Mervin T., Waskita Adijarto dan Harry


[2]
Septanto, Praktikum system pengolahan sinyal digital

[3] Modul Praktikum Pengolahan Sinyal Digital


Laboratorium Teknik Elektro Institute Teknologi
Sumatera
LAMPIRAN

LINK VIDEO PRAKTIKUM SELURUH PERCOBAAN

 https://youtu.be/myWQgJw-L1Y

Anda mungkin juga menyukai