Senin, 22 April 2013

Percobaan 5. Konvolusi



 PERCOBAAN 5
 OPERASI KONVOLUSI

  
Tujuan Praktikum

-  Mahasiswa dapat memahami tujuan dan proses operasi konvolusi pada dua sinyal
-  Mahasiswa dapat membuat program operasi konvolusi dan mengetahui fungsi konvolusi dari suatu sinyal terhadap sistem


6.1  DASAR TEORI

6.1.1  Konvolusi dua Sinyal
Berikut ini akan ditunjukkan konvolusi dua sinyal. Konvolusi antara dua sinyal diskrit x[n] dan v[n] dapat dinyatakan sebagai





Bentuk penjumlahan yang ada di bagian kanan pada persamaan (1) disebut sebagai convolution sum. Jika x[n] dan v[n] memiliki nilai 0 untuk semua integer pada n<0, selanjutnya x[i]=0 untuk semua integer pada i<0 dan v[i-n]=0 untuk semua integer n – i < 0 (atau n<i). Sehingga jumlahan pada persamaan (1) akan menempati dari nilai i=0 sampai dengan i=n, dan operasi konvolusi selanjutnya dapat dituliskan sebagai:

 6.1.2  Mekanisme Konvolusi

Komputasi pada persamaan (1) dan (2) dapat diselesaikan dengan merubah discretetime index n sampai dengan i dalam sinyal x[n] dan v[n]. Sinyal yang dihasilkan x[i] dan v[i] selanjutnya menjadi sebuah fungsi discrete-time index i. Step berikutnya adalah menentukan v[n-i] dan kemudian membentuk pencerminan terhadap sinyal v[i]. Lebih tepatnya v[-i] merupakan pencerminan dari v[i] yang diorientasikan pada sumbu vertikal (axis), dan v[n-i] merupakan v[-i] yang digeser ke kanan deng an step n. Saat pertama kali product (hasil kali) x[i]v[n-i] terbentuk, nilai pada konvolusi x[n]*v[n] pada titik n dihitung dengan menjumlahkan nilai x[i]v[n-i] sesuai rentang i pada sederetan nilai integer tertentu.

Untuk lebih jelasnya permasalahan ini akan disajikan dengan suatu contoh penghitung konvolusi pada dua deret nilai integer berikut ini.
Sinyal pertama: x[i]= 1 2 3
Sinyal kedua   : v[i]= 2 1 3

• Step pertama adalah pembalikan sinyal kedua, v[n] sehingga didapatan kondisi seperti berikut:
Sinyal pertama: x[i] = 1 2 3
Sinyal kedua: v[-i] = 3 1 2

• Step ke dua adalah pergeseran dan penjumlahan
Sinyal pertama:   1 2 3
Sinyal kedua: 3 1 2
------------------ x
product and sum: 0 0 2 0 0 = 2
• Step ke tiga adalah pergeseran satu step dan penjumlahan
Sinyal pertama: 1 2 3
Sinyal kedua: 3 1 2
--------------------- x
product and sum: 0 1 4 0 = 5

• Step ke empat adalah pergeseran satu step dan penjumlahan
Sinyal pertama: 1 2 3
Sinyal kedua:     3 1 2
------------------------- x
product and sum: 3 2 6 = 11

• Step ke lima adalah pergeseran satu step dan penjumlahan
Sinyal pertama: 1 2 3
Sinyal kedua:        3 1 2
------------------- x
product and sum: 0 6 3 0 = 9

• Step ke enam adalah pergeseran satu step dan penjumlahan
Sinyal pertama: 1 2 3
Sinyal kedua:          3 1 2
------------------- x
product and sum: 0 0 9 0 0 = 9

• Step ke tujuh adalah pergeseran satu step dan penjumlahan
Sinyal pertama: 1 2 3
Sinyal kedua:              3 1 2
------------------- x
product and sum: 0 0 0 0 0 0 = 0

Dari hasil product and sum tersebut hasilnya dapat kita lihat dalam bentuk deret sebagai berikut: 2 5 11 9 9. Disini hasil penghitungan product and sum sebelum step pertama dan step ke tujuh dan selanjutnya menunjukkan nilai 0, sehingga tidak ditampilkan. Secara grafis dapat dilihat seperti berikut ini:
Gambar 6.1. Mekanisme Konvolusi

