Rabu, 04 April 2018

Pemrosesan SInyal Audio


Konversi Audio ke FFT


path='datalatihh/alif.wav';
[x,fs] = audioread(path);
no=78010;%batasan pixel

nn=size(x,1);
if no< nn
   nn=no;
else
    nn=no;
end   

FFT = fft(x,nn);
outFFT=reshape(FFT,[1,size(FFT,1)*size(FFT,2)]);
plot(x);

Andai kita ambil secuplik / sampling audio ybs datanya adalah sbb:(antara pixel ke 30000 s/d 300010)=10 pixeel audio

samplingAudio=x(30000:30010,:)

samplingAudio =

    0.0587   -0.0587
    0.0601   -0.0601
    0.0797   -0.0797
    0.1053   -0.1053
    0.1205   -0.1205
    0.1296   -0.1296
    0.1529   -0.1529
    0.2001   -0.2001
    0.2499   -0.2499
    0.2728   -0.2728
    0.2801   -0.2801

>> plot(samplingAudio)



Lalu proses FFT nya adalah sbb:

FFT=fft(sampling)

FFT =

   1.7097 + 0.0000i  -1.7097 + 0.0000i
  -0.0403 + 0.5043i   0.0403 - 0.5043i
  -0.1796 + 0.2140i   0.1796 - 0.2140i
  -0.0956 + 0.0925i   0.0956 - 0.0925i
  -0.1056 + 0.0545i   0.1056 - 0.0545i
  -0.1107 + 0.0176i   0.1107 - 0.0176i
  -0.1107 - 0.0176i   0.1107 + 0.0176i
  -0.1056 - 0.0545i   0.1056 + 0.0545i
  -0.0956 - 0.0925i   0.0956 + 0.0925i
  -0.1796 - 0.2140i   0.1796 + 0.2140i
  -0.0403 - 0.5043i   0.0403 + 0.5043i

plot(FFT)



sedang untuk FFT nilai Single  hasilnya sbb:

FFT =

   1.7097 + 0.0000i   1.7097 + 0.0000i
  -0.0403 + 0.5043i  -0.0403 + 0.5043i
  -0.1796 + 0.2140i  -0.1796 + 0.2140i
  -0.0956 + 0.0925i  -0.0956 + 0.0925i
  -0.1056 + 0.0545i  -0.1056 + 0.0545i
  -0.1107 + 0.0176i  -0.1107 + 0.0176i
  -0.1107 - 0.0176i  -0.1107 - 0.0176i
  -0.1056 - 0.0545i  -0.1056 - 0.0545i
  -0.0956 - 0.0925i  -0.0956 - 0.0925i
  -0.1796 - 0.2140i  -0.1796 - 0.2140i
  -0.0403 - 0.5043i  -0.0403 - 0.5043i

%yaitu hanya melihat satu sisi amplitudo saja


Selanjutnya adalah proses Pembuatan Prediksi data FFT yang akan datang dari gabungan beberapa data FFT sejenis untuk dijadikan rujukan kedekatan dengan sinyal FFT audio uji.

dalam hal ini kita membuat perhitungan statistiknya menggunakan metode Hidden Markov Model

Misalkan data Uji dalah data sbb:


X=rand(3,10); %menggenerate bilangan random sebanyak 3 baris dan 10 kolom
X =

    0.8147    0.9134    0.2785    0.9649    0.9572    0.1419    0.7922    0.0357    0.6787    0.3922
    0.9058    0.6324    0.5469    0.1576    0.4854    0.4218    0.9595    0.8491    0.7577    0.6555
    0.1270    0.0975    0.9575    0.9706    0.8003    0.9157    0.6557    0.9340    0.7431    0.1712

Lalu dicari nilai total dari setiap barisnya

S=sum(X)
S =
    1.8475    1.6433    1.7829    2.0931    2.2428    1.4794    2.4074    1.8188    2.1796    1.2189


Lalu bagikan setiapd ata matrix dengan data total di atas:
H=X./S

H =

    0.4410    0.5558    0.1562    0.4610    0.4268    0.0959    0.3291    0.0196    0.3114    0.3218
    0.4903    0.3848    0.3067    0.0753    0.2164    0.2851    0.3986    0.4669    0.3476    0.5378
    0.0687    0.0594    0.5371    0.4637    0.3568    0.6190    0.2724    0.5135    0.3409    0.1404


ATau bisa juga menggunakan rumus sbb:

H2=bsxfun(@rdivide, double(X), double(S))

H2 =

    0.4410    0.5558    0.1562    0.4610    0.4268    0.0959    0.3291    0.0196    0.3114    0.3218
    0.4903    0.3848    0.3067    0.0753    0.2164    0.2851    0.3986    0.4669    0.3476    0.5378
    0.0687    0.0594    0.5371    0.4637    0.3568    0.6190    0.2724    0.5135    0.3409    0.1404

