Minggu, 25 November 2012


Visualisasi dalam Matlab
Salah satu keunggulan MATLAB ialah kemampuannya dalam menampilkan/mengolah grafik dan suara dengan command  yang sederhana dan fleksibel. Pada bab ini ini kita akan belajar mengenai visualisasi data (plot grafik 2- imensi dan 3-dimensi), serta penyuaraan.


Plot 2-Dimensi
Untuk memvisualisasi data secara 2-dimensi ataupun 3 dimensi, kita menggunakan berbagai command plotting ; di mana command yangpaling dasar ialah plot. Anda bisa praktekan contoh berikut ini

.>> x = 1:8; y=[20 22 25 30 28 25 24 22];
>> plot(x,y)

Akan muncul window baru berisi figure hasil plotting. Perhatikankegunaan dari ikon yang ada.



Seperti yang Anda lihat, titik (1,20), (2,22), (3,25), (4,30), dst... terhubung dengan garis lurus. Sekarang Anda bisa coba untuk membalik urutan sintaks dan mengamati grafik yang dihasilkan!

>> plot(y,x)

Setiap gambar di figure window , bisa Anda print melalui menu FilePrint (Ctrl+P), atau Anda simpan sebagai file FIG dengan FileSave (Ctrl+S) ataupun Anda ekspor sebagai file JPG, EMF, BMP, dsb dengan FileExport. Untuk menambahkan judul, label, dan grid ke dalam hasil plot Anda, digunakan command  berikut ini.

xlabel
ylabel
title
grid on
grid off
member i label pada sumbu-x
memberi label pada sumbu-y
memberi judul di atas area plot
memunculkan grid di dalam area plot menghapus grid


Sekarang mari kita lihat contoh plot yang lain. Kita akan memplotkurva  y  = x 3 pada rentang
 x  = -3 hingga x  = +3.

>> clear
>> x=-3:0.1:3; %inkremen=0.1 agar kurva terlihat mulus
>> y=x.^3;
>> plot(x,y)
>> xlabel('Sumbu X'), ylabel('Sumbu Y')
>> title('Kurva Y=X^3')
>> grid on
http://htmlimg4.scribdassets.com/8ol6xdwgw01eyu1k/images/3-0ceda805cc.jpg

Ketika Anda menggunakan command plot, gambar sebelumnya di figure window akan terhapus. Lalu bagaimana jika kita ingin memplot beberapa fungsi dalam satu figure sekaligus? Dalam hal ini kita bisa gunkan command hold.

hold on


holdoff 

untuk‘menahan’ gambar sebelumnya supaya tak terhapus ketika ditimpa gambar baru
untuk menonaktifkan command  hold


Berikut ini contoh memplot beberapa kurva eksponensial negative sekaligus

.>> clear
>> x=linspace(0,5,500);
>> y1=exp(-x); plot(x,y1);
>> grid on>> hold on
>> y2=exp(-0.5*x); plot(x,y2);
>> y3=exp(-0.25*x); plot(x,y3);
>> y4=exp(-0.1*x); plot(x,y4);
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Perbandingan fungsi eksponensial ...negatif')

http://htmlimg3.scribdassets.com/8ol6xdwgw01eyu1k/images/4-2aa1008216.jpg
Lebih Jauh Mengenai Plot
Anda mungkin ingin memplot beberapa fungsi dalam beberapa figure window yang terpisah, atau  membagi satu window  menjadi sejumlah area plot, ataupun mengatur  properties dari plot yang akan digambar Beberapa command  di bawah ini bisa digunakan untuk tujuan tersebut.

Figure
figure(k)
subplot(m,n,k)
clf 
menciptakan figure window baru yang kosong dan siap untuk di-plotuntuk ‘menduduki’ figure window nomor k membagi figure window menjadi m-baris × n-kolom area plot yang terpisah dan menduduki area ke-k“clear figure”, mengosongkan
figure window yang sedang ‘diduduki’