Pada Gambar 6.1 bagian atas, menunjukkan sinyal x[n], bagian kedua menunjukkan sinyal v[n], sedangkan bagian ketiga atau yang paling bawah merupakan hasil konvolusi.

6.2 Peralatan

   Sistem Operasi Windows dan Perangkat Lunak Matlab yang dilengkapi dengan tool box DSP

6.3  Langkah Percobaan
6.3.1  Konvolusi Dua Sinyal
Misalnya ada dua sekuen sebagai berikut:
x(n) = [3, 11, 7, 0, -1, 4, 2],        -3 ≤ n ≤ 3
dan
h(n) = [2, 3, 0, -5, 2, 1]                -1≤ n ≤ 4
kemudian akan ditentukan konvolusi y(n) = x(n) * h(n). Jika sekuen acak dengan durasi yang terbatas. MATLAB tidak dapat dignakan secara langsung untuk menghitung konvolusi. MATLAB menyediakan fungsi yang sudah jadi, disebut CONV yang menghitung konvolusi antara dua sekuen dimulai pada n = dan perintahnya adalah:
y = conv (x,h);
Untuk mencari nilai-nilai y(n) untuk percobaan di atas program MATLAB-nya adalah:
%----------------------------------------------------------------------
%Nama File : Konvolusi_1.m
%Oleh          :Tri Budi Santoso, Miftahul Huda, Hary Octvianto
%----------------------------------------------------------------------
 x(n) = [3, 11, 7, 0, -1, 4, 2];       
h(n) = [2, 3, 0, -5, 2, 1];        
y = conv(x,h);

Walupun demikian, fungsi CONV tidak menyediakan dan tidak pula menerima informasi pewaktuan apapun jika sekuen mempunyai support yang sembaarang. Apa yang dipeerlukan adalah titik awal dan akhir dari y(n). Diberikan suatu durasi tertentu x(n) dan y(n) sangatlah mudah untuk menentukan titik-titik ini. Misalnya:
{x(n); nxb ≤ n ≤ nxe} dan {h(n); nhb ≤ n ≤ nhe}
Adalah dua durasi tertentu suatu sekuen. Kita lihat bahwa titik awal dan akhir dari y(n) adalah berturut-turut:
nyb = nxb + nhb dan nxe + nhe
Perluasa dan fungsi conv ( disebut conv_m.m) yang melakukan konvolusi dengan dukungan sekuen yang acak dapat dirancang. Perhatikan berikut ini:

% [y,ny] = conv_m(x,nx,h,nh)
% [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);

Mari kita coba melakukan konvolusi untuk : x(n) = [3, 11, 7, 0, -1, 4, 2], -3 ≤ n ≤ 3  dan  h(n) = [2, 3, 0, -5, 2, 1], -1≤ n ≤ 4, sebagai berikut:

%----------------------------------------------------------------------
%Nama File : Konvolusi_1.m
%Oleh         
%----------------------------------------------------------------------
x = [3, 11, 7, 0, -1, 4, 2];
nx = [-3:3];
h = [2, 3, 0, -5, 2, 1];
nh = [-1:4];
[n,ny]=conv(x,nx,h,nh)

Sehingga:
Y(n) = {6, 31, 47,6, -51, -5, 41, 18, -22, -3, 8, 2}

6.3.2  Konvolusi Dua Sinyal Discrete Unit Step

Disini kita akan membangkitkan sebuah sinyal unit step diskrit yang memiliki nilai seperti berikut:


Dan melakukan operasi konvolusi yang secara matematis dapat dituliskan sebagai berikut:

x[n]*v[n]

Untuk itu langkah yang harus dilakukan adalah sebagai berikut:
1.  Bangkitkan sinyal x[n] dengan mengetikkan perintah berikut:
L=input('Panjang gelombang(>=10) : ');
P=input('Lebar pulsa (lebih kecil dari L): ');

%----------------------------------------------------------------------
%Nama File : Konvolusi_2.m
%Oleh          :Tri Budi Santoso, Miftahul Huda, Hary Octvianto
%----------------------------------------------------------------------
%Sinyal x(n)
 for n=1:L
if n<=P
x(n)=1;
else
x(n)=0;
end
end
t=1:L;
subplot(3,1,1)
stem(t,x)