Selanjutnya barulah ke tahap perhitungan jarak/mencari selisih jarak antara data latih di atas dengan data UJi dengan menggunakan rumus jarak diantaranya ecludean distance

Misalkan sinyalFFT Uji adalah sebagai berikut datanya:
Uji =

    0.0687    0.0594    0.5371    0.4637    0.3568    0.6190    0.2724    0.5135    0.3409    0.1404



EccHmm(1)= sqrt(sum((H(1,:)-Uji).^2));
EccHmm(2)= sqrt(sum((H(2,:)-Uji).^2));
EccHmm(3)= sqrt(sum((H(3,:)-Uji).^2));

EccHmm =

    1.0438    0.8915         0

            
EcludeanDIstanceValue =min(EccHmm )  =0

Kesimpulan=Dalam hal ini sinyalUji sangat dekat dengan datalatih ke-3 dari data Uji.




Sabtu, 06 Januari 2018

Main-main dengan AG


  Tdata      1x26              208  double             
  Vdata      1x26              208  double   

Tdata =

   -40   -35   -30   -25   -20   -15   -10    -5     0     5    10    15    20    25    30    35    40    45    50    55

    60    65    70    75    80    85

Vdata=
    0.1251    0.1203    0.1161    0.1124    0.1094    0.1068    0.1049    0.1034    0.1026    0.1023    0.1026    0.1034

    0.1049    0.1068    0.1093    0.1124    0.1161    0.1203    0.1251    0.1304    0.1364    0.1428    0.1499    0.1574

    0.1656    0.1743



%% Temperature and Voltage Data
Tdata = -40:5:85;
Vdata = 1.026E-1 + -1.125E-4 * Tdata + 1.125E-5 * Tdata.^2;

%% Plot the Desired Curve
plot(Tdata,Vdata,'-*');
title('Target Curve','FontSize',12);
xlabel('Temperature (^oC)'); ylabel('Voltage (V)')


load('StandardComponentValues.mat')

  Res         70x1               560  double              
  ThBeta       9x1                72  double              
  ThVal        9x1                72  double              


ThBeta =
        2750
        3680
        3560
        3620
        3528
        3930
        3960
        4090
        3740

ThVal =
          50
         220
        1000
        2200
        3300
        4700
       10000
       22000
       33000

Res =
         300
         330
         360
         390
         430
         470
         510
         560
         620
         680
         750
         820
         910
        1000
        1100
        1200
        1300
        1500
        1600
        1800
        2000
        2200
        2400
        2700
        3000
        3300
        3600
        3900
        4300
        4700
        5100
        5600
        6200
        6800
        7500
        8200
        9100
       10000
       11000
       12000
       13000
       15000
       16000
       18000
       20000
       22000
       24000
       27000
       30000
       33000
       36000
       39000
       43000
       47000
       51000
       56000
       62000
       68000
       75000
       82000
       91000
      100000
      110000
      120000
      130000
      150000
      160000
      180000
      200000
      220000

Vnew = voltageCurve(Tdata, [2 2 2 2 1 1], Res, ThVal, ThBeta);
%% Add New Curve to Plot
hold on; plot(Tdata,Vnew,'-or');

Vnew =1x26  double
    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500    0.5500




%%
% We would like to find the optimal indices that result in a temperature
% curve closest to our desired curve.  Our initial guess of [2 2 2 2 1 1]
% did not yield a good fit, and there are 70*70*70*70*9*9 = 1944810000
% different possible combinations for this circuit.  We will use an
% optimization routine, the Genetic Algorithm, to find the optimal indices
% for our problem.  The Genetic Algorithm allows us to constrain values to
% be integers, which is necessary for this problem since indices into a
% vector must be integers.  

%% Bounds on our Vector of Indices
lb = [1 1 1 1 1 1];
ub = [70 70 70 70 9 9];

%% Constrain All 6 Variables to be Integers
intCon = 1:6;

custOutput = @(a1,a2,a3)ThOptimPlot(a1,a2,a3,Tdata,Vdata,Res,ThVal,ThBeta);


options = gaoptimset('CrossoverFrac',0.5,'PopulationSize',100,...
    'StallGen',125,'Generations',150,...
    'PlotFcns',@gaplotbestf,'OutputFcns',custOutput);

%% Run the Genetic Algorithm
% Note: The Genetic Algorithm is based on stochastic methods, meaning that
% we are not guaranteed to find the same solution every time.  To reproduce
% the exact results from the video, run "rng(45)" at the Command Line to 
% set the same seed for the random number generator.

[xOpt,fVal] = ga(@(x)objectiveFunction(x,Res,ThVal,ThBeta,Tdata,Vdata),...
    6,[],[],[],[],lb,ub,[],intCon,options);

%% Inspect the Solution Vector to see that All Values are Integers
disp('Integer Solution Returned by GA:')
disp(xOpt)






Minggu, 27 Agustus 2017