Misalkan figure window berikut dibagi menjadi 2-baris × 2-kolom dengan subplot . Perhatikan urutan nomor area dari kiri-atas ke kanan-bawah.


plot(x,y,’string’) menciptakan plot 2-dimensi dari vector x versus vector y, dengan property  yang ditentukan oleh string, sebagai berikut:

b
g
r
c
m
y
k
w

Biru
Hijau
Merah
biru muda
ungu
kuning
hitam
putih

-
:
-.
--

utuh
titik-titik
titik-strip
putus-putus
.
o
x
+
*
s
d
v
^
< 
> 
P
h

Titik
lingkaran
tanda ×
tanda +
tanda *
bujur sangkar
permata
segitiga ke bawah
segitiga ke atas
segitiga ke kiri
segitiga ke kanan
segilima
segienam



Misalkan:
plot(x,y,’r-’) memplot x versus y dengan garis utuh warna merah plot(x,y,’k*’) menempatkan tanda * warna hitam untuk setiap titik x versus y. plot(x,y,’g--s’) memplot dengan garis putus-putus warna hijau dan menempatkan tanda bujur sangkar di setiap titik x versus y. Perlu diingat bahwa ‘string’ dalam plot bersifat opsional. Apabila tidak dituliskan maka digunakan garis utuh warna biru.

plot(x1,y1,’string1’,x2,y2,’string2’,x3,y3,’string3’, ... ) menciptakan sejumlah plot sekaligus dalam satu area plot : x1 versus y1 dengan  property string1, x2 versus y2 dengan  property string2, dan seterusnya
legend(‘ket1’,’ket2’,’ket3’, ...)
menambahkan legenda ke dalam plot yang telah dibuat;
ket1
untuk plotpertama,
ket2
untuk plot kedua, dan seterusnya
axis off 
menghilangkan tampilan sumbu koordinat pada plot
axis on
menampakkan kembali sumbu koordinat
axis([x_awal x_akhir y_awal y_akhir])
membuat tampilan area plot pada batas-batas nilai x =
x_awal
hingga
x_akhir
, dan nilai y =
y_awal
hingga
y_akhiraxis equal
mengubah skala sumbu-x dan sumbu-y menjadi sama
axis square
mengubah bentuk area plot menjadi bujur sangkar

Berbagai fungsi yang berkaitan dengan plot di atas, berlaku pulauntuk plot diskrit, plot logaritmik dan plot dalam koordinat polar.
stem( ... )



semilogy( ... )



semilogx( ... )


loglog( ... )
polar(theta,rho,’string’)

Sama dengan plot( ... ), kecuali sumbu-y menggunakan skala logaritmik (basis 10)
sama dengan plot( ... ), kecuali sumbu- menggunakan  skala logaritmik
sama dengan plot( ... )
, tetapi sumbu-x dan sumbu-ymenggunakan skala logaritmik
sama dengan
plot( ... ), tetapi menampilkan y sebagai data diskrit membuat plot dalam  koordinat polar dari sudut theta ( satuan radian ) versus radius rho, dengan  property  ditentukan oleh string


Kini saatnya mencoba berbagai
command 
di atas dalam contoh berikutini.Pertama, kita akan mencoba memplot kurva eksponensial negatif sepertipada contoh subbab 5.1 secara lebih efisien

