el3110_02_13213107

9
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 MODUL II SIMULASI FILTER FIR REALTIME Yunita Deasy Simatupang Asisten: Rizky Indra Syafrian/13212049 Tanggal Percobaan: 22/09/2015 EL3110-Praktikum Pengolahan Sinyal Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Percobaan modul ini, praktikan diperkenalkan filter FIR realtime. Pada percobaan modul ini, praktikan menggunakan bahasa C++ yang dicompile di Dev C++ dan akan menggunakan Microsoft excel untuk menghasilkan gambar plot filternya. Praktikan diharuskan untuk membuat kode yang source codenya ada di modul, sedangkan untuk buffer circuar dan fraktional circular, praktikan diminta untuk mengedit sebahagian kode program. Kata kunci: FIR Real-time, Fraksional, Filter . 1. PENDAHULUAN Percobaan yang dilakukan pada modul dua ini, memberikan tinjauan mengenai filter FIR realtime dapat diimplementasikan. Pada modul ini, praktikan akan membuat dan melakukan simulasi untuk implementasi filter realtime dengan menggunakan Dev-C++. Pada modul ini juga dikenalkan isu numeric yang dihadapi ketika menggunakan prosesor DSP fixed point. Adapun tujuan dari percobaan modul 2 ini adalah : 1. Mempelajari bagaimana mengimplementasikan dan melakukan simulasi filter FIR realtime menggunakan Dev-C++ 2. Mengenal model bilangan fraksional untuk prosesor DSP fixed point. 3. Mengimplementasikan dan melakukan simulasi filter FIR realtime dengan bilangan fraksional menggunakan Dev-C++ 2. STUDI PUSTAKA 2.1 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 tugas spesifik dapat dikerjakan pada waktu spesifik dengan sistem clock sistem. Ide dasar dari algoritma realtime adalah hanya input saat ini dan yang tealh lewat yang tersedia. Kita tidak memeiliki akses kepada input yang akan datang berikutnya. 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 2.2 ISU NUMERIK Kebanyakan prosesor DSP merupakan prosesor fixed point. Prosesor fixed point secara natural set intruksi dasar matematikanya hanya mendukung operasi bilangan bulat (integer). Namun permasalahannya adalah kebanyakan sinyal dan koefisiennya bernilai bilangan real. Sehingga operasi yang dilakukan terhadap sinyal melibatkan bilangan real. Konversi bilangan real ke bilangan fraksional dilakukan dengan persamaan: Konversi bilangan fraksional ke bilangan real dilakukan dengan persamaan: 3. METODOLOGI Peralatan yang digunakan: 1 unit computer dengan software Dev-C++ terinstall Langkah – langkah percobaan: 3.1 Percobaan membuat m-file untuk simulasi pem-filter-an realtime FIR Simpan hasilnya pada microsoft excel lalu analisis Ketik source code sesuai dengan yang terdapat pada modul dimana bufferlength dan koef. filter diganti sesuai yang diminta

Upload: yunit4

Post on 07-Dec-2015

583 views

Category:

Documents


168 download

DESCRIPTION

llalal

TRANSCRIPT

Page 1: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

MODUL II SIMULASI FILTER FIR REALTIME

Yunita Deasy Simatupang Asisten: Rizky Indra Syafrian/13212049

Tanggal Percobaan: 22/09/2015 EL3110-Praktikum Pengolahan Sinyal Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Percobaan modul ini, praktikan diperkenalkan filter FIR realtime. Pada percobaan modul ini, praktikan menggunakan bahasa C++ yang dicompile di Dev C++ dan akan menggunakan Microsoft excel untuk menghasilkan gambar plot filternya. Praktikan diharuskan untuk membuat kode yang source codenya ada di modul, sedangkan untuk buffer circuar dan fraktional circular, praktikan diminta untuk mengedit sebahagian kode program.

Kata kunci: FIR Real-time, Fraksional, Filter .

1. PENDAHULUAN

Percobaan yang dilakukan pada modul dua ini, memberikan tinjauan mengenai filter FIR realtime dapat diimplementasikan. Pada modul ini, praktikan akan membuat dan melakukan simulasi untuk implementasi filter realtime dengan menggunakan Dev-C++. Pada modul ini juga dikenalkan isu numeric yang dihadapi ketika menggunakan prosesor DSP fixed point.

Adapun tujuan dari percobaan modul 2 ini adalah :

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

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

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

2. STUDI PUSTAKA

2.1 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 tugas spesifik dapat dikerjakan pada waktu spesifik dengan sistem clock sistem.

Ide dasar dari algoritma realtime adalah hanya input saat ini dan yang tealh lewat yang tersedia.