Istilah2 dan Kode2 Matlab

DETEKSI TEPI:

Suatu obyek yang berada dalam bidang citra dan tidak bersinggungan dengan batas bidang citra, berarti obyek tersebut dikelilingi daerah yang bukan obyek yaitu latar belakang. Pertemuan antara bagian obyek dan bagian latar belakang disebut tepi obyek.

 Demikian juga bila dua buah atau lebih obyek saling tumpang tindih, bila intensitas mereka tidak sama, akan meninggalkan jejak tepi sehingga diketahui obyek yang satu berada di depan obyek yang lain atau sebaliknya. Hal ini penting untuk mengembalikan atau merekonstruksi bentuk yang seharusnya dari obyek yang berada di belakang obyek lainnya, atau memisahkan obyek yang tumpang tindih sehingga mereka dapat dianalisis secara individu.

 Dengan demikian tepi suatu obyek juga berguna untuk memisahkan obyek-obyek yang saling bersinggungan sehingga mereka tidak dianggap sebagai satu obyek yang besar dan tetap dapat dilacak atau dianalisis secara individu.

Deteksi tepi atau edge detection digunakan untuk menentukan lokasi titik-titik yang merupakan tepi obyek. Secara umum, tepi suatu obyek dalam citra dinyatakan sebagai titik yang nilai keabuannya berbeda cukup besar dengan titik yang ada di sebelahnya. Banyak bentuk yang dipakai dalam operasi ini, misalnya operator Robert, Prewitt, Sobel, Canny, Laplacian, dan Laplacian of Gaussian


Coding :

I = imread(‘lp2maray.jpg’);
gray=rgb2gray(I);
BW1 = edge(gray,’prewitt’);
BW2 = edge(gray,’canny’);
BW3 = edge(gray,’sobel’);
BW4 = edge(gray,’roberts’);
imshow(BW1);
figure, imshow(BW2);
figure, imshow(BW3);
figure, imshow(BW4);


RECONSTRUCTOR:
gambar = imread('naruto.jpg');
[X,map] = rgb2ind(gambar, 128);
I = ind2gray(X,map);
thresh=graythresh(gray);
imbw=im2bw(gray,thresh);
Ifill = imfill(imbw,'holes');
figure, imshow(imbw);figure, imshow(Ifill)



FILTERING:
gambar=imread('naruto.jpg');
gaussianFilter = fspecial('gaussian', [12, 12], 5)
hasil = imfilter(gambar, gaussianFilter, 'symmetric', 'conv');
subplot(1,2,1), image(gambar);
subplot(1,2,2), image(hasil), title('Blurred Taz, blur matrix size 12');

HISTOGRAM:
gambar=imread('naruto.jpg');
red=gambar(:,:,1);
green=gambar(:,:,2);
blue=gambar(:,:,3);
merahgray2=0.3*red+0.5*green+0.2*blue ;
imhist(red)
imhist(green)
imhist(blue)
imhist(gray)







Macam-Macam Noise Matlab

Ada banyak jenis noise yang dapat mempengaruhi kualitas citra, diantaranya adalah salt and pepper, gaussian, speckle, localvar dan poisson. Efek masing-masing noise tentunya berbeda-beda. Ada yang efeknya sangat mempengaruhi tampilan citra, tapi ada juga yang tidak begitu berpengaruh terhadap citra.






Salt & Peper

Seperti namanya noise jenis ini terlihat seperti salt and pepper. Pada citra akan nampak seperti titik-titik. Untuk citra RGB titik-titik muncul dalam tiga warna yakni merah (red), hijau (green) dan biru (blue), sedangkan pada citra GRAY noise akan muncul dalam dua warna yakni hitam (black) dan putih (white). Noise ini memberikan efek ”on dan off” pada pixel. Pada MatLab kita dapat mengatur ”konstanta” noise. Konstanta berupa angka numerik non negatif dengan range 0 sampai dengan 1. Makin besar konstantanya citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default untuk konstanta noise adalah 0.05.

Gaussian
Disebut juga Gaussian White Noise. Untuk menambahkan noise ini pada MatLab memerlukan input tambahan berupa rata-rata dan variasi. Rata-rata dan variasi merupakan suatu konstanta real. Nilainya bisa positif maupun negative. Makin besar rata-rata dan variasinya maka citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default adalah 0 untuk mean dan 0.01 untuk variance. Disebut white noise karena pada saat nilai rata-rata dan variasinya besar maka citra seolah-olah hanya terlihat seperti citra putih saja.