2. Jalankan program dan tetapkan nilai L=20 dan P=10.
3. Selanjutnya masukkan pembangkitan sekuen unit step ke dua dengan cara menambahkan syntax   berikut ini di bawah program anda pada langkah pertama:

%Sinyal v(n)

for n=1:L
if n<=P
v(n)=1;
else
v(n)=0;
end
end
t=1:L;
subplot(3,1,2)
stem(t,v)

4. Coba jalankan program dan tambahkan perintah berikut:

subplot(3,1,3)
stem(conv(x,v))     %Konvolusi sinyal: x(n)*v(n)

5. Coba anda jalankan seperti pada langkah kedua, dan apakah hasilnya seperti ini?

Gambar 6.2. Contoh Hasil Konvolusi

6. Ulangi langkah ke 5 dan rubahlah nilai untuk L=12, 15, dan 12.
Sedangkan untuk P masukkan nilai 10, 5, dan 12, apa yang terjadi?

6.3.3 Konvolusi Dua Sinyal Sinus
Di sini kita mencoba untuk membangkitkan dua sinyal sinus dan melakukan operasi konvolusi untuk keduanya. Langkah yang harus anda lakukan adalah sebagai berikut:

1. Buat program untuk membangkitkan dua gelombang sinus seperti berikut:
  • L      =input('Banyaknya titik sampel(>=20): ');
  • f1     =input('Besarnya frekuensi gel 1 adalah Hz: ');
  • f2     =input('Besarnya frekuensi gel 2 adalah Hz: ');
  • teta1=input('Besarnya fase gel 1(dalam radiant): ');
  • teta2=input('Besarnya fase gel 2(dalam radiant): ');
  • A1    =input('Besarnya amplitudo gel 1: ');
  • A2    =input('Besarnya amplitudo gel 2: ');

%----------------------------------------------------------------------
%Nama File : Konvolusi_3.m
%Oleh          :Tri Budi Santoso, Miftahul Huda, Hary Octvianto
%----------------------------------------------------------------------
%Sinus pertama
t=1:L;
t=2*t/L;
y1=A1*sin(2*pi*f1*t + teta1*pi);
subplot(3,1,1)
stem(y1)
%SInus kedua
t=1:L;
t=2*t/L;
y2=A2*sin(2*pi*f2*t + teta2*pi);
subplot(3,1,2)
stem(y2)

2.  Coba anda jalankan program anda dan isikan seperti berikut ini:
Banyaknya titik sampel(>=20): 20
Besarnya frekuensi gel 1 adalah Hz: 1
Besarnya frekuensi gel 2 adalah Hz: 0.5
Besarnya fase gel 1(dalam radiant): 0
Besarnya fase gel 2(dalam radiant): 0.5
Besarnya amplitudo gel 1: 1
Besarnya amplitudo gel 2: 1
Perhatikan tampilan yang dihasilkan. Apakah ada kesalahan pada program anda?

3.  Lanjutkan dengan menambahkan program berikut ini pada bagian bawah program yang anda buat tadi.

subplot(3,1,3)
stem(conv(y1,y2))

4.  Jalankan program anda, dan kembali lakukan pengisian seperti pada langkah ke 3. Lihat hasilnya apakah anda melihat tampilan seperti berikut?

Gambar 6.3. Contoh Hasil Konvolusi Dua Sinyal Sinus

5. Ulangi langkah ke 4, dengan menetapkan nilai sebagai berikut: L=50. w1=w2=2, teta1=1.5, teta2=0.5, dan A1=A2=1. Apa yang anda dapatkan? Apakah anda mendapatkan hasil yang berbeda dari program sebelumnya? Mengapa ?

6.3.4  Konvolusi Sinyal Bernoise dengan Raise Cosine
Sekarang kita mulai mencoba utnuk lebih jauh melihat implementasi dari sebuah operasi konvolusi. Untuk itu ikuti langkah-langkah berikut.
1. Bangkitkan sinyal raise cosine dan sinyal sinus dengan program berikut.

%----------------------------------------------------------------------
%Nama File : Konvolusi_3.m
%Oleh          :Tri Budi Santoso, Miftahul Huda, Hary Octvianto
%----------------------------------------------------------------------
%convolusi sinyal sinus bernoise dengan raise cosine;
n=-7.9:.5:8.1;
y=sin(4*pi*n/8)./(4*pi*n/8);
figure(1);
plot(y,'linewidth',2)
t=0.1:.1:8;
x=sin(2*pi*t/4);
figure(2);
plot(x,'linewidth',2)

