Categories
DSP

Nyquist – Apaan tuch?

Dalam dunia Pemrosesan Sinyal Digital, ada suatu proses untuk mendapatkan data digital melalui proses pencuplikan, artinya sinyal analog dicuplik (diambil) secara diskrit dengan periode Ts atau frekuensi cuplik Fs. Nah agar tidak terjadi kesalahan (yang kemudian diberi nama aliasing), pak Nyquist memberikan aturan bahwa frekuensi cuplik minimal harus 2 (dua) kali lipat frekuensi maksimum yang dikandung sinyal yang bersangkutan.

Untuk memahami hal tersebut, mari kita persiapkan dulu sinyal sinusoidal dengan frekuensi 2 Hz. Kita gunakan frekuensi cuplik 1000 Hz atau periode 0.001 detik (supaya gambarnya jauh lebih ‘mulus’ dibandingkan dengan eksperimen-eksperimen yang akan kita lakukan)…

>>t=0:0.001:1;
>>f=2;
>>y=sin(2*pi*f*t);

Okey, Anda siap? Konsenterasi… kita awali dengan menyiapkan gambar (perintah figure), kemudian diteruskan dengan menyiapkan variabel waktu t1 dengan frekuensi sampling = frekuensi sinyal (atau periodenya 1/f detik), kita hitung y1-nya kemudian kita gambarkan sinyal asli y dan sinyal hasil pencuplikan y1, menggunakan perintah-perintah berikut…

>>figure;
>>t1=0:1/f:1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya (yang asli warna biru, yang cuplikan warna hijau)…

Hmmm… apaan tuch (perhatikan garis hijau), kok cuman garis lurus, berarti salah nich… Ya jelas lha wong frekuensi pencuplikan = frekuensi sinyal, harusnya khan 2 kali lipat, coba kita ubah lagi… (gunakan 1/(2*f))

>>figure;
>>t1=0:1/(2*f):1;
>>y1=sin(2*pi*f*t2);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 2 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Oalah…. sami mawon, podho wae, sama saja… ya garis lurus lagi (walaupn jumlah datanya bertambah, perhatikan lingkaran-lingkaran hijau, bandingkan dengan gambar sebelumnya)! Loch khan pak Nyquist sudah bilang kalo itu 2 kali lipat adalah minimal, ya mestinya pake yang lebih tinggi lagi, coba sekarang pake 2,5 kali lipat…

>>figure;
>>t1=0:1/(2.5*f):1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 2,5 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Wah ini agak lumayan (maksudnya dibandingkan hasil-hasil sebelumnya), bukan garis lurus, tapi… belum berbentuk sinusoidal ya…?? Okey kita coba jadi 3 kali lipat…

>>figure;
>>t1=0:1/(3*f):1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 3 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Kemudian 4 kali lipat…

>>figure;
>>t1=0:1/(4*f):1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 4 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Kemudian 10 kali lipat…

>>figure;
>>t1=0:1/(10*f):1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 10 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Kemudian (terakhir, jangan kebanyaken) 20 kali lipat…

>>figure;
>>t1=0:1/(20*f):1;
>>y1=sin(2*pi*f*t1);
>>plot(t,y,t1,y1,’-o’);
>>title(sprintf(‘frekuensi sampling = 20 x frekuensi sinyal, jumlah data %d’,length(y1)));

Hasilnya…

Bagaimana? Semakin mendekati sinusoidal aslinya too…?? Cuman jumlah data-nya juga semakin banyak, iya khan? Terus silahkan disimpulkan sendiri, okey? Atau kalo masih penasaran silahkan Anda coba 30, 40, 70 atau bahkan 100 kali lipat… silahkan jika mau…

Silahkan berikan komentar atau pertanyaan Anda…

NB: Sinyal asli sebenarnya menggunakan frekuensi cuplik sebesar 500 kali dari frekuensi 2 Hz (=1000 Hz), jadi wajar saja jika gambarnya halus (banget).