Poisson
Poisson noise bukan merupakan noise buatan. Poisson merupakan noise yang ditambahkan langsung pada citra tanpa kita menambahkan parameter apapun, sehingga efeknya pada citra pun tetap, berbeda dengan tipe noise yang sudah dijelaskan sebelumnya. Pada MatLab, jika matrik citra adalah double precision, maka nilai piksel inputnya dianggap sebagai mean dari distribusi Poisson dengan skala 10^12. Sebagai contoh jika piksel inputnya mempunyai nilai 5.5 10^-12, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 5.5 di kembalikan lagi ke skala 10^12. Jika matrik citra adalah single precision, maka factor skalanya menggunakan 10^6. Jika matrik citra adalah uint8 atau uint16, maka nilai input piksel digunakan langsung tanpa factor skala. Sebagai contoh jika input piksel uint8 mempunyai nilai 10, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 10.

Speckle
Speckle merupakan noise ganda. Noise ini ditambahkan pada citra menggunakan persamaan J=I+n*I, dimana n terdistribusi random seragam dengan mean 0 dan variance V. V adalah konstanta non negative yang besarnya dapat berubah-ubah. Default nilai untuk V adalah 0.04. Makin besar nilai V maka citra akan semakiin kabur.

Localvar
Pada MatLab kita harus mengunakan dua parameter untuk menambahkan noise ini pada citra. Dua parameter tersebut berupa vector yang ukurannya sama, dan grafik kedua parameter tersebut menggambarkan relasi fungsional antara varians noise dan intensitas citra. Vektor intensitas citra harus bernilai antara 0 dan 1 (normal). Localvar merupakan Gaussian noise dengan mean 0, dengan variance noise adalah fungsi dari intensitas citra yang nilainya berada dalam matrik citra. Vektor intensitas citra tidak boleh bernilai sama karena citra akan nampak sebagai layar putih (Gaussian White Noise).

Macam-macam Filter Image/Citra pada Matlab

Filter pada dasarnya adalah sebuah metode untuk meredamkan atau menghilangkan noise pada citra digital atau image. Jenis filter bermacam-macam dan fungsi serta efeknya juga berbeda-beda pula. Filter citra dibagi menjadi dua, yaitu filter linear dan filter non-linear. Filter spasial linear adalah filter yang bekerja dengan cara korelasi atau konvolusi. Filter spasial non-linier atau biasanya disebut juga dengan filter statistik berdasar urutan adalah filter yang respon nya didasarkan pada urutan atau rangking piksel yang ada dalam citra yang dicakup oleh area filter dengan menggantikan nilai dari piksel yang berada di tengah digantikan dengan nila hasil pengurutan atau perangkingan tersebut. Filter non-linear memiliki lebih banyak keunggulan dibandingkan dengan filter linear pada ukuran jendela filter yang sama.

Macam-macam filter spasial linear antara lain :

1. Filter Rata-rata
Penghalusan dengan filter rata-rata adalah proses filtering citra f(x,y) dengan filter rata-rata g(x,y) untuk berbagai ukuran filter, dari ukuran 3×3, 5×5, 7×7, 9×9, dan seterusnya.

2. Filter Gaussian
Penghalusan dengan filter gaussian tekniknya sama dengan filter rata-rata, yaitu filtering citra f(x,y) dengan filter gaussian g(x,y) untuk berbagai ukuran filter, dari ukuran 3×3, 5×5, 7×7, 9×9, dan seterusnya.

Macam-macam filter spasial non-linear antara lain :

1. Filter Median
Penghalusan dengan filter median adalah dengan menggantikan nilai tengah dari piksel yang di cakup oleh area filter dengan sebuah nilai tengah (median) setelah diurutkan terlebih dahulu dari yang terkecil ke yang terbesar.

2. Filter Maksimum
Penghalusan dengan filter median adalah menggantikan piksel dengan nilai tertinggi dari suatu deret yang terbentuk dari matriks yang sesuai dengan ukuran dari jendela filter.
3. Filter Minimum

Penghalusan dengan filter median adalah menggantikan piksel dengan nilai terendah dari suatu deret yang terbentuk dari matriks yang sesuai dengan ukuran dari jendela filter.





Contoh JST + Normalisasi code nya

function [gab] = Normalisasi( G)
u=66;
v=100;
max=u*v;
I=imresize(G,[u v]);
M=NR(I);
filter_khusus=fspecial('unsharp');
Q=imfilter(M,filter_khusus,'replicate');

red=Q(:,:,1);
A1= edge(red,'canny');
A=reshape(A1,1,max);

green=Q(:,:,2);
B1= edge(green,'canny');
B=reshape(B1,1,max);

blue=Q(:,:,3);
C1= edge(blue,'canny');
C=reshape(C1,1,max);

gab=[A,B,C];
end


function [ K ] = NR(I) %Noise Remover
%M = wiener2(V);
%N = medfilt2(J);
%O = imnoise(J,'gaussian');%pilih1
w=size(I,1);
h=size(I,2);
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);

JR=medfilt2(R);
JG=medfilt2(G);
JB=medfilt2(B);
        
J=[];
for i=1:w
    for j=1:h
        J(i,j,1)=JR(i,j);
        J(i,j,2)=JG(i,j);
        J(i,j,3)=JB(i,j);
    end
