MODUL IV Finite Impulse Response (FIR)

11

Click here to load reader

Transcript of MODUL IV Finite Impulse Response (FIR)

Page 1: MODUL IV Finite Impulse Response (FIR)

MODUL IV

FIR (Finite Impulse Response)

A. Tujuan

- Mahasiswa memahami filter FIR

- Mahasiswa dapat merancang filter FIR pada TMS320C6713

B. Dasar Teori

Dalam perancangan filter digital dikenal istilah filter IIR (Infinite Impulse Response)

dan filter FIR (Finite Impulse Response). Perbedaannya terletak pada respon impuls, filter

IIR memilki respon impulse yang tidak terbatas sedangkan filter FIR memiliki respon impuls

yang terbatas.

Respon impuls terbatas pada filter FIR disebabkan tidak adanya feedback. Hal ini juga

menyebabkan system FIR selalu stabil. Dibandingkan dengan IIR, FIR lebih mudah

diimplementasikan. Pada sebagian besar DSP mikrosprocessor, system FIR dapat dilakukan

dengan me-looping instruksi tunggal. Namun kerugian penggunaan FIR adalah jumlah

komputasi yang lebih banyak sehingga menggunakan memori yang lebih banyak.

Berikut ini adalah fungsi transfer system FIR, dengan b merupakan koefisien filter

Gambar 1. Realisasi system FIR

C. Peralatan

Alat yang dibutuhkan:

- 1 set PC yang sudah terinstal Code Composer Studio Versi 3.1

25

Page 2: MODUL IV Finite Impulse Response (FIR)

- TMS320C6713 DSK board

- +5V universal Power Supply

- AC Power Cord

- USB Cable

- function generator

- Osiloskop

D. Prosedur Praktikum

MATLAB

1. Jalankan program matlab dan ketik program berikut untuk mencari nilai koefisien

masing-masing filter (HPF, LPF, dan BPF).

%Spesifikasi: %Cut-off frequency: 3 KHz %Sampling rate: 32000 samples/sec %Filter order: 20% LPF N=20;M=N+1;fc=1000;Fs=8000;wc=2*fc/Fs; win=rectwin(M);b=fir1(N,wc,win);a=1;freqz(b,a);title('FIR LPF menggunakan rectangular window');grid on;% HPFN=20;M=N+1;fc=1000;Fs=8000;wc=2*fc/Fs; win=rectwin(M);b=fir1(N,wc,'high',win)a=1;freqz(b,a);title('FIR HPF menggunakan rectangular window');grid on;

2. Untuk mendapatkan nilai koefisien LPF maka nonaktifkan program HPF terlebih dahulu

dengan cara member tanda (%) sebelum baris program.

3. Jalankan program dan simpan nilai koefisien yang didapat.

26

Page 3: MODUL IV Finite Impulse Response (FIR)

4. Lakukan hal yang sama untuk mendapatkan nilai koefisien untuk HPF.

5. Untuk mendapatkan nilai koefisien dari BPF maka ketik program berikut.

%Specifications: %Cut-off frequencies: 3 KHz and 18kHz%Sampling rate: 32000 samples/sec %Filter order: 10%Beta: 4N=20;M=N+1;fc=[5000 10000];Fs=32000;beta=4;wc=2*fc/Fs; win=kaiser(M,beta);b=fir1(N,wc,win)a=1;freqz(b,a);title('FIR BPF using Kaiser window');grid on;

6. Jalankan program dan simpan nilai koefisien yang didapat.

7. Gabungkan semua nilai koefisien tersebut sehingga tampilan menjadi seperti berikut.

