Program Studi Teknik Elektro Program Studi Teknik Informatika Fakultas Teknik dan Ilmu Komputer Universitas Mercu Buana Yogyakarta 2009
-2 -3
-2
-1
= 3 ( 5) + 11 0 + 7 3 + 0 2 =6
= 11 1 + 7 2 + 0 (5) + (1) 0 + 4 3 + 2 2 = 41
3 h(n) 2 1 0 -1 -2 -3 -4 -5 -1
-0.5
0.5
1.5
2.5
3.5
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 nyb = nxb + nhb nye = nxe + nhe dengan 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 nye = 3 + 4 = 7 atau
ny = [-4 -3 -2 -1 0 1 2 3 4 5 6 7]
20
-20
-40
-60 -4
-2
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; clc; x = [3 11 7 0 -1 4 2]; h = [2 3 0 -5 2 1]; y = conv(x,h) % % % % % membersihkan semua variabel membersihkan editor command window isyarat x[n] isyarat h[n] operasi konvolusi y[n]=x[n]*h[n]
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 % Fungsi % [y ny] % [x nx] % [h nh] [y ny] = conv_m(x,nx,h,nh) untuk memodifikasi rutin konvolusi conv = hasil konvolusi = sinyal pertama = sinyal kedua % % % % 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; clc; x = [3 11 7 0 -1 4 2]; nx = [-3:3]; h = [2 3 0 -5 2 1]; nh = [-1:4]; [y ny] = conv_m(x, nx, h, nh) stem(ny, y) % % % % % % % % membersihkan semua variabel membersihkan editor isyarat x[n] jangkauan x[n] isyarat h[n] jangkauan h[n] konvolusi y[n]=x[n]*h[n] menggambar y[n]
Hasil eksekusi program sama dengan hasil konvolusi yang telah dilakukan di atas.
n =
x[n] y[n l]
(8.1)
Indeks l disebut parameter pergeseran. Jika y[n] = x[n] maka diperoleh autokorelasi dan dinyatakan sbg
rxx (l) =
n =
x[n]x[n l]
(8.2)
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
ryx (l) = y (l) * x( l)
(8.4)
Dan autokorelasi dapat dinyatakan dalam bentuk rxx (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]; % nx = [-3:3]; % [y ny] = sigshift(x,nx,2); % w = randn(1,length(y)); % nw = ny; % [y ny] = sigadd(y,ny,w,nw); % [x nx] = sigfold(x,nx); % [rxy nrxy] = conv_m(y,ny,x,nx); % stem(nrxy,rxy) % axis([-5,10,-50,250]) xlabel('variabel pergeseran l') ylabel('rxy') title('Kros-korelasi x[n] dan y[n]')
sinyal x[n] jangkauan n dari x[n] menggeser x[n] sebanyak 2 satuan membangkitkan derau Gaussian panjang w[n] = panjang y[n] menambahkan sinyal y[n] dan w[n] membalikkan sinyal x[n] mencari kros-korelasi x[n] & y[n] menggambar hasil kros-korelasi
200
150
rxy
100
50
-50 -5
0 variabel pergeseran l
10
% % % % %
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]
% 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)