end    
K=uint8(J);
end



Perintah dan Pengujian JST 
I=imread('matang\1.jpg');
    U=Normalisasi(I);
    Data(1,:)=U;
I=imread('matang\2.jpg');
    U=Normalisasi(I);
    Data(2,:)=U;
I=imread('matang\3.jpg');
    U=Normalisasi(I);
    Data(3,:)=U;
I=imread('matang\4.jpg');
    U=Normalisasi(I);
    Data(4,:)=U;    
I=imread('matang\5.jpg');
    U=Normalisasi(I);
    Data(5,:)=U;
I=imread('matang\6.jpg');
    U=Normalisasi(I);
    Data(6,:)=U;
 I=imread('matang\7.jpg');
    U=Normalisasi(I);
    Data(7,:)=U;
 I=imread('matang\8.jpg');
    U=Normalisasi(I);
    Data(8,:)=U;   
 I=imread('matang\9.jpg');
    U=Normalisasi(I);
    Data(9,:)=U;  
 I=imread('matang\10.jpg');
    U=Normalisasi(I);
    Data(10,:)=U;
 I=imread('mentah\1.JPG');
    U=Normalisasi(I);
    Data(11,:)=U;
 I=imread('mentah\2.JPG');
    U=Normalisasi(I);
    Data(12,:)=U;
 I=imread('mentah\3.JPG');
    U=Normalisasi(I);
    Data(13,:)=U;
 I=imread('mentah\4.JPG');
    U=Normalisasi(I);
    Data(14,:)=U;   
 I=imread('mentah\5.JPG');
    U=Normalisasi(I);
    Data(15,:)=U;   
 I=imread('mentah\6.JPG');
    U=Normalisasi(I);
    Data(16,:)=U;
 I=imread('mentah\7.JPG');
    U=Normalisasi(I);
    Data(17,:)=U;   
 I=imread('mentah\8.JPG');
    U=Normalisasi(I);
    Data(18,:)=U;   
 I=imread('mentah\9.JPG');
    U=Normalisasi(I);
    Data(19,:)=U;
 I=imread('mentah\10.JPG');
    U=Normalisasi(I);
    Data(20,:)=U;   
 I=imread('ranum\1.jpg');
    U=Normalisasi(I);
    Data(21,:)=U;
 I=imread('ranum\2.jpg');
    U=Normalisasi(I);
    Data(22,:)=U;   
 I=imread('ranum\3.jpg');
    U=Normalisasi(I);
    Data(23,:)=U;   
 I=imread('ranum\4.jpg');
    U=Normalisasi(I);
    Data(24,:)=U;   
 I=imread('ranum\5.jpg');
    U=Normalisasi(I);
    Data(25,:)=U;
 I=imread('ranum\6.jpg');
    U=Normalisasi(I);
    Data(26,:)=U;   
 I=imread('ranum\7.jpg');
    U=Normalisasi(I);
    Data(27,:)=U;
 I=imread('ranum\8.jpg');
    U=Normalisasi(I);
    Data(28,:)=U;   
 I=imread('ranum\9.jpg');
    U=Normalisasi(I);
    Data(29,:)=U;
 I=imread('ranum\10.jpg');
    U=Normalisasi(I);
    Data(30,:)=U;   
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
Training=Data;
jummatang=10;    
jummentah=10;
jumranum=10;

jumdata=jummatang+jummentah+jumranum;    
t=linspace(0,1,jumdata)
Target=t;

save myTraining.mat Training;
save myTarget.mat Target;
%=====================================================================
Pengujian

load myTraining.mat;
load myTarget.mat;

data_latih=Training';
kelas_latih=Target;
    net = newff(minmax (double(data_latih)), [15,7,1], {'logsig','logsig','logsig'},'traincgf');
    net.performFcn='mse';%sse
    net.trainParam.mc=0.95;
    net.trainParam.epochs = 1000;
    net.trainParam.goal = 0.1;
    net.trainParam.lr = 0.001;
    net.trainParam.show = 100;

    [net_keluaran,tr,Y,E]=train(net,double(data_latih),double(kelas_latih));
    jumlah_iterasi=tr.num_epochs;
    nilai_keluaran=Y;
    nilai_error=E;
    error=0.5*sum(nilai_error.^2)

    %%PENGUJIAN
I=imread('ranum\3.jpg');
    dataUji=Normalisasi(I);
    Q=dataUji';
    kelas_uji=sim(net_keluaran,double(Q))
    
    c1=Target(1,10);
    c2=Target(1,20);
    c3=Target(1,30);
    
    hasil='Ranum';
    if kelas_uji <=c1
        hasil='Matang';
    elseif kelas_uji <=c2
        hasil='Mentah';
    end    
    
    disp(hasil);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    


Jumat, 11 Agustus 2017

