TEKNIK PENGOLAHAN ISYARAT DIGITAL Kuliah 8 KONVOLUSI DAN KORELASI Indah Susilawati, S.T., M.Eng. Program Studi Teknik Elektro Program Studi Teknik Informatika Fakultas Teknik dan Ilmu Komputer Universitas Mercu Buana Yogyakarta 2009 1
Kuliah 8 Teknik Pengolahan Isyarat Digital Teknik Elektro UMBY KONVOLUSI DAN KORELASI Contoh 1: Diberikan dua isyarat diskrit sbb x[n] = [3 11 7 0-1 4 2] dengan -3 n 3 dan h[n] = [2 3 0-5 2 1] dengan -1 n 4 maka tentukanlah konvolusi kedua isyarat yaitu y[n] = x[n] * h[n] Penyelesaian: Kedua isyarat dapat digambarkan pada kedua gambar berikut ini. 12 10 x(n) 8 6 4 2 0-2 -3-2 -1 0 1 2 3 y( 1) = k = 3 ( 5) + 11 0 + 7 3 + 0 2 = 6 x[ k] h[ 1 k] 2
y(2) = x[ k] h[2 k] k = 11 1+ 7 2 + 0 ( 5) + ( 1) 0 + 4 3 + 2 2 = 41 3 2 h(n) 1 0-1 -2-3 -4-5 -1-0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 Dengan mencari semua nilai y[n] yang ada maka akan dihasilkan isyarat y[n] sbb: y[n] = [6 31 47 6-51 -5 41 18-22 -3 8 2] Bilangan bergaris bawah menyatakan data yang berada pada posisi n = 0. Untuk mencari nilai n terendah dan tertinggi pada y[n] dimana y[n] ada digunakan rumus dengan nyb = nxb + nhb nye = nxe + nhe nyb : nilai n terendah pada y[n] nye : nilai n tertinggi pada y[n] nxb : nilai n terendah pada x[n] nxe : nilai n tertinggi pada x[n] nhb : nilai n terendah pada h[n] nhe : nilai n tertinggi pada h[n] Sehingga dapat diketahui nyb = -3 + (-1) = -4 atau nye = 3 + 4 = 7 3
ny = [-4-3 -2-1 0 1 2 3 4 5 6 7] Hasil konvolusi dapat digambarkan sbb: 60 hasil konvolusi, y[n] 40 20 0-20 -40-60 -4-2 0 2 4 6 8 Contoh soal di atas dapat diselesaikan menggunakan bantuan program Matlab. Matlab menyediakan fungsi untuk melakukan operasi konvolusi yaitu conv.m. Sintaks penulisannya adalah y = conv(x,h) dengan y adalah hasil konvolusi, x dan h adalah dua isyarat yang dikonvolusikan. Untuk contoh soal di atas dapat diselesaikan dengan program Matlab sbb. % Konvolusi menggunakan Matlab % x[n] = [3 11 7 0-1 4 2] % h[n] = [2 3 0-5 2 1] clear all; % membersihkan semua variabel clc; % membersihkan editor command window x = [3 11 7 0-1 4 2]; % isyarat x[n] h = [2 3 0-5 2 1]; % isyarat h[n] y = conv(x,h) % operasi konvolusi y[n]=x[n]*h[n] Hasil eksekusi program tsb adalah 4
y = 6 31 47 6-51 -5 41 18-22 -3 8 2 Namun Matlab menganggap bahwa semua isyarat dimulai pada saat n = 0, dan pada kenyataannya tidak selalu demikian (seperti pada contoh soal di atas). Untuk mengetahui pewaktuannya maka dapat digunakanrumus untuk mencari nilai n terendah dan tertinggi pada y[n] seperti telah dijelaskan di atas. Dapat dibuat fungsi untuk melakukan operasi konvolusi sekaligus mengetahui pewaktuannya. function [y ny] = conv_m(x,nx,h,nh) % Fungsi untuk memodifikasi rutin konvolusi conv % [y ny] = hasil konvolusi % [x nx] = sinyal pertama % [h nh] = sinyal kedua nyb = nx(1) + nh(1) nye = nx(length(x)) + nh(length(h)) ny = [nyb:nye] y = conv(x,h) % n terendah dari y[n] % n tertinggi dari y[n] % jaungkauan n dari y[n] % mencari y[n]= x[n]*h[n] Fungsi yang telah dibuat dapat dipanggil dalam program lain, seperti contoh berikut untuk memanggil fungsi conv_m.m. % Konvolusi menggunakan fungsi yang telah dimodifikasi % x[n] = [3 11 7 0-1 4 2] % h[n] = [2 3 0-5 2 1] clear all; % membersihkan semua variabel clc; % membersihkan editor x = [3 11 7 0-1 4 2]; % isyarat x[n] nx = [-3:3]; % jangkauan x[n] h = [2 3 0-5 2 1]; % isyarat h[n] nh = [-1:4]; % jangkauan h[n] [y ny] = conv_m(x, nx, h, nh) % konvolusi y[n]=x[n]*h[n] stem(ny, y) % menggambar y[n] Hasil eksekusi program sama dengan hasil konvolusi yang telah dilakukan di atas. 5
KORELASI ANTARA DUA SEKUENS Korelasi adalah operasi yang digunakan dalam berbagai aplikasi dalam bidang pengolahan isyarat secara digital. Korelasi merupakan ukuran derajat kesamaan antara dua isyarat atau sekuens. Jika diketahui x[n] dan y[n] dengan energi yang terbatas maka kros-korelasi antara x[n] dan y[n] didefinisikan sbb x, y ( ) = x[ n] y[ n l n= r l ] (8.1) Indeks l disebut parameter pergeseran. Jika y[n] = x[n] maka diperoleh autokorelasi dan dinyatakan sbg = n= r ( l ) = x[ n] x[ n l] (8.2) xx Autokorelasi menyatakan ukuran kesamaan terhadap dirinya sendiri (antara beberapa penjajaran yang berbeda). Konvolusi antara dua isyarat x[n] dan h[n] dinyatakan sbb y[ n] = x[ n]* h[ n] k = x[ k] h[ n k] (8.3) Dengan membandingkan ketiga persamaan di atas, maka kros-korelasi dapat dinyatakan kembali dalam bentuk r yx ( l) = y( l) * x( l) (8.4) Dan autokorelasi dapat dinyatakan dalam bentuk r xx ( l) = x( l) * x( l) (8.5) Hal ini berarti bahwa korelasi dapat dihitung menggunnakan operasi konvolusi jika isyarat atau sekuens merupakan sekuens dengan durasi yang berhingga. Contoh 2: Jika x[n] = [3 11 7 0 1 4 2] dan y[n] adalah isyarat x[n] yang telah bergeser dan tercampur derau yang dinyatakan dengan y[n] = x[n 2] w[n], dengan w[n] adalah derau Gaussian dengan rerata nol dan varians 1. Tentukan kros-korelasi antara y[n] dan x[n]. 6
Penyelesaian: Dengan memperhatikan isyarat y[n] maka dapat diperkirakan bahwa y[n] adalah sangat mirip dengan x[n-2] dan dengan demikian dapat diperkirakan pula bahwa kros-korelasi akan memperlihatkan kesamaan tertinggi saat l = 2. % Menghitung korelasi antara dua sekuens % x[n] = [3 11 7 0-1 4 2] % y[n] = x[n-2] + w[n] clear all; clc; x = [3 11 7 0-1 4 2]; % sinyal x[n] nx = [-3:3]; % jangkauan n dari x[n] [y ny] = sigshift(x,nx,2); % menggeser x[n] sebanyak 2 satuan w = randn(1,length(y)); % membangkitkan derau Gaussian nw = ny; % panjang w[n] = panjang y[n] [y ny] = sigadd(y,ny,w,nw); % menambahkan sinyal y[n] dan w[n] [x nx] = sigfold(x,nx); % membalikkan sinyal x[n] [rxy nrxy] = conv_m(y,ny,x,nx); % mencari kros-korelasi x[n] & y[n] stem(nrxy,rxy) % menggambar hasil kros-korelasi axis([-5,10,-50,250]) xlabel('variabel pergeseran l') ylabel('rxy') title('kros-korelasi x[n] dan y[n]') Hasil eksekusi program: 250 Kros-korelasi x[n] dan y[n] 200 150 rxy 100 50 0-50 -5 0 5 10 variabel pergeseran l 7
Gambar hasil perhitungan menunjukkan bahwa kros-korelasi tertinggi pada saat l = 2. Berikut adalah fungsi-fungsi yang digunakan pada program penyelesaian contoh 2. % Membuat fungsi untuk menggeser sinyal x[n] % y[n] = x[n-n0] % m adalah jangkauan sinyal x[n ] % n0 adalah besarnya pergeseran function [y n]=sigshift(x,m,n0) n = m + n0; y = x % Membuat fungsi untuk menambah sinyal x1[n] dan x2[n] % y[n] = x1[n]+x2[n] % n adalah jangkauan sinyal y[n] % n1 adalah jangkauan sinyal x1[n] % n2 adalah jangkauan sinyal x2[n] function [y n]=sigadd(x1,n1,x2,n2) n = (min(min(n1),min(n2)):max(max(n1),max(n2))); y1 = zeros(1,length(n)); y2 = y1; y1(find((n>=min(n1))&(n<=max(n1))==1))=x1 y2(find((n>=min(n2))&(n<=max(n2))==1))=x2 y = y1 + y2 % Membuat fungsi untuk membalik sinyal x[n] % y[n] = x[-n] % n adalah jangkauan sinyal x[n] function [y n]=sigfold(x,n) y = fliplr(x); n = -fliplr(n) 8