Salah satu kelebihan dari MATLAB adalah kemampuan untuk membuat program
(programming) langsung dari windows MATLAB dengan menggunakan fasilitas
Editor seperti yang dapat dilihat dalam windows di bawah ini :
Di mana pada EDITOR tersebut, seluruh perintah operasi dapat dituliskan dan
disimpan atau di SAVE dengan suatu nama dengan extension m sehingga anda
tidak perlu untuk menulis ulang seluruh perintah setiap kali anda akan
menghitung.
hijau : dengan diawali tanda % maka teks setelah tanda % tidak akan
diikutkan dalam perhitungan atau hanya berupa komentar.
biru : teks yang berwarna biru adalah perintah atau command dalam
program MATLAB.
Loop yang menggunakan fungsi for akan mengulang satu kelompok perintah
antara for dan end sebanyak jumlah yang dibatasi oleh batas bawah dan batas
bawah. Contoh :
for n = 1:10
r(n) = 10+n;
end
>> r
r =
11 12 13 14 15 16 17 18 19 20
Untuk array 2-Dimensi seperti H(i,j) , maka dapat dilakukan lebih dari 1 loop
seperti contoh di bawah ini :
for i = 1:5
for j = 1:10
H(i,j) = 1/(i+j);
end
end
>> H
H =
Columns 1 through 6
0.5000 0.3333 0.2500 0.2000 0.1667 0.1429
0.3333 0.2500 0.2000 0.1667 0.1429 0.1250
0.2500 0.2000 0.1667 0.1429 0.1250 0.1111
0.2000 0.1667 0.1429 0.1250 0.1111 0.1000
0.1667 0.1429 0.1250 0.1111 0.1000 0.0909
Columns 7 through 10
0.1250 0.1111 0.1000 0.0909
0.1111 0.1000 0.0909 0.0833
0.1000 0.0909 0.0833 0.0769
0.0909 0.0833 0.0769 0.0714
0.0833 0.0769 0.0714 0.0667
While
Perintah while adalah perintah loop seperti for , tetapi bukan dibatasi oleh jumlah
langkahnya (indefinite) seperti pada for melainkan dibatasi dengan suatu
pernyataan (statements) sampai pernyataan itu tidak lagi dipenuhi.
a=10;b=5;
while (a-b) > 0.1
x = (a+b)/2
pause pause dan akan berjalan lagi jika menekan keyboard
a = x;
end
Outputnya adalah :
x =
7.5000
x =
6.2500
x =
5.6250
x =
5.3125
x =
5.1563
x =
5.0781
Keyword end harus selalu dimasuukan untuk keseluruhan perintah di atas yaitu
for, while, if, else and elseif untuk menghentikan pernyataan
setelah perintah-perintah tersebut.
Jika keyword end tidak dimasukkan, maka akan ada ERROR message pada
MATLAB prompt.
Break
Perintah (statement) break akan menghentikan program dan keluar dari program
pada saat loop for atau loop while sedang berjalan
Pause
Perintah (statement) pause akan menghentikan sementara jalannya program
untuk kepentingan pengecheckan perhitungan dan program akan berjalan kembali
dengan menekan tombol keyboard.
Contoh :
Program Bisection adalah suatu program untuk mencari akar (root) dengan cara
membagi dua jarak antara batas bawah dan batas atas dari suatu persamaan di
mana variable (unknown) yang dicari berada di sebelah kiri dan kanan tanda
sama dengan (=).
g 2 2h
L= T tanh
2 L
NIM = 43;
T = NIM/10;
g = 9.81;
Nh = 51
h = linspace(0,50,Nh);
end
end
% Plot h vs L
plot(h,L,'g^',h,L,'--')
xlabel('Kedalaman Perairan, h (m)')
ylabel('Panjang Gelombang,\lambda (m)')
title('Bisection Method')
FUNCTION
Dalam MATLAB terdapat banyak sekali fungsi (function) seperti telah dijelaskan
sebelumnya. Fungsi dalam MATLAB telah dibuat untuk kenyamanan pengguna
sehingga pengguna tidak harus membuat perintah-perintah yang banyak
digunakan dalam perhitungan sehari-hari seperti fungsi sin, cos, mean, pi dan
lain-lain.
Function ini harus ditulis dalam sebuah filename dengan extension '.m' . Pada
saat suatu program akan memanggil program, maka harus memanggil nama
filename dengan extension of '.m' tadi.
clear all
close all
function xdot = f( s, x )
eps = 0.00737;
c0 = 1500;
z = x( 2 );
xt = 2 * ( z - 1300 ) / 1300;
c = c0 * ( 1 + eps * ( xt - 1 + exp( -xt ) ) );
c2 = c^2;
% we also need derivatives of sound speed
dxtdz = 2 / 1300;
cz= c0 * eps * dxtdz * ( 1 - exp( -xt ) );
cr = 0;
xdot = zeros( 4, 1 );
xdot( 1 ) = c * x( 3 );
xdot( 2 ) = c * x( 4 );
xdot( 3 ) = -cr / c2;
xdot( 4 ) = -cz / c2;
DATA ANALYSIS
Loading Data
Data-data hasil survey atau penelitian biasanya akan disimpan dalam format XLS
atau TXT. Untuk mengubah format tersebut di atas, diperlukan perintah-perintah
khusus seperti :
[A,B] = XLSREAD(FILENAME,SHEET)
di mana :
Contoh :
[A,B]=XLSREAD('SUH01_sound_speed_vs_depth', 'SUH01')
A =
1.0e+003 *
0.0010 1.5402 0.0286 0.0326
0.0020 1.5402 0.0286 0.0326
0.0030 1.5402 0.0286 0.0326
0.0040 1.5403 0.0286 0.0326
0.0050 1.5403 0.0286 0.0326
0.0060 1.5403 0.0286 0.0326
0.0070 1.5403 0.0286 0.0326
0.0080 1.5403 0.0286 0.0326
0.0090 1.5403 0.0286 0.0326
.. ..
.. ..
0.1220 1.5245 0.0204 0.0347
0.1230 1.5245 0.0204 0.0348
0.1240 1.5245 0.0204 0.0348
0.1250 1.5245 0.0204 0.0348
0.1260 1.5245 0.0204 0.0348
0.1270 1.5244 0.0204 0.0348
0.1280 1.5244 0.0204 0.0347
B =
'Depth' 'C' 'T' 'S'
'(m)' '(m/s)' '(deg C)' '(ppt)'
atau
load filename.txt
di mana :
Contoh :
Sehingga anda memiliki data test yang terdiri dari 7799 baris dan 4 kolom.
Hasilnya adalah :
>> whos
Name Size Bytes Class
C 7799x1 62392 double array
D 7799x1 62392 double array
S 7799x1 62392 double array
T 7799x1 62392 double array
test 7799x4 249568 double array
Contoh :
Untuk mencek data yang hilang pada kolom ke 3 dari data yang anda load, maka
perintahnya adalah :
>> c3 = data(:,3)
c3 =
18925
19013
15642
19001
18906
19278
18698
19458
>> sum(isnan(c3))
ans =
0
Load data-data gelombang yang berada pada channel 1 sampai 8 yang masing-
masing berisi 20.000 data.
col5 = data(5,:); % load channel 5
col6 = data(6,:); % load channel 6
Load data-data gelombang yang berada pada channel 5 dan 6 yang masing-
masing berisi 20.000 data.
pcol5=col5/32768*100*.3; %scaling
pcol6=col6/32768*100*.3;
Menentukan Lokasi
Menentukan lokasi dari data adalah menemukan nilai-nilai typical. Dalam
menentukan lokasi atau central tendency akan digunakan fungsi seperti
mean, median, and mode :
Artinya : harga mean dari data akan berjumlah 20.000 yang merupakan harga
mean dari 8 data (baris) dalam 20.000 kolom.
>> mean (data')
ans =
1.0e+004 *
Artinya : harga mean dari data akan berjumlah 8 yang merupakan harga mean
dari 20.000 data (kolom) dalam 8 baris.
Artinya : harga median dari data akan berjumlah 20.000 yang merupakan harga
median dari 8 data (baris) dalam 20.000 kolom.
ans =
1.0e+004 *
Artinya : harga median dari data akan berjumlah 20.000 yang merupakan harga
median dari 8 data (baris) dalam 20.000 kolom.
ans =
ans =
ans =
ans =
1.0e+005 *
Bentuk Distribusi
Bentuk dari sebuah distribusi lebih sulit untuk dihitung daripada lokasi atau skala.
MATLAB memiliki fungsi hist yang akan memplot sebuah histogram yang akan
memperlihatkan visualisasi dari data :
>> hist(data(:,5))
>> hist(data(5,:))
Visualizing Data
Anda dapat menggunakan berbagai jenis grafik dalam MATLAB untuk
menvisualisasi pola data dan trendnya. Plot Scatterdapat membantu untuk
menvisualisasikan data-data tersebut.
Contoh :
A 2-D scatter plot, created with the scatter function, shows the relationship
between the traffic volume at the first two intersections:
>> c5 = data(5,:); % Data at channel 5
>> c6 = data(6,:); % Data at channel 6
>> scatter(c5,c6,'filled')
>> xlabel('Channel 5')
>> ylabel('Channel 6')
Plot :
Covariance
Untuk menghitung covariance, dapat menggunakan fungsi cov yang mengukur
bagaimana kekuatan hubungan linear antara dua variabel (bagaimana kedekatan antara
data yang terdapat pada garis least-squares yang melalui the scatter):
Hasil covariance ditampilkan dalam matriks square simetris, di mana covariance dari
variabel ke I dan j dalam posisi (i, j). Elemen pada diagonal ke I adalah variance dari
variable ke i.
Harga Covariance tergantung pada unit yang digunakan dalam mengukur variabel
individual. Anda dapat membagi covariance dengan standard deviasi untuk
menormalkannya menjadi antara +1 and 1.
Fungsi corrcoef dalam MATLAB akan menghitung koefisien korelasi sebagai berikut :
1.0000 -0.1393
-0.1393 1.0000
Hasilnya :
Contoh :
>> plotmatrix(data')
yaitu plot dari scatter dan histrogram dari semua channel pada data.
>> plotmatrix(data(1:3,:)')
yaitu plot dari scatter dan histrogram dari data pada channel 1 sampai 3.
Modeling Data
Umum
Model parametrik menterjemahkan pengertian tentang hubungan antar data ke dalam
suatu hubungan analitis atau matematis dengan menerapkan prakiraan pangkat dari
suatu persamaan. Polynomial merupakan pilihan yang tepat dalam mengikuti trend
dari data salinitas dan temperatur.
Polynomial Regression
y = p1 x n + p 2 x n 1 + p 3 x n 2 + p 4 x n 3 + ....... + p n +1
P adalah output dari Polyfit yang berisi vektor dalam baris yang berisi N+1 koefisien
polinomial in pangkat yang menurun : P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X +
P(N+1).
Contoh :
[P,S] = POLYFIT(D,T,12);
T12 = P(1)*D.^12+P(2)*D.^11+P(3)*D.^10+P(4)*D.^9+
P(5)*D.^8+P(6)*D.^7+P(7)*D.^6+P(8)*D.^5+P(9)*D.^4+
P(10)*D.^3+P(11)*D.^2+P(12)*D.^1+P(13)*D.^0;
[P,S] = POLYFIT(D,T,6);
T6 = P(1)*D.^6+P(2)*D.^5+P(3)*D.^4+P(4)*D.^3+P(5)*D.^2+
P(6)*D.^1+P(7)*D.^0;
[P,S] = POLYFIT(D,T,5);
T5 = P(1)*D.^5+P(2)*D.^4+P(3)*D.^3+P(4)*D.^2+P(5)*D.^1+
P(6)*D.^0;
% Plot T vs D
plot(T,D,'o',T12,D,'r',T5,D,'g',T6,D,'k')
axis ij
xlabel('Temperature, ^oC')
ylabel('Depth, D (m)')
legend('Data','N=12','N=5','N=6',4)
[P,S] = POLYFIT(D,SAL,12);
SAL12 = P(1)*D.^12+P(2)*D.^11+P(3)*D.^10+P(4)*D.^9+P(5)*D.^8+
P(6)*D.^7+P(7)*D.^6+P(8)*D.^5+P(9)*D.^4+P(10)*D.^3+
P(11)*D.^2+P(12)*D.^1+P(13)*D.^0;
[P,S] = POLYFIT(D,SAL,6);
SAL6 = P(1)*D.^6+P(2)*D.^5+P(3)*D.^4+P(4)*D.^3+P(5)*D.^2+
P(6)*D.^1+ P(7)*D.^0;
[P,S] = POLYFIT(D,SAL,5);
SAL5 = P(1)*D.^5+P(2)*D.^4+P(3)*D.^3+P(4)*D.^2+P(5)*D.^1+
P(6)*D.^0;
% Plot SAL vs D
plot(SAL,D,'o',SAL12,D,'r',SAL5,D,'g',SAL6,D,'k')
axis ij
xlabel('Salinity, ppt')
ylabel('Depth, D (m)')
legend('Data','N=12','N=5','N=6',4)
save test.txt P -ASCII
Plot :
Filtering Data
Umum
Filtering adalah suatu proses untuk memfilter data dari signal-signal yang tidak
diinginkan seperti data noise. Selain itu Filtering berfungsi juga untuk untuk
memisahkan data dengan frekuensi tertentu dari seluruh frekuensi domain dari data-
data yang dimiliki.
Fungsi Filter
Fungsi filter akan adalah merupakan fungsi filter digital 1-dimensi berdasarkan pada
vector A dan B yang diperoleh dari desain filter tertentu.
Y = FILTER(B,A,X)
Desain Filter
Desain filter akan menentukan nilai A dan B yang merupakan input pada fungsi filter .
Salah satunya adalah digital filter jenis Butterworth
[B,A] = BUTTER(N,Wn)
Jika Wn merupakan vector dengan 2 elemen seperti Wn = [W1 W2], maka BUTTER
akan melakukan filter bandpass with bandpassnya adalah : W1 < W < W2.
[B,A] = cheby1(N,R,Wn)
adalah desain filter digital Chebyshev lowpass (default) dengan R decibels dari ripple
peak-to-peak pada passband. Frequency cutoff Wn harus berada di antara 0.0 < Wn <
1.0, di mana 1.0 menyatakan setengah (half) dari sampling rate. Gunakan R=0.5
sebagai starting point, jika anda tidak yakin dalam menggunakan nilai R.
Jika Wn merupakan vector dengan 2 elemen seperti Wn = [W1 W2], maka BUTTER
akan melakukan filter bandpass with bandpassnya adalah : W1 < W < W2.
Contoh : Anda dapat menjalankan program contoh_filter.m untuk melihat hasil filtering
data untuk low-pass, band-pass, dan high-pass
close all
clear all
load wave; % load data
col5 = data(5,:); % load channel 5
pcol5=col5/32768*100*.3; %scaling
mcol5=pcol5-mean(pcol5); % menghilangkan mean value
y5=mcol5;
t5=linspace(0,25000,20000);
plot(t5,y5)
%Low-Pass Filter
[b1,a1]=butter(10,50/400);
%Band-Pass Filter
[b2,a2]=butter(10,[50/400 150/400]);
%High-Pass Filter
[b3,a3]=butter(10,150/400,'high');
%Plotting
yf1=filter(b1,a1,y5);
yf2=filter(b2,a2,y5);
yf3=filter(b3,a3,y5);
figure
%Plotting
subplot(3,1,1), plot(t5,yf1);
axis([0 25000 -3 3]);
title ('Low-Pass Filter - Channel 1')
xlabel('Time (microseconds)')
ylabel('Pressure (Pa)')
subplot(3,1,2), plot(t5,yf2);
axis([0 25000 -3 3]);
title ('Band-Pass Filter - Channel 1')
xlabel('Time (microseconds)')
ylabel('Pressure (Pa)')
ylabel('Pressure (Pa)')
subplot(3,1,3), plot(t5,yf3);
axis([0 25000 -3 3]);
title ('High-Pass Filter - Channel 1')
xlabel('Time (microseconds)')
Hasilnya adalah :
Koefisien Korelasi (Rxy )
Koefisien korelasi Rxy adalah koefisien yang menyatakan korelasi antara data A dan
B di mana harga yang maksimum menunjukkan korelasi yang paling maksimum..
Fungsinya adalah
Rxy = XCORR(A,B)
di mana :
XCORR(A) menyatakan korelasi antara data A dan A atau lebih dikenal dengan
fungsi auto-correlation.
XCORR(A,B) menyatakan korelasi antara data A dan B atau lebih dikenal dengan
fungsi cross-correlation.
close all
clear all
pcol5=col5/32768*100*.3; %scaling
pcol6=col6/32768*100*.3;
y5=mcol5;
y6=mcol6;
Fungsi Auto-Correlation antara data A dan A itu sendiri akan dilakukan per/setiap
time window (jendela waktu) di mana segmen jendela waktunya dipilih sepanjang
1000 t dengan data overlap sebesar 500 t. Kemudian segmen waktu tersebut
dibandingkan dengan keseluruhan data A untuk mendapatkan koefisien Auto-
Correlation (Rxx ).
Sehingga akan terdapat total (20000/500 1) = 39 data overlap, di mana hasil
data overlap atau koefisien korelasi adalah 2*M-1 atau (2*1000-1 = 1999).
Jadi anda akan memiliki data koefisien auto-correlation Rxx ( 39,1999) yaitu ada
39 data overlap dengan 1999 koefisien auto-correlation untuk setiap data
overlapnya.
Hasilnya adalah :
Keterangan :
Fungsi Waterfall adalah untuk memplot segmen per segmen di dalam satu grafik
3-Dimensi
waterfall(tau,tee,a)
Fungsi WATERFALL (...) adalah sama dengan MESH (...) hanya grafiknya tidak
digabungkan atau digambar per/setiap baris.
close all
clear all
y5=mcol5;
y6=mcol6;
Sp = fft(mcol5)
di mana :
FFT(X,N) adalah FFT dengan N-point artinya data akan diisi (padded) oleh
nol(zeros) jika X memiliki data kurang dari N dan akan dipotong jika X
memiliki lebih dari N.
Contoh :
%FFT Function
figure
plot(freq,ms(1:2^(p-1))) % Plot hanya diambil yang freq positif
title('2-sided spectral density')
ylabel('2-sided spectral density')
xlabel('Frequency (Hz)')
axis([0 20000 0 1500000])
%colormap gray
%colorbar ('vert')
Hasilnya :