LVQ melakukan pembelajaran pada lapisan kompetitif yang terawasi. 
Lapisan kompetitif akan secara otomatis belajar untuk mengklasifikasikan vector-vector input. 

Kelas-kelas yang didapat sebagai hasil dari lapisan kompetitif ini hanya tergantung pada jarak antara vector-vector input. Jika vector input mendekati sama maka lapisan kompetitif akan mengklasifikasikan kedua vector input tersebut kedalam kelas yang sama.


LVQ (Learning Vector Quantization) juga merupakan metode dalam Jaringan Syaraf Tiruan untuk melakukan pembelajaran terhadap layer yang supervised. 

Metode klasifikasi pola dengan setiap unit-keluaran mewakili satu kelas tertentu atau satu kategori tertentu. Digunakan vektor acuan (Vector Reference/Codebook). Vektor bobot dari satu unit keluaran yang menjadi acuan bagi kelas/kategori yang diwakili oleh keluaran tersebut. Pendekatan yang dilakukan adalah dengan mengelompokkan vektor input berdasarkan kedekatan jarak vector input terhadap bobot (metode kuadrat jarak Euclidean minimum).

Arsitektur di atas merupakan contoh struktur jaringan LVQ yang memiliki 4 input layer dengan 2 unit neuron pada output layer. W1 dan W2 merupakan bobot yang menghubungkan input layer ke output layer. Setiap fungsi aktivasi F melakukan pemetaan setiap y_In ke klasifikasi y1 atau y2. 

Pada F1, jika |x-w1|<|x-w2| maka y_In1 dipetakan ke y1=1 dan dipetakan ke y1=0 jika sebaliknya. Kondisi ini berlaku juga pada F2, dengan kondisi yang sesuai.



Metode LVQ (Learning Vector Quantization) Untuk Pengenalan Pola

Posted in Umum  February 18, 2016  hwsmartsolution  2
LVQ (Learning Vector Quantization) merupakan metode dalam Jaringan Syaraf Tiruan untuk melakukan pembelajaran terhadap layer yang supervised. Metode klasifikasi pola dengan setiap unit-keluaran mewakili satu kelas tertentu atau satu kategori tertentu. Digunakan vektor acuan (Vector Reference/Codebook). Vektor bobot dari satu unit keluaran yang menjadi acuan bagi kelas/kategori yang diwakili oleh keluaran tersebut. Pendekatan yang dilakukan adalah dengan mengelompokkan vektor input berdasarkan kedekatan jarak vector input terhadap bobot (metode kuadrat jarak Euclidean minimum).

Arsitektur LVQ :

Arsitektur LVQ

Arsitektur di atas merupakan contoh struktur jaringan LVQ yang memiliki 4 input layer dengan 2 unit neuron pada output layer. W1 dan W2 merupakan bobot yang menghubungkan input layer ke output layer. Setiap fungsi aktivasi F melakukan pemetaan setiap y_In ke klasifikasi y1 atau y2. Pada F1, jika |x-w1|<|x-w2| maka y_In1 dipetakan ke y1=1 dan dipetakan ke y1=0 jika sebaliknya. Kondisi ini berlaku juga pada F2, dengan kondisi yang sesuai.

Algoritma :

Langkah 0: Inisialisasi /Inisialisai Vektor-Vektor Acuan dan Inisialisai Laju Pembelajaran alfa=0
Langkah 1: Jika kondisi stop salah, lakukan langkah 2-6
Langkah 2: Untuk setiap training vector, lakukan langkah 3-4
Langkah 3: Dapatkan nilai j sehingga ||x-wj|| bernilai minimum
Langkah 4: Update nilai bobot wj

Jika T = Cj
Wj(baru) = wj(lama) + α(x-wj(lama))

Jika T ≠ Cj
Wj(baru) = wj(lama) – α(x-wj(lama))

Langkah 5: Update nilai learning rate

Langkah 6: Uji kondisi stop
      Uji kondisi stop ini dapat dilakukan berdasarkan jumlah iterasi tertentu (mulai dari langkah 1) atau setelah laju pembelajaran yang telah mencapai harga yang sangat kecil.

Dimana:
      X = training vector (x1 ,….,xi,… ,xn)

      T = kategori training vector yang benar untuk pelatihan

      Wj = vector bobot untuk unit keluaran ke-j (w1j,….,wij,…..,win)

      Cj = kategori  atau kelas yang diwakili oleh nilai unit keluaran  ke-j(hasil training)


      ||x-wj|| = Euclidian  distances antara vektor masukkan dan vektor bobot dari unit keluaran ke-j.

Reff Doc

++++++++++++++++
Pengujian Dasar + Pembuktian (Kasus 2 Row / Ya atau Tidak / 1 atau 0)

