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 File→Print (Ctrl+P), atau Anda simpan sebagai file FIG dengan
File→Save (Ctrl+S) ataupun Anda ekspor sebagai file JPG, EMF, BMP,
dsb dengan File→Export.
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

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')

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
>> 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