//Filter coefficients//uncomment untuk memilih koefisien filterconst float h[]={//LPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window/*0.0312,0.0245,-0.0000,-0.0315,-0.0519,-0.0441,0.0000,0.0734,0.1558,0.2203,0.2447,0.2203,0.1558,0.0734,0.0000,-0.0441,-0.0519,-0.0315,-0.0000,0.0245,0.0312*///HPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window/*-0.0328,-0.0258,-0.0000,0.0331,0.0547,0.0464,-0.0000,-0.0773,-0.1641,-0.2320,0.7732,-0.2320,-0.1641,-0.0773,-0.0000,0.0464,0.0547,0.0331,-0.0000,-0.0258,-0.0328*///BPF, fc1=5kHz, fc2=10kHz, Fs=32kHz, N=20, Kaiser window, Beta =4/*0.0353,-0.0533,-0.0405,0.0171,-0.0175,0.0388,0.1384,-0.0625,-0.2644,0.0300,0.3184,0.0300,-0.2644,-0.0625,0.1384,0.0388,-0.0175,0.0171,-0.0405,-0.0533,0.0353*/};

27

Page 4: MODUL IV Finite Impulse Response (FIR)

DSK 6713

1. Hubungkan DSP board pada PC kemudian nyalakan

2. Buka Code Composer Studio

3. Pilih Debug – Connect, untuk menghubungkan CCS dengan DSK6713

4. Pilih Project – New

Arahkan lokasi direktori ke tempat lain jika perlu (folder baru).

Berilah nama project dengan nama “fir”

Pilih Project Type dengan Executable (.out)

Pilih Target dengan TMS320C67XX

Klik tombol Finish

5. Pilih File – New – DSP/BIOS Configuration. Pilih “dsk6713.cdb” dan klik tombol OK.

Biarkan konfigurasi sesuai defaultnya. Pilih File – Save, simpan di folder project yang

sebelumnya dibuat (harus 1 folder) dan beri nama fft_bios lalu klik Save. Maka 7 file

akan terbentuk secara otomatis pada folder tersebut.

6. Masukkan file-file DSP/BIOS ke dalam project, pilih Project – Add Files to Project.

Pilih Files of type dengan Configuration Files (*.cdb), lalu pilih “fir_bios.cdb” dan

kemudian klik Open.

7. Pilih Project – Scan All File Dependencies. Maka secara otomatis file-file bentukan

DSP/BIOS yang lain akan masuk ke dalam project.

8. Masukkan file library yang diperlukan. Pilih Project – Add Files to Project, Pilih Files

of type dengan Object and Library Files (*.o*;*.l*), arahkan lokasi direktori ke C:\

CCStudio_v3.1\C6000\dsk6713\lib lalu pilih “dsk6713bsl.lib” dan klik tombol Open.

9. Menambahkan file source. Pilih File – New – Source File. Setelah halaman kerja terbuka

pilih File – Save. Arahkan kembali ke lokasi direktori ke dalam folder project yang telah

dibuat. Beri nama “fir.c”, klik tombol Save.

10. Tambahkan file source ke dalam project. Pilih Project – Add Files to Project. Arahkan

lokasi direktori ke folder project iir. Pilih Files of type dengan C Source Files (*.c;*.cpp),

pilih file “fir.c” lalu klik tombol Open.

11. Mengatur pilihan proses build. Pilih Project – Build Options. Pilih kategri Prepocessor.

Pada kolom Include Search Path (-i), isi dengan C:\CCStudio_v3.1\C6000\dsk6713\

28

Page 5: MODUL IV Finite Impulse Response (FIR)

include. Pada kolom Pre-Define Symbol (-d), isi dengan _DEBUG; SHIP_6713, lalu klik

tombol OK.

12. Masukkan kode berikut ke dalam fir.c

#include "fircfg.h"##include "dsk6713.h"#include "dsk6713_aic23.h"#define N 20 // order of filterextern signed long FIR_FILTER(signed int);

//Filter coefficients//uncomment untuk memilih koefisien filterconst float h[]={//LPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window/*0.0312,0.0245,-0.0000,-0.0315,-0.0519,-0.0441,0.0000,0.0734,0.1558,0.2203,0.2447,0.2203,0.1558,0.0734,0.0000,-0.0441,-0.0519,-0.0315,-0.0000,0.0245,0.0312*/

//HPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window/*-0.0328,-0.0258,-0.0000,0.0331,0.0547,0.0464,-0.0000,-0.0773,-0.1641,-0.2320,0.7732,-0.2320,-0.1641,-0.0773,-0.0000,0.0464,0.0547,0.0331,-0.0000,-0.0258,-0.0328*/