Gambar 6.4. Sinyal Raise Cosine
Gambar 6.5. Sinyal Sinus Asli

2. Tambahkan noise pada sinyal sinus.

t=0.1:.1:8;
x_n=sin(2*pi*t/4)+0.5*randn*sin(2*pi*10*t/4)+,... 0.2*randn*sin(2*pi*12*t/4);
figure(3);
plot(x_n,'linewidth',2)

Gambar 6.6. Sinyal Sinus Bernoise

3. Lakukan konvolusi sinyal sinus bernoise dengan raise cosine, perhatikan apa yang terjadi?
xy=conv(x_n,y);
figure(4);
plot(xy,'linewidth',2)

Gambar 6.7. Hasil Konvolusi

4. Coba anda lakukan perubahan pada nilai sinyal raise cosine dengan mengurangi rentang nilai pada n, bisa anda buat lebih pendek atau lebih panjang, dan ulangi lagi langkah 3, catat apa yang terjadi.

6.3.5  Konvolusi Pada Sinyal Audio

Coba kita lihat bersama bagaimana pengaruh operasi konvolusi pada sinyal audio, dalam hal ini kita ulangi permainan seperti pada modul sebelumnya. Untuk itu ikuti langkah berikut.

  1. Buat sebuah program baru sebagai brikut:
 %----------------------------------------------------------------------
%Nama File : Konvolusi_4.m
%Oleh          :Tri Budi Santoso, Miftahul Huda, Hary Octvianto
%----------------------------------------------------------------------
%convolusi_1.m
clear all;
[Y,Fs] = wavread('lagu_1_potong.wav');
Fs = 16000;%nilai default Fs=16000
sound(Y,Fs)

Apa yang anda dapatkan?

2. Beri tanda % pada sound(Y,Fs) untuk membuatnya tidak diekesekusi oleh Matlab, sehingga menjadi % sound(Y,Fs). Kemudian tambahkan perintah berikut.

nois = randn(length(Y),1);
Y_noise = Y + 0.08*nois;
sound(Y_noise,Fs)

Coba amati lagi apa yang terjadi?

3.  Buat perintah sound tidak aktif, kemudian bangkitkan sebuah sinyal yang bernilai 1 dengan cara seperti berikut.

satu = ones(4,1);

4.   Lakukan operasi konvolusi dan dengarkan hasilnya pada speaker anda

Y_c = conv(satu,Y_noise);
sound(Y_c,Fs)
 
6.4. Analisa Data
Setelah anda melakukan praktikum dengan sukses, ada satu hal yang selalu anda harus lakukan, yaitu membuat dokumentasi dari pekerjaan anda. Untuk itu cobalah anda catat semua yang telah anda lakukan dan jawablah beberapa pertanyaan berikut ini:
1. Bagaimana bentuk dasar dari sebuah operasi konvolusi ?
2. Apa pengaruh operasi konvolusi pada sinyal sinus bernoise ?
3. Dimana pemakaian operasi konvolusi pada system yang pengolah audio?

6.5. Tugas
1.  Demonstrasikan sebah aplikasi crosscorrelation menggunakan program MATLAB jika diketahui:
X(n) = [3, 11, 7, 0,-1, 4, 2]
Adalah prototipe sekuen dan misalkan y(n) adalah versi noise-corrupted and shifted-nya;
Y(n) = x(n-2)-W(n)
Dengan W(n) adalah sekuen Gaussian dengan rata-rata (mean) 0 dan varian 1. Hitug crosscorrelation antara y(n) dan x(n)

2. Misalkan pulsa rectangular x(n) = u(n) – u(n-10) dijadikan sebagai masukan pada sistem LTI dengan impulse respon
h(n) =  (0,9)n u(n)
Tentukan keluaran y(n) dan plot hasil impulse x(n) fungsi respon (h(n)) dan keluaran (y(n)) dan diskusikan hasilnya.

3. Diberikan dua sekuen sebagai berikut:
x(n) = [3, 11, 7, 0, -1, 4, 2] , -3 ≤n≤ 3; dan h(n) = [2, 3, 0, -5, 2, 1], -1 ≤n≤ 4
tentukan konvolusi y(n) = x(n)*h(n)