Modul 7
MODUL 7
2. Tujuan
Setelah menyelesaikan praktikum ini, yang anda peroleh adalah : dapat menjelaskan cara kerja efek audio digital berbasis time-delay khususnya efek echo dapat mengimplementasikan disain efek echo pada DSK TMS320C5402 menggunakan bahasa-C
3. Gambaran Disain
Suara dalam bentuk data digital yang diterima dari ADC akan diproses didalam DSP untuk ditambahkan efek echo, kemudian suara yang telah diproses tersebut dikeluarkan melalui DAC ke speaker agar dapat kita dengar. Untuk membuat efek echo, suara ditahan sementara didalam buffer untuk beberapa saat lalu dikeluarkan sehingga menimbulkan kesan bahwa suara mengalami tundaan. Bila suara tundaan ini diputar berulang-ulang maka akan terdengar suara yang berulang-ulang pula. Teknik membuat buffer untuk efek echo akan anda coba pada praktikum ini.
hary@eepis-its.edu
1/7
Modul 7
4. Dasar Teori
Efek audio banyak digunakan pada pengolahan sinyal audio digital untuk keperluan industri musik. Teknologi ini digunakan untuk menambahkan efek tertentu pada sinyal audio atau memodifikasi sinyal audio. Efek audio secara garis besar dibagi menjadi empat yaitu: Efek berbasis amplitudo sinyal contoh: volume control, panning (ping-pong), compression/expansion, noise gating, dan attach delay. Efek berbasis time-delay contoh: echo, chorus, flanger, robot, reverb dan phasing. Efek distorsi bentuk sinyal contoh: efek distorsi. Efek respon frekuensi (filter digital) contoh: equalizer, pitch shifting. Pada praktikum ini kita akan membahas efek echo, untuk efek yang lain dapat anda pelajari pada literatur lain. Gambar 1 menunjukkan dua contoh efek yaitu efek echo satu lapis (untuk selanjutnya kita sebut dengan efek delay) dan efek echo berlapis (untuk selanjutnya kita sebut dengan efek echo). Efek delay menjumlahkan sinyal masukan (x[n]) dengan sinyal tertunda yang telah dilemahkan. Pada efek echo, sinyal masukan dijumlahkan dengan sinyal tertunda yang telah dilemahkan kemudian sinyal tertunda yang telah dilemahkan dijumlahkan dengan sinyal masukan untuk dimasukkan kembali ke blok delay (Z-D).
Pada gambar 1, simbol kotak bertuliskan Z-D adalah elemen/komponen delay, simbol segitiga bertuliskan huruf a adalah attenuator atau faktor pelemahan dan simbol lingkaran dengan tanda + didalamnya adalah penjumlah. Secara hardware komponen delay merupakan sederetan flip-flop yang membentuk sebuah shift-register. Komponen delay berupa shifregister inilah yang disebut sebagai buffer. Makin panjang ukuran buffer yang digunakan semakin lama pula waktu yang dibutuhkan x[n] untuk mencapai y[n]. Waktu yang dibutuhkan
hary@eepis-its.edu 2/7
Modul 7
data untuk melewati sebuah buffer disebut waktu tunda. Waktu tunda dirumuskan sebagai berikut: waktu tunda (detik) = ukuran buffer / frekuensi sampling (Hz) .(1) Misalnya kita ingin menunda suara selama 1 detik, bila sistem yang kita pakai menggunakan frekuensi sampling sebesar 16 kHz maka dibutuhkan buffer sebesar 16.000 lokasi. Circular Buffer Tadi disebutkan bahwa buffer yang digunakan untuk menunda suara dapat dibuat dari sederetan flop-flop misalnya tipe D flip-flop. Untuk membuat tundaan selama 1 detik dengan frekuensi sampling 16kHz akan dibutuhkan D flip-flop sebanyak 16.000. Bila kita gunakan IC flip-flop (biasanya dalam sebuah IC terdapat 8 buah flip-flop) akan membutuhkan 2000 IC. Anda bisa bayangkan papan sirkuit yang akan dibutuhkan mungkin lebih lebar dari sebuah bantal yang anda gunakan untuk tidur. Karenanya kita tidak menggunakan D flip-flop untuk membangun sebuah buffer tetapi kita gunakan sebuah memori. Ya, sebuah memori atau RAM. Didalam sebuah sistem mikroprosesor, data akan ditempatkan pada memori. Bila anda menuliskan int buffer[1000]; pada program, artinya anda memesan 1000 lokasi pada memori, diberi nama buffer dengan data bertipe integer. Data didalam buffer dapat diakses dengan dua cara yaitu menggunakan metode shift (geser) dan metode circular buffer. Perhatikan ilustrasi seperti yang ditunjukkan oleh gambar 2, data masuk pada buffer berukuran 4 lokasi lalu digeser. Cara ini mudah dilakukan tetapi untuk ukuran buffer yang sangat besar membutuhkan waktu akses yang cukup lama.
int geser(int input) { int i,j,output; j = ukuran_buffer; for (i<j;i>0,i--) { buffer[i] = buffer[i-1]; } buffer[0] = input; output = buffer[j-1]; return(output); }
Cara kedua ditunjukkan oleh gambar 3, menggunakan teknik circular buffer. Hanya menggunakan dua pointer, yaitu pointer tulis dan pointer baca yang bertugas menunjuk sebuah alamat didalam memori untuk ditulis atau dibaca. Pointer ini nilainya terus bertambah, bila telah mencapai alamat terakhir maka posisi pointer dikembalikan pada posisi awal.
hary@eepis-its.edu
3/7
Modul 7
Dengan metode circular buffer, untuk ukuran buffer yang sangat besar membutuhkan waktu akses yang tidak terlalu lama.
Gambar 3. Metode circular buffer, hardware cirlular buffer (kiri) dan circular buffer untuk panjang buffer N (kanan)
Perhatikan program dalam bahasa-C berikut untuk mengimplementasikan metode circular buffer dengan ukuran buffer sebesar size. Kedua pointer berhimpit, agar berfungsi maka terlebih dahulu dilakukan operasi baca data, kemudian tulis data.
... // deklarasi variabel global int pointer=0; int output; int buffer[size]={0}; ... // subrutin circular buffer // input --> | | | buffer | | | --> output int geser(int input) { // atur pointer if (pointer < j) {pointer++;} else {pointer=0} // ambil data output output = buffer[pointer]; // tulis data input buffer[pointer] = input; return(output); } input
Referensi