.>> clear
>> x=linspace(0,5,500);
>> y1=exp(-x); y2=exp(-0.5*x); y3=exp(-0.25*x);
>> y4=exp(-0.1*x);
>> plot(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25','A=0.1')

Kemudian, kita coba memplot kurva tersebut dalam skalasemilogaritmik

>> figure
>> semilogy(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25','A=0.1')

Misalkan kita ingin menyempitkan area plot pada y = 1 hingga 10-2saja, maka:

>> axis([0 5 1e-2 1])


Dalam contoh kedua, kita akan memplot gelombang sinus, cosinus, kotak,dan gigi gergaji dengan melibatkan
command 
subplot

.>> figure
>>t=0:0.05:10;
>> sinus=sin(2*pi*0.25*t);
>> cosinus=cos(2*pi*0.25*t);
>> kotak=square(2*pi*0.25*t);
>> gigi=sawtooth(2*pi*0.25*t);
>> subplot(2,2,1);
>> plot(t,sinus), title('sinus 1/4 Hz')
>> subplot(2,2,2);
>> plot(t,cosinus), title('cosinus 1/4 Hz')
>> subplot(2,2,3);
>> plot(t,kotak), title('kotak 1/4 Hz')
>> subplot(2,2,4);
>> plot(t,gigi), title('gigi gergaji 1/4 Hz')

Dalam contoh ketiga, kita akan mencoba memplot suatu fungs matematis dalam  koordinat polar. Diinginkan plot fungsi:

ρ= sin2(3θ )

dalam MATLAB dituliskan

>> figure
>> theta=linspace(0,2*pi,500);
>> rho=(cos(theta.*3)).^2;
>> polar(theta,rho);



Plot 3-Dimensi
Dalam subbab ini akan dibahas tiga macam  plot 3-dimensi: plot garis, plot permukaan ( surface), dan plot kontur.
Plot Garis
Mari kita mulai dengan plot garis di dalam ruang 3-dimensi. Ini miri dengan plot 2-dimensi, tetapi kali ini kita gunakan command 
plot3( ... ) dan dibutuhkan vector z, untuk dimensi ketiga

.>> X = [10 20 20 10 10];
>> Y = [5 5 15 15 5];
>> Z = [0 0 70 70 0];
>> plot3(X,Y,Z); grid on;
>> xlabel(‘sumbu X’); ylabel(‘sumbu Y’);
>> zlabel(‘sumbu Z’);
>> title (‘Contoh plot 3-D’);
>> axis([0 25 0 20 0 80])


Perhatikan bahwa command  label, title, grid, axis, hold, dan subplot  juga berlaku di sini. Anda juga bisa merotasi gambar 3- dimensi tersebut dengan cara men-klik ikon rotate dan dragging  mouse di atas gambar. Sekarang kita coba contoh yang lain untuk  menggambarkan helix.

>> t=0:0.1:25;
>> X=sin(t); Y=cos(t); Z=0.5*t;
>> plot3(X,Y,Z)
>> xlabel(‘sumbu X’); ylabel(‘sumbu Y’);
>> zlabel(‘sumbu Z’);
>> title (‘Helix’);


Plot Permukaan
Sementara itu, untuk plot permukaan ( surface ) dalam ruang 3- dimensidigunakan command  mesh atau surf . Contoh berikut ini menggambarkanfungsi dua variable z = x2 + y2. Caranya ialah:
1) Definisikan batas-batas nilai x dan  y  yang akan diplot
2)Gunakan command  meshgrid untuk “mengisi” bidang-XY dengan jalinan titik
3) Hitunglah fungsi 3-dimensi untuk jalinan titik tersebut4) Buatlah plot dengan command  mesh atau surf .
Sebagai contoh:

>> batas_x = -10:1:10; batas y = -10:4:10;
>> [X,Y] = meshgrid(batas_x,batas_y);
>> Z = X.^2 + Y.^2;
>> mesh(X,Y,Z);

Kini Anda mendapatkan plot 3-dimensi.
Kini cobalah
>> surf(X,Y,Z);

Amatilah perbedaan hasil antara mesh dan surf  ! Anda juga bisa menambahkan “label” dan “title” seperti plot pada umumnya. Sekarang kita coba contoh yang lain untuk memplot fungsi 3- dimensi

>> x = linspace(-10,10,40); y = x;
>> [X,Y] = meshgrid(x,y);
>> R = sqrt(X.^2+Y.^2);
>> Z = sin(R)./(R+eps);
>> surf(X,Y,Z);

