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 x(n) 10
8
6
4
2
0
-2 -3
-2
-1
0
1
2
3
y (−1) = ∑ x[k ]h[−1 − k ] k
= 3 × ( −5) + 11 × 0 + 7 × 3 + 0 × 2 =6
2
y (2) = ∑ x[k ]h[2 − k ] k
= 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
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 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
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; 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]
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 % 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
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; 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.
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 rx , y (l) =
∞
∑ x[n] y[n − l]
(8.1)
n = −∞
Indeks l disebut parameter pergeseran. Jika y[n] = x[n] maka diperoleh autokorelasi dan dinyatakan sbg rxx (l) =
∞
∑ x[n]x[n − l]
(8.2)
n = −∞
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] =
∞
(8.3)
∑ x[k ]h[n − k ]
k = −∞
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
Hasil eksekusi program: Kros-korelasi x[n] dan y[n] 250
200
rxy
150
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