Kita tidak memeiliki akses kepada input yang akan datang berikutnya.

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

2.2 ISU NUMERIK

Kebanyakan prosesor DSP merupakan prosesor fixed point. Prosesor fixed point secara natural set intruksi dasar matematikanya hanya mendukung operasi bilangan bulat (integer). Namun permasalahannya adalah kebanyakan sinyal dan koefisiennya bernilai bilangan real. Sehingga operasi yang dilakukan terhadap sinyal melibatkan bilangan real.

Konversi bilangan real ke bilangan fraksional dilakukan dengan persamaan:

Konversi bilangan fraksional ke bilangan real dilakukan dengan persamaan:

3. METODOLOGI

Peralatan yang digunakan:

1 unit computer dengan software Dev-C++ terinstall

Langkah – langkah percobaan:

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

Simpan hasilnya pada microsoft excel lalu analisis

Ketik source code sesuai dengan yang terdapat pada modul dimana bufferlength dan koef. filter diganti sesuai yang diminta

Page 2: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2

3.2 Percobaan membuat m-file untuk simlasi pem-filter-an realtime FIR dengan buffer silkular

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

4. HASIL DAN ANALISIS

4.1 MEMBUAT M-FILE UNTUK SIMULASI PEM-FILTER-AN REALTIME FIR

1. Low Pass

