A. Tujuan Mahasiswa memahami filter IIR Mahasiswa dapat merancang filter IIR 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 yang tidak terbatas pada IIR disebabkan oleh adanya feedback atau umpan balik pada filter. Filter IIR secara komputasi lebih efektif dibanding filter FIR karena membutuhkan koefisien filter yang lebih sedikit. Fungsi transfer filter IIR ditunjukkan pada persamaan di bawah ini dengan ak dan bk adalah koefisien filter.
H (z) =
= k =0 M 1+ a k z k
z k
k= 1
= bk x[ n k ] a k y[ n k ]
k =0 k =1
18
x ( n
y ( n
- 1
- 1
- 1
- 1
1 set PC yang dilengkapi Code Composer Studio Versi 3.1 TMS320C6713 DSK board +5V universal Power Supply AC Power Cord USB Cable Osiloskop Function Generator
19
1. Jalankan MATLAB dan ketikkan program berikut untuk mendapat nilai koefisien dari LPF dan HPF
2. %IIR Low Pass Butterworth filter %sampling rate-24000 order = 2 cf=[2500/12000]; %cutoff freq - 2500 [num_bw,den_bw1]=butter(order,cf,'low');
3. Program di atas untuk mencari nilai koefisien dari LPF dengan spesifikasi orde 2, frekuesi cutoff 2500. 4. Untuk simpanlah nilai koefisien yang didapat dan carilah nilai koefisien lain dengan spesifikasi sebagai berikut. a. LPF (Freq cutoff = 800) b. HPF (Freq cutoff = 2500) c. HPF (Freq cutoff = 4000) d. HPF (Freq cutoff = 7000)
5. Untuk
mendapat
nilai
koefisien
HPF,
ubahlan
program
dari menjadi
[num_bw,den_bw1]=butter(order,cf,'low'); [num_bw,den_bw1]=butter(order,cf,'high'); 6. Gabungkan nilai koefisien yang didapat sehingga menjadi format sebagai berikut. const signed int filter_Coeff[]= { 0.6268,-1.2537,0.6268,1.0000,-1.1092,0.3982 // // // // }; 0.0095,0.0191,0.0095,1.0000,-1.7056,0.7437 0.0722,0.1445,0.0722, 1.0000,-1.1092,0.3982 0.4652,-0.9303,0.4652,1.0000,-0.6202,0.2404 0.2202,-0.4404,0.2202,1.0000,0.3076,0.1883 /*HPF 2500*/ /*LPF 800 */ /*LPF 2500 */ /*HPF 4000 */ /*HPF 7000 */
20
7. hilangkan tanda (//) jika ingin mengaktifkan filter. 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 iir 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 iir_bios.cdb dan kemudian klik Open.
7. Pilih Project Scan All File Dependencies. Maka secara otomatis file-file bentukan
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.
21
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 iir.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 iir.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\include. Pada kolom Pre-Define Symbol (-d), isi dengan _DEBUG; SHIP_6713, lalu klik tombol OK.
12. Masukkan kode berikut ke dalam iir.c
const signed int filter_Coeff[]= { 0.6268,-1.2537,0.6268,1.0000,-1.1092,0.3982 // // // // }; /* konfigurasi codec */ DSK6713_AIC23_Config config = {\ 0x0017, /* 0 DSK6713_AIC23_LEFTINVOL left line input channel volume */\ 0.0095,0.0191,0.0095,1.0000,-1.7056,0.7437 0.0722,0.1445,0.0722, 1.0000,-1.1092,0.3982 0.4652,-0.9303,0.4652,1.0000,-0.6202,0.2404 0.2202,-0.4404,0.2202,1.0000,0.3076,0.1883 /*HPF 2500*/ /*LPF 800 */ /*LPF 2500 */ /*HPF 4000 */ /*HPF 7000 */
22
0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL right line input channel volume */\ 0x00d8, /* 2 DSK6713_AIC23_LEFTPVOL left channel headphone volume */\ 0x00d8, /* 3 DSK6713_AIC23_RIGHTPVOL 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 */\ 0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */\ 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */\ }; int l_input, r_input, l_output, r_output;
DSK6713_AIC23_setFreq(hCodec,3);
while(1) {
23
/* baca sample untuk channel kiri */ while(!DSK6713_AIC23_read(hCodec,&l_input)); /* baca sample untuk channel kanan */ while(!DSK6713_AIC23_read(hCodec,&r_input));
/* kirim sample ke channel kiri */ while(!DSK6713_AIC23_write(hCodec,l_output)); /* kirim sample ke channel kanan */ while(!DSK6713_AIC23_write(hCodec,r_output)); } /* tutup codec */ DSK6713_AIC23_closeCodec(hCodec); } signed int IIR_FILTER(const signed int * h, signed int x1) { static signed int x[6]={0,0,0,0,0,0}; /* x(n),x(n-1),x(n-2). harus static */ static signed int y[6]={0,0,0,0,0,0}; /* y(n),y(n-1),y(n-2). harus static */ int temp=0;
24
temp += ((int)h[1]*x[1]); /* B1/2*x(n-1) */ temp += ((int)h[1]*x[1]); /* B1/2*x(n-1) */ temp += ((int)h[2]*x[2]); /* B2*x(n-2) */ temp -= ((int)h[4]*y[1]); /* A1/2*y(n-1) */ temp -= ((int)h[4]*y[1]); /* A1/2*y(n-1) */ temp -= ((int)h[5]*y[2]); /* A2*y(n-2) */
temp>>=15;
y[0] = temp;
y[2]=y[1]; y[1]=y[0];
25
x[2]=x[1]; x[1]=x[0];
return (temp<<2); }
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 iir.out dan klik Open.
15. Untuk menjalankan program pilih Debug - Run (F5)
16. Setting function generator dengan amplitude (1Vpp) dan frekuensi 500Hz. 17. Amati hasil keluaran sinyal pada layar Osiloskop.
18. Ubah-ubahlah nilai frekuensi pada Function Generator secara bertahap (kenaikan 500Hz)
hingga mencapai 5000Hz untuk melihat respon filter. 19. Catatlah perubahan yang terjadi setiap penggantian frekuensi tersebut.
E. Evaluasi 1. Lakukan pengukuran sesuai table di bawah a. HPF, Fc=2500Hz, Amplitudo = 1 Vpp Frekuensi (Hz) 500 1000 2000 3000 4000 5000 Vout (Vpp)
26
b. LPF, Fc=800Hz, Amplitudo = 1 Vpp Frekuensi (Hz) 500 1000 2000 3000 4000 5000 Vout (Vpp)
c. LPF, Fc=2500Hz, Amplitudo = 1Vpp Frekuensi (Hz) 500 1000 2000 3000 4000 5000 Vout (Vpp)
d. HPF, Fc=4000Hz, Amplitudo = 1Vpp Frekuensi (Hz) 1000 2000 3000 4000 5000 7000 Vout (Vpp)
e. HPF, Fc=7000Hz, Amplitudo = 1Vpp Frekuensi (Hz) 2000 3000 Vout (Vpp)
27
28