P = [-3 -2 -2  0  0  0  0 +2 +2 +3; 0 +1 -1 +2 +1 -1 -2 +1 -1  0];
Tc = [1 1 1 2 2 2 2 1 1 1];
T = ind2vec(Tc);
net = newlvq(P,4,[.6 .4]);
net = train(net,P,T);
Y = sim(net,P)
Yc = vec2ind(Y)
E = Tc-Yc

MSE = mse(E)

Y =

     1     1     1     0     0     0     0     1     1     1
     0     0     0     1     1     1     1     0     0     0


Yc =

     1     1     1     2     2     2     2     1     1     1


E =

     0     0     0     0     0     0     0     0     0     0


MSE =


     0

Implementasi Multi Row(Lebih dari 2 Output)



load datalatih
load datatarget     
datatraining=datalatih';

T=[1 1 1 2 2 2];
A=[1:3];
B=[4:6];
C=[7:9];
D=[10:12];
E=[13:15];
F=[16:18];
G=[19:21];
H=[22:24];
I=[25:27];
J=[28:30];

netAB=getNet(datatraining,A,B,T);save netAB.mat netAB;
netAC=getNet(datatraining,A,C,T);save netAC.mat netAC;
netAD=getNet(datatraining,A,D,T);save netAD.mat netAD;
netAE=getNet(datatraining,A,E,T);save netAE.mat netAE;
netAF=getNet(datatraining,A,F,T);save netAF.mat netAF;
netAG=getNet(datatraining,A,G,T);save netAG.mat netAG;
netAH=getNet(datatraining,A,H,T);save netAH.mat netAH;
netAI=getNet(datatraining,A,I,T);save netAI.mat netAI;
netAJ=getNet(datatraining,A,J,T);save netAJ.mat netAJ;
netBC=getNet(datatraining,B,C,T);save netBC.mat netBC;
netBD=getNet(datatraining,B,D,T);save netBD.mat netBD;
netBE=getNet(datatraining,B,E,T);save netBE.mat netBE;
netBF=getNet(datatraining,B,F,T);save netBF.mat netBF;
netBG=getNet(datatraining,B,G,T);save netBG.mat netBG;
netBH=getNet(datatraining,B,H,T);save netBH.mat netBH;
netBI=getNet(datatraining,B,I,T);save netBI.mat netBI;
netBJ=getNet(datatraining,B,J,T);save netBJ.mat netBJ;
netCD=getNet(datatraining,C,D,T);save netCD.mat netCD;
netCE=getNet(datatraining,C,E,T);save netCE.mat netCE;
netCF=getNet(datatraining,C,F,T);save netCF.mat netCF;
netCG=getNet(datatraining,C,G,T);save netCG.mat netCG;
netCH=getNet(datatraining,C,H,T);save netCH.mat netCH;
netCI=getNet(datatraining,C,I,T);save netCI.mat netCI;
netCJ=getNet(datatraining,C,J,T);save netCJ.mat netCJ;
netDE=getNet(datatraining,D,E,T);save netDE.mat netDE;
netDF=getNet(datatraining,D,F,T);save netDF.mat netDF;
netDG=getNet(datatraining,D,G,T);save netDG.mat netDG;
netDH=getNet(datatraining,D,H,T);save netDH.mat netDH;
netDI=getNet(datatraining,D,I,T);save netDI.mat netDI;
netDJ=getNet(datatraining,D,J,T);save netDJ.mat netDJ;
netEF=getNet(datatraining,E,F,T);save netEF.mat netEF;
netEG=getNet(datatraining,E,G,T);save netEG.mat netEG;
netEH=getNet(datatraining,E,H,T);save netEH.mat netEH;
netEI=getNet(datatraining,E,I,T);save netEI.mat netEI;
netEJ=getNet(datatraining,E,J,T);save netEJ.mat netEJ;
netFG=getNet(datatraining,F,G,T);save netFG.mat netFG;
netFH=getNet(datatraining,F,H,T);save netFH.mat netFH;
netFI=getNet(datatraining,F,I,T);save netFI.mat netFI;
netFJ=getNet(datatraining,F,J,T);save netFJ.mat netFJ;
netGH=getNet(datatraining,G,H,T);save netGH.mat netGH;
netGI=getNet(datatraining,G,I,T);save netGI.mat netGI;
netGJ=getNet(datatraining,G,J,T);save netGJ.mat netGJ;
netHI=getNet(datatraining,H,I,T);save netHI.mat netHI;
netHJ=getNet(datatraining,H,J,T);save netHJ.mat netHJ;
netIJ=getNet(datatraining,I,J,T);save netIJ.mat netIJ;

TOT=zeros(1,10);
Uji=datatraining(:,5);