di sini kita menggunakan variable eps, untuk mencegah perhitungan 0/0ketika R = 0.
Plot Kontur
Fungsi dua variabel, misalkan z = f(x,y) bisa kita gambarkan konturnyadalam dua dimensi dengan command  berikut ini:

contour(X,Y,Z)


C=contour(X,Y,Z)
contour(X,Y,Z,n)
contour(...,‘string’)


clabel(C)

meshc(X,Y,Z)

menggambar kontur dari nilai di Z dengan 10level. Elemen Z diterjemahkan sebagai levellevel
di atas bidang (  x ,y )
menghitung matriks kontur C menggambar kontur dengan n level menggambar kontur dengan property  yang ditentukan oleh string ( lihat Tabel 5.3)
 menuliskan angka pada garis-garis kontur untuk menunjukkan level menggambar permukaan seperti pada command  mesh, dan juga memplot kontur pada dasa grafik

.Mari kita gambarkan kontur dari fungsi sin( r  ) / r di atas, lalu bandingkan dengan plot permukaannya:

>> figure; contour(X,Y,Z);
>> figure; meshc(X,Y,Z);


Suara
Untuk menyuarakan suatu vektor, ataupun membaca dan menyimpan fileaudio berformat WAV, digunakan command  berikut ini:

[x,Fs] = wavread(‘nama_file’)
membaca file WAV dan menyimpannya dalam vector x , sert mengembalikan frekuensi sampling Fs dari file tersebut. Command  ini juga bisa membaca file WAV multi kanal

wavwrite(x,Fs,’nama_file’)
menuliskan file WAV dari vector x dengan frekuensi sampling

Fssound(x,Fs)
menyuarakan vector x dengan frekuensi sampling

Fssoundsc(x,Fs)
sama seperti sintaks sebelumnya, namun vector x terlebih dahulu diskalakan pada selang  –1 ≤x≤ +1 File yang akan dibaca harus tersimpan di direktori Matlab\work , atau Anda harus merinci drive, direktori dan nama file jika file tersimpan didirektori lain. Sebagai gambaran, marilah kita dengarkan suara berikut ini. Pertama, suara pitch 400 Hz berdurasi 2 detik

>> Fs=8000; %frekuensi sampling 8 kHz
>> t=0:1/Fs:2; %sinyal berdurasi 2 detik
>> frek=400; %frekuensi sinyal 400 Hz
>> m=cos(2*pi*frek*t);
>> sound(m,Fs); %suara dari m
>> wavwrite(m,Fs,’tone_400Hz.wav’); ...%

Menyimpan vektor m ke dalam fileBerikutnya, memperdengarkan suara helikopter yang ada di fileheli.wav

>> [x,Fs]=wavread(‘heli.wav’); %Membaca file heli.wav
>> sound(x,Fs); %Suara helikopter









='m�6Jnb��fp�e;margin-bottom:.0001pt;line-height: normal;background:white'>sama seperti sintaks sebelumnya, namun vector x terlebih dahulu diskalakan pada selang  –1 ≤x≤ +1 File yang akan dibaca harus tersimpan di direktori Matlab\work , atau Anda harus merinci drive, direktori dan nama file jika file tersimpan didirektori lain. Sebagai gambaran, marilah kita dengarkan suara berikut ini. Pertama, suara pitch 400 Hz berdurasi 2 detik

>> Fs=8000; %frekuensi sampling 8 kHz
>> t=0:1/Fs:2; %sinyal berdurasi 2 detik
>> frek=400; %frekuensi sinyal 400 Hz
>> m=cos(2*pi*frek*t);
>> sound(m,Fs); %suara dari m
>> wavwrite(m,Fs,’tone_400Hz.wav’); ...%

Menyimpan vektor m ke dalam fileBerikutnya, memperdengarkan suara helikopter yang ada di fileheli.wav

>> [x,Fs]=wavread(‘heli.wav’); %Membaca file heli.wav
>> sound(x,Fs); %Suara helikopter










Tidak ada komentar:

Posting Komentar