Gambar 1. Filter realtime dari fungsi low pass filter (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

Analisis :

Gambar di atas merupakan hasil konvolusi dari kedua gambar dibawah

(gambar superposisi dari ketiga gelobang sinus yang berbeda frekuensi dalam domain waktu)

(gambar plot filter lowpass yang terdapat di modul satu dan gambar tersebut dalam domain waktu)

2. High Pass

Gambar 2. Filter realtime dari fungsi high pass filter (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

Analisis :

Bandingkan hasil yang didapat dengan hasil sebelumnya

Gunakan referensi file dari source code sebelumnya

Buat kode untuk simulasi pem-filter-an realtime FIR dengan buffer sirkular

Bandingkan hasil yang didapat dengan hasil sebelumnya

Gunakan referensi file dari source code sebelumnya

Buat kode untuk simulasi pem-filter-an realtime FIR dengan bilangan fraksional

-0,6

-0,4

-0,2

0

0,2

0,4

0,6

0 50 100 150

Series1-0,1

-0,05

0

0,05

0,1

0 50 100 150

Series1

Page 3: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3

Gambar di atas merupakan hasil konvolusi dari kedua gambar dibawah

(gambar superposisi dari ketiga gelobang sinus yang berbeda frekuensi dalam domain waktu)

(gambar plot filter highpass yang terdapat di modul satu dan gambar tersebut dalam domain waktu)

3.Bandpass

Gambar 3. Filter realtime dari fungsi Band Pass filter (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

Analisis :

Gambar di atas merupakan hasil konvolusi dari kedua gambar dibawah

(gambar superposisi dari ketiga gelobang sinus yang berbeda frekuensi dalam domain waktu)

(gambar plot filter bandpass yang terdapat di modul satu dan gambar tersebut dalam domain waktu)

Analisis:

Dari algoritma pada bagian filternya dapat kita lihat bahwa konvolusi dilakukan antara masukan filter (yaitu lowpass, highpass dan bandpass) dengan perjumlahan gelombang sin seperti modul 1 sebelumnya dimana frekuensi yang digunakan di syntax belum dinormalisasi atau memakai f1/fs dst, kita dapat melihatnya pada kode yang terdapat di modul ini (dapat kita lihat dari kodenya). Konvolusi dilakukan dengan mengalikan impuls respon terhadap input yang digeser (time shifting) . Time shifting dilakukan pada bagian buffering di blok program prosedur filter, yaitu menggeser nilai-nilai yang ada pada array satu kotak ke kanan. Namun terdapat pola yang terlihat jelas dimana filter tersebut bekerja sesuai dengan jenis filternya.

-0,6

-0,4

-0,2

0

0,2

0,4

0,6

0 50 100 150

Series1

Page 4: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4

4.2 MEMBUAT M-FILE UNTUK SIMULASI

PEM-FILTER-AN REALTIME FIR

DENGAN BUFFER SIRKULAR

1. Low Pass

Gambar 4. Filter realtime dari fungsi low pass filter yang didapat dari simulasi dengan buffer sirkular (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

2. High Pass

Gambar 5. Filter realtime dari fungsi high pass filter yang didapat dari simulasi dengan buffer sirkular (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

3. BandPass

Gambar 6. Filter realtime dari fungsi Band Pass filter yang didapat dari simulasi dengan buffer sirkular (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

4. Perubahan pada bagian algoritma filter untuk simulasi dengan buffer sirkular

float filter(float input) {

float hasil;

//buffering

//for(k = BUFFERLENGTH - 1; k > 0; k--) {

//buffer[j] = buffer[j-1];

//}

//input disimpan di buffer 0

buffer[k] = input;

// perhitungan filter

hasil = 0;

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

hasil = hasil + buffer[(j+k)%BUFFERLENGTH] * koef_filter[j];

}

Gambar 5. Perubahan pada fungsi filter

Analisis:

Dalam code yang terdapat di atas, terlihat bahwa code mengadopsi direct form dari FIR. Disini kita menggunakan array sebagai alat untuk menyimpan input (memori). Kemudian dengan fungsi mod, kita akan membuat input akan masuk ke array selanjutnya seiring clock namun perkaliannya dengan koefisien filternya yang diubah urutannya. Jika fungsi pada percobaan sebelumnya memindahkan input, yang dilakukan pada fungsi ini adalah memindahkan koefisien filternya. Hal tersebut mengacu kepada teori konvolusi dimana a*b = b*a.

4.3 PERCOBAAN MEMBUAT M-FILE

UNTUK SIMULASI PEM-FILTER-AN

REALTIME FIR DENGAN BILANGAN

FRAKSIONAL

1. Low Pass

Gambar 7. Filter realtime dari fungsi low pass filter yang didapat dari simulasi dengan bilangan fraksional (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

-10000000000000,0

-5000000000000,0

0,0

5000000000000,0

10000000000000,0

0 100

Series1

-3000000000000,0000

-2000000000000,0000

-1000000000000,0000

0,0000

1000000000000,0000

2000000000000,0000

0 100 Series1

-15000000000000,0000

-10000000000000,0000

-5000000000000,0000

0,0000

5000000000000,0000

10000000000000,0000

15000000000000,0000

0 100

Series1

-0,6

-0,4

-0,2

0

0,2

0,4

0,6

0 50 100 150

Series1

Page 5: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5

2. High Pass

Gambar 8. Filter realtime dari fungsi high pass filter yang didapat dari simulasi dengan bilangan fraksional (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

3. Band Pass

Gambar 9. Filter realtime dari fungsi high pass filter yang didapat dari simulasi dengan bilangan fraksional (koefisien di ambil pada hasil di percobaan FIR1 pada modul 1)

4. Perubahan pada bagian algoritma filter untuk simulasi dengan bilangan fraksional

float filter (float input)

{

float hasil;

// meletakkan input pada buffer

buffer[k]=input*32767;

hasil=0;

// perhitungan filter

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

{ hasil=hasil+koef_filter[j]*

buffer[(j+k)%BUFFERLENGTH];

}

k=(k+BUFFERLENGTH-1)%BUFFERLENGTH;

hasil=hasil/32767;

return hasil;

}

Analisis:

Dari kode di atas kita tahu bahwa Input yang awalanya berupa bilangan fraksional atau bilangan float diubah menjadi bilangan integer dengan melakukan perkalian dengan 32767. Dengan melakukan perkalian tersebut perhitungan filter akan memproses serangkaian bilangan integer (bukan bilangan floating point). Sehingga akan terdapat beberapa daerah dimana hasil filternya akan datar / sejajar dengan sumbu x. Sehingga terlihat bahwa cara menggunakan bilangan fraksional memang akan mengurangi memori yang digunakan namun akan berimbas besar pada hasil filter terutama jika hasilnya akan inputnya bilangan negative dan outputnya tidak presisi (menggunakan metode rounding).

Analisis Tambahan :

Circular buffer dipakai karena Time shifting yang ada pada konvolusi linear membuat program kompleksitas program menjadi besar. Untuk itu, dengan metoda cicrular buffer maka memungkinkan melakukan konvolusi tanpa melakukan time shifting, melainkan hanya mengatur indeks/kursor array yang digunakan sehingga lebih cepat dalam memprosesnya.

Metode dengan bilangan fraksional digunakan karena lebih cepat dibandingkan dua metode lainnya dimana input yang awalnya berupa bilangan fraksional atau bilangan float diubah menjadi bilangan integer dengan melakukan perkalian dengan 32767. Dengan melakukan perkalian tersebut perhitungan filter akan memproses serangkaian bilangan integer (bukan bilangan floating point). Tentu nantinya prosesor akan lebih cepat memproses filter ini.

Ketiga metode diatas menghasilkan gambar plot sama persis dikarenakan sama-sama memproses hal yang sama walaupun dengan cara proses yang berbeda.

5. KESIMPULAN

1. Pada filter realtime, akan terlihat bahwa pem-filter-an terdapat time shifting.

-0,1

-0,05

0

0,05

0,1

0 50 100 150

Series1

-0,6

-0,4

-0,2

0

0,2

0,4

0,6

0 50 100 150

Series1

Page 6: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6

2. Buffer sirkular merupakan salah satu metode untuk menciptakan FIR Realtime dengan kelebihan kecepatan dari kerja fungsinya.

3. Penggunaaan metode bilangan fraksional lebih cepat dari dua metode lainnya tetapi metode ini memiliki kelemahan dalam hal konversinya. Apabila input negative akan dikonversi ke nol sedangkan untuk output menjadi tidak presisi karena di rounding.

DAFTAR PUSTAKA

[1] Mervin T. Hutabarat dan tim, Petunjuk Praktikum Pengolahan Sinyal Digital, Sekolah Teknik Elektro dan Informatika, Bandung, 2013.

[2] Proakis G. John dan Monolakis G. Dimitris, Digital Signal Processing Principles, Algorithms, and Applications Fourth Edition, Pearson Prentice Hall, New Jersey, 2007.

Page 7: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7

Lampiran Kode :

1. Sesuai dengan modul dimana

Bufferlength diganti sesuai koefisien

filter

#include <cstdlib>

#include <iostream>

#include <stdio.h>

#include <math.h>

using namespace std;

#define BUFFERLENGTH 33

#define LENGTH 100

#define PI 3.14159265

float koef_filter[BUFFERLENGTH] =

{Koefisien filter pada yang didapat modul 1};

float buffer[BUFFERLENGTH];

float x[LENGTH];

float y[LENGTH];

int i, j;

float filter(float input)

{

float hasil;

for (j=BUFFERLENGTH - 1; j>0; j--)

{

buffer[j] = buffer[j-1];

}

buffer[0] = input;

hasil = 0;

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

{

hasil = hasil +

buffer[j]*koef_filter[j];

}

return hasil;

}

int main(int argc, char *argv[])

{

FILE *pFile;

for (i=0; i<LENGTH; i++)

{

x[i] =

(sin(2*PI*200/16000*i)+sin(2*PI*1000/1600

0*i)+sin(2*PI*5000/16000*i))/3;

}

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

{

buffer[i] = 0;

}

for (i=0; i< LENGTH; i++)

{

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

}

pFile = fopen("output.txt", "w");

for (i=0; i<LENGTH; i++)

{

fprintf(pFile,"%4.4f\n", y[i]);

}

fclose(pFile);

system("PAUSE");

return EXIT_SUCCESS;

}

2. Buffer Circular

#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

float koef_filter[BUFFERLENGTH] =

{Koefisien filter pada yang didapat

modul 1};

float buffer[BUFFERLENGTH];

float x[LENGTH];

float y[LENGTH];

int i, j, k;

float filter(float input) {

float hasil;

//buffering

//for(k = BUFFERLENGTH - 1; k > 0;

k--) {

//buffer[j] = buffer[j-1];

//}

//input disimpan di buffer 0

buffer[k] = input;

// perhitungan filter

hasil = 0;

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

{

hasil = hasil +

buffer[(j+k)%BUFFERLENGTH] *

koef_filter[j];

}

// kembalikan hasil pemfilteran

Page 8: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8

k=(k+BUFFERLENGTH-

1)%BUFFERLENGTH;

return hasil;

}

int main(int argc, char *argv[])

{

FILE *pFile;

//siapkan input

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

koef_filter[i]=round(koef_filter[i]*po

w(2,31));

}

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

x[i] =

(sin(2*PI*200/16000*i)+sin(2*PI*100

0/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);

system("PAUSE");

return EXIT_SUCCESS;

}

3. Circular Fraksional

#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

float koef_filter[BUFFERLENGTH] =

{Koefisien filter pada yang didapat

modul 1};

float buffer[BUFFERLENGTH];

float x[LENGTH];

float y[LENGTH];

int i, j, k;

float filter (float input)

{

float hasil;

// meletakkan input pada buffer

buffer[k]=input*32767;

hasil=0;

// perhitungan filter

for(j=0;j<BUFFERLENGTH;

j++)

{

hasil=hasil+koef_filter[j]*

buffer[(j+k)%BUFFERLENGT

H];

}

k=(k+BUFFERLENGTH-

1)%BUFFERLENGTH;

hasil=hasil/32767;

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*100

0/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("output2.txt", "w");

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

Page 9: EL3110_02_13213107

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9

fprintf(pFile,"%4.4f\n", y[i]);

}

fclose(pFile);

system("PAUSE");

return EXIT_SUCCESS;

}