gA=0;
gB=0;
gC=0;
gD=0;
gE=0;
gF=0;
gG=0;
gH=0;
gI=0;
gJ=0;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y = sim(netAB,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gB=gB+1; 
end    

Y = sim(netAC,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gC=gC+1; 
end   

Y = sim(netAD,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gD=gD+1; 
end    

Y = sim(netAE,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netAF,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netAG,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netAH,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netAI,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netAJ,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netBC,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gC=gC+1; 
end   

Y = sim(netBD,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gD=gD+1; 
end   

Y = sim(netBE,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netBF,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netBG,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netBH,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netBI,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netBJ,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netDE,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netCD,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gD=gD+1; 
end   

Y = sim(netCE,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netCF,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netCG,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netCH,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netCI,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netCJ,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netDF,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netDG,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netDH,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netDI,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netDJ,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netEF,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netEG,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netEH,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netEI,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netEJ,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netFG,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netFH,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netFI,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netFJ,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netGH,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netGI,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netGJ,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netHI,Uji);
g= vec2ind(Y);
if g==1
    gH=gH+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netHJ,Uji);
g= vec2ind(Y);
if g==1
    gH=gH+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netIJ,Uji);
g= vec2ind(Y);
if g==1
    gI=gI+1;
elseif g==2
    gJ=gJ+1; 
end   

gA
gB
gC
gD
gE
gF
gG
gH
gI
gJ

siapa='?';
citra=[''];
if gA>=gB && gA>=gC && gA>=gD && gA>=gE && gA>=gF && gA>=gG && gA>=gH && gA>=gI && gA>=gJ
    siapa='klasifikasi1';
    citra=['datalatih/1.jpg'];
elseif gB>=gA && gB>=gC && gB>=gD && gB>=gE && gB>=gF && gB>=gG && gB>=gH && gB>=gI && gB>=gJ
    siapa='klasifikasi2';
    citra=['datalatih/4.jpg'];
elseif gC>=gB && gC>=gA && gC>=gD && gC>=gE && gC>=gF && gC>=gG && gC>=gH && gC>=gI && gC>=gJ
        siapa='klasifikasi3';
    citra=['datalatih/7.jpg'];
elseif gD>=gB && gD>=gC && gD>=gA && gD>=gE && gD>=gF && gD>=gG && gD>=gH && gD>=gI && gD>=gJ
       siapa='klasifikasi4';
    citra=['datalatih/10.jpg'];
elseif gE>=gB && gE>=gC && gE>=gD && gE>=gA && gE>=gF && gE>=gG && gE>=gH && gE>=gI && gE>=gJ
       siapa='klasifikasi5';
    citra=['datalatih/13.jpg'];
elseif gF>=gB && gF>=gC && gF>=gD && gF>=gE && gF>=gA && gF>=gG && gF>=gH && gF>=gI && gF>=gJ
        siapa='klasifikasi6';
    citra=['datalatih/16.jpg'];
elseif gG>=gB && gG>=gC && gG>=gD && gG>=gE && gG>=gF && gG>=gA && gG>=gH && gG>=gI && gG>=gJ
        siapa='klasifikasi7';
    citra=['datalatih/19.jpg'];
elseif gH>=gB && gH>=gC && gH>=gD && gH>=gE && gH>=gF && gH>=gG && gH>=gA && gH>=gI && gH>=gJ
        siapa='klasifikasi8';
    citra=['datalatih/22.jpg'];
elseif gI>=gB && gI>=gC && gI>=gD && gI>=gE && gI>=gF && gI>=gG && gI>=gH && gI>=gA && gI>=gJ
        siapa='klasifikasi9';
    citra=['datalatih/5.jpg'];
elseif gJ>=gB && gJ>=gC && gJ>=gD && gJ>=gE && gJ>=gF && gJ>=gG && gJ>=gH && gJ>=gI && gJ>=gA
        siapa='klasifikasi10';
    citra=['datalatih/28.jpg'];


end




Sehingga Kita bisa menerapkan LVQ bawaannya Matlab ke dalam multi row atau banyak klasifikasi Output yang diinginkan.....



Hasil :
gA =

     1


gB =

     2


gC =

     9


gD =

     7


gE =

     8


gF =

     5


gG =

     6


gH =

     2


gI =

     2


gJ =


     3


Klasifiaksi kategori 3 atau gC dengan nilai tertinggi (9)./ Terbukti karena Uji=datatraining(:,5) terletak pada klasifikasi / gropu ke 3 atau C.
datatarget=[1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10];
%dtatargetsim =[AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ]

dengan code generatenya adlah sbb:

al=['datalatih/'];
B=30;
path=[al '1.jpg'];
I=imread(path);
ED=double(getNormalisasi(I));
w=size(ED,1);
h=size(ED,2);
wh=w*h;
for i=1:B
    path=[al num2str(i) '.jpg']
    I=imread(path);
    ED=double(getNormalisasi(I));
    M=reshape(ED,[1,wh]);
    datalatih(i,:)=M;
end    

datatarget=[1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10];
save datalatih.mat datalatih
save datatarget.mat datatarget


msgbox('Generate Berhasil','sukse','help');

oK SELAMAT MENCOBAAA...................................