//BPF, fc1=5kHz, fc2=10kHz, Fs=32kHz, N=20, Kaiser window, Beta =4/*0.0353,-0.0533,-0.0405,0.0171,-0.0175,0.0388,0.1384,-0.0625,-0.2644,0.0300,0.3184,0.0300,-0.2644,-0.0625,0.1384,0.0388,-0.0175,0.0171,-0.0405,-0.0533,0.0353*/};

static short in_buffer[N]; //buffer variableDSK6713_AIC23_Config config = { \ 0x0017, /* 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume */ \ 0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume */\ 0x00d8, /* 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume */ \ 0x00d8, /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */ \ 0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ \ 0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ \ 0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ \ 0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ \

29

Page 6: MODUL IV Finite Impulse Response (FIR)

0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */ \ 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ \};

//Main programvoid main(){ DSK6713_AIC23_CodecHandle hCodec; Uint32 l_input, r_input,l_output, r_output; /* Initialize the board support library, must be called first */ DSK6713_init(); /* Start the codec */ hCodec = DSK6713_AIC23_openCodec(0, &config); /* Set sampling rate*/ DSK6713_AIC23_setFreq(hCodec, 4); while(1) { /* Read a sample to the left channel */ while (!DSK6713_AIC23_read(hCodec, &l_input)); /* Read a sample to the right channel */ while (!DSK6713_AIC23_read(hCodec, &r_input)); l_output=(Int16)FIR_FILTER(l_input); r_output=l_output; /* Send a sample to the left channel */ while (!DSK6713_AIC23_write(hCodec, l_output));

/* Send a sample to the right channel */ while (!DSK6713_AIC23_write(hCodec, r_output)); }}//Subprogram bodysigned long FIR_FILTER(signed int x){int i,M;signed long y=0; //output variableM=N+1;in_buffer[0] = x; // new input at buffer[0] for(i=M;i>0;i--) in_buffer[i] = in_buffer[i-1]; // shuffle the buffer for(i=0;i<M;i++) y += h[i] * in_buffer[i]; //filter return(y);}

30

Page 7: MODUL IV Finite Impulse Response (FIR)

13. Pilih Project – Rebuild All

14. Load Program yang telah dibuat, pilih File – Load Program. Masuk ke folder iir, di

dalam folder tersebut masuk ke folder bernama Debug. Lalu pilih “fir.out” dan klik Open.

15. Untuk menjalankan program pilih Debug - Run (F5)

16. Setting function generator dengan spesifikasi amplitude 1Vpp dan frekuensi 500Hz.

17. Amati hasil keluaran sinyal pada layar Osiloskop.

18. Berikut adalah gambar sinya input, filter dan output

Sinyal Input (Freq: 500Hz, Amp=1V) Filter (LPF. Fc: 1KHz, Fs:8000, N=20,

rectangular windowing)

Sinyal Output

19. Ubah-ubahlah nilai sinyal input dari 1 kHz – 6 kHz secara bertahap (kenaikan 500Hz)

pada Function Generator untuk melihat respon filter. Dan lihatlah bentuk sinyal serta

parameter lainnya.

31

Page 8: MODUL IV Finite Impulse Response (FIR)

E. Evaluasi

1. Lakukan pengukuran sesuai table di bawah

a. LPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window, Amplitudo = 1 Vpp

Frekuensi (Hz) Vout (Vpp)

500

1000

2000

3000

4000

5000

b. HPF, fc=1kHz, Fs=8kHz, N=20, Rectangular window, Amplitudo = 1 Vpp

Frekuensi (Hz) Vout (Vpp)

500

1000

2000

3000

4000

5000

c. BPF, fc1=5kHz, fc2=10kHz, Fs=32kHz, N=20, Kaiser window, Beta =4,

Amplitudo = 1Vpp

Frekuensi (Hz) Vout (Vpp)

4000

5000

7500

10000

13000

Amati Vout setiap perubahan frekuensi dan berilah kesimpulan.

32