36
Discrete Cosine Transform 8x8 Titik untuk Kompresi Citra menggunakan FPGA 1. Pendahuluan Discrete Cosine Transform dua dimensi (DCT-2D) digunakan sebagai bagian dari kompresi citra. Menggunakan DCT-2D, nilai-nilai piksel suatu citra di kawasan spatial akan ditransformasi menjadi suatu himpunan koefisien DCT di kawasan frekuensi. Sebelum dilakukan operasi kompresi, data citra dalam memori dibagi-bagi menjadi beberapa blok MCU (minimum code unit). Masing-masing blok terdiri dari 8x8 piksel. Operasi kompresi termasuk DCT-2D di dalamnya akan dilakukan terhadap masing-masing blok (Wallace, 1991). a. DCT satu dimensi DCT-1D N titik ditunjukkan oleh persamaan (1) (1) dengan a 0 = 1/√N dan a n = √(2/N) untuk 1< n < N – 1. Untuk N=8, persamaan (1) bisa dijadikan dalam bentuk perkalian matrik seperti persamaan (2) sebagai berikut: y = C x

Discrete Cosine Transform Dua Dimensi untuk …te.ugm.ac.id/~enas/dct fpga.doc · Web viewDiscrete Cosine Transform 8x8 Titik untuk Kompresi Citra menggunakan FPGA Pendahuluan Discrete

  • Upload
    others

  • View
    9

  • Download
    1

Embed Size (px)

Citation preview

Discrete Cosine Transform 8x8 Titik untuk Kompresi Citra menggunakan FPGA

1. Pendahuluan

Discrete Cosine Transform dua dimensi (DCT-2D) digunakan sebagai bagian dari

kompresi citra. Menggunakan DCT-2D, nilai-nilai piksel suatu citra di kawasan

spatial akan ditransformasi menjadi suatu himpunan koefisien DCT di kawasan

frekuensi. Sebelum dilakukan operasi kompresi, data citra dalam memori dibagi-bagi

menjadi beberapa blok MCU (minimum code unit). Masing-masing blok terdiri dari

8x8 piksel. Operasi kompresi termasuk DCT-2D di dalamnya akan dilakukan

terhadap masing-masing blok (Wallace, 1991).

a. DCT satu dimensi

DCT-1D N titik ditunjukkan oleh persamaan (1)

(1)

dengan a0 = 1/√N dan an = √(2/N) untuk 1< n < N – 1. Untuk N=8, persamaan (1)

bisa dijadikan dalam bentuk perkalian matrik seperti persamaan (2) sebagai berikut:

y = C x

(2)

dengan cn = cos (nπ/16).

Menurut Arai, dkk (1988), matrik C bisa difaktorisasi menjadi perkalian beberapa

matrik pada persamaan (3) sebagai berikut:

C = S * G * F * E * D * B * A (3)

dengan

A= B= D=

E= F= G=

dan

S=0.5

serta

m1= cos (4π/16)

m2= cos (6π/16)

m3= cos (2π/16) - cos (6π/16)

m4= cos (2π/16) + cos (6π/16)

cn = cos (nπ/16).

Kemudian persamaan (3) diubah menjadi persamaan (4)

Cs = G * F * E * D * B * A (4)

Pada dasarnya Cs pada persamaan (4) adalah C pada persamaan (3) tanpa matrik

faktor penskalaan S. Matrik S dihilangkan untuk mengurangi jumlah perkalian pada

komputasi DCT. Persamaan (4) disebut DCT terskala. Penskalaan tersebut

memungkinkan karena DCT digunakan pada kompresi citra. Pada kompresi, proses

DCT akan diikuti dengan proses kuantisasi. Matrik penskalaan akan diikutkan pada

proses kuantisasi.

Agostini, dkk (2000) menjabarkan persamaan (4) menjadi suatu langkah-langkah

algoritma DCT-1D. Dengan masukan x dan keluaran adalah y, algoritma DCT-1D 8

titik bisa didefinisikan pada tabel 1 sebagai berikut:

Input x = [ x0 x1 x2 x3 x4 x5 x6 x7 ], Output y = [ y0 y1 y2 y3 y4 y5 y6 y7 ]

Tabel 1: Langkah-langkah algoritma DCT-1DStep 1:

a0 = x0 + x7

a1 = x1 + x6

a2 = x3 – x4

a3 = x1 - x6

a4 = x2 + x5

a5 = x3 + x4

a6 = x2 – x5

a7 = x0 – x7

Step 2:

b0 = a0 + a5

b1 = a1 - a4

b2 = a2 + a6

b3 = a1 + a4

b4 = a0 - a5

b5 = a3 + a7

b6 = a3 + a6

b7 = a7

Step 3:

d0 = b0 + b3;d1 = b0 - b3;d2 = b2;d3 = b1 + b4;d4 = b2 - b5;d5 = b4;d6 = b5;d7 = b6;d8 = b7;

Step 4:

e0 = d0;e1 = d1;e2 = m3 * d2;e3 = m1 * d7;e4 = m4 * d6;e5 = d5;e6 = m1 * d3;e7 = m2 * d4;e8 = d8;

Step 5:

f0 = e0;f1 = e1;f2 = e5 + e6;f3 = e5 - e6;f4 = e3 + e8;

f5 = e8 - e3;f6 = e2 + e7;

f7 = e4 + e7;Step 6:

y0 = f0;y1 = f4 + f7;y2 = f2;y3 = f5 - f6;y4 = f1;y5 = f5 + f6;y6 = f3;y7 = f4 - f7;

b. DCT 2 dimensi 8X8

Pada DCT 2 dimensi 8X8 titik, masukan dan keluaran adalah berupa matrik 8X8.

Persamaan DCT 2 dimensi ditunjukkan pada persamaan 5 sebagai berikut

(5)

Jika dibuat dalam notasi matrik, dengan matrik X sebagai input dan Y sebagai output,

DCT 2D memiliki persamaan (6) sebagai berikut:

Y = [C] [X] [C]T (6)

X = matrik input DCT 8x8

Y = matrik input DCT 8x8

C = matrik DCT , sama dengan matrik C pada persamaan 1

Menurut Agostini (2000), untuk membuat DCT 2D terskala digunakan persamaan (7)

berikut:

Y = [S2D] .* [Cs]*[X]*[Cs]T (7)

dengan

Cs = matrik DCT terskala sama dengan yang ditunjukkan pada persamaan (4)

S2D = matrik penskalaan DCT-2D

“ .* ” = operasi perkalian antar elemen matrik

“ * “ = operasi perkalian matrik biasa

c. Operasi kuantisasi

Pada kompresi citra JPEG lossy (Wallace, 1991) Operasi kuantisasi dilakukan untuk

menghilangkan komponen-komponen frekuensi tinggi dari citra hasil DCT-2D.

Untuk melakukan operasi ini, citra hasil DCT dibagi dengan suatu nilai yang sudah

terdefinisi pada tabel kuantisiasi. Tabel kuantisasi disajikan dalam bentuk matrik 8x8

seperti pada persamaan (8).

Q = (8)

Proses kuantisasi ditunjukkan pada persamaan (9) berikut:

yq mn = integer round (ymn / qmn) (9)

dengan yq = nilai terkuantisasi dan y = nilai sebelum dikuantisasi

d. Operasi zigzag

Data hasil kompresi akan dikeluarkan secara sekuensial pada kompresi JPEG standar.

Urutan pengeluaran data disusun secara zig-zag(Wallace,1991) dan ditunjukkan oleh

gambar 1 berikut.

Gambar 1. Urutan pengeluaran data secara zig-zag pada standar JPEG

2. Perancangan Sistem

Gambaran sistem secara global ditunjukkan oleh gambar 2. Sistem mempunyai input

data 8 bit, output 9 bit, input clock,enable dan clear, serta output ready. Data yang

akan diproses dimasukkan tiap 8 bit ke dalam sistem setiap tepi positif clock. Ketika

data output sudah siap dikeluarkan, pin ready aktif dan data output akan dikeluarkan

tiap 9 bit setiap tepi positif clock.

Gambar 2. Gambaran sistem secara global

Secara lebih detail, sistem ditunjukkan pada gambar 3. Sistem terdiri dari 2 unit DCT-

1D, unit kendali, transpose buffer, output buffer, generator alamat zig-zag, ROM

kuantisasi, dan quantizer. Implementasi sistem ke dalam keping FPGA dilakukan

dengan bahasa pemrograman VHDL dengan software Xilinx ISE 10. Development

System FPGA yang digunakan adalah Spartan-3E.

Gambar 3. Gambaran detail implementasi DCT-2D dan kuantisasi di FPGA

a. Unit DCT-1D (DCT1 dan DCT2)

Unit DCT-1D melakukan operasi DCT terhadap 8 titik input yang masuk ke unit

secara sekuensial titik demi titik. Pengeluaran unit DCT juga dilakukan secara

sekuensial. Aliran input dan output ditunjukkan oleh gambar 4. Titik input pada

DCT1 memiliki lebar 8 bit, sedangkan pada DCT2 memiliki lebar 10 bit. Titik output

DCT1 memiliki lebar 10 bit, sedangkan DCT2 13 bit.

Gambar 4. Aliran data input-output pada unit DCT 1D

Pada implementasinya ke FPGA, digunakan langkah-langkah seperti pada tabel 1

yang dijabarkan oleh Agostini (2000). Berdasarkan langkah-langkah tersebut bisa

disusun suatu pemrosesan yang dilakukan secara pipeline. Masing-masing langkah

dilakukan setiap satu siklus clock. Gambaran proses pipeline DCT-1D ditunjukkan

oleh tabel 2 sampai 4. tabel-tabel tersebut menunjukkan proses yang dikerjakan pada

24 clock pertama. Detail proses yang dilakukan tiap step dijelaskan pada tabel 1.

Tabel 2. Proses yang dikerjakan dari clock ke-1 sampai ke-5

Tabel 3. Proses yang dikerjakan pada clock ke-9 sampai ke-16

Tabel 4. Proses yang dikerjakan pada clock ke-17 sampai ke-24

dengan

a(mn) berarti x(n)=in(m,n),

b(mn) berarti out(m,n) = y(n),

dan s(k) berarti step ke-k.

Dari tabel 3 bisa diketahui bahwa output DCT-1D yang pertama kali baru keluar

pada clock ke-15 yaitu pada stage 2 dan count ke-6.

b. Transpose Buffer

Transpose buffer digunakan untuk menampung hasil DCT1. Data hasil DCT1

tersebut kemudian harus bisa dikeluarkan secara transpose untuk diolah dengan

DCT2. Jika data yang masuk berorientasi kolom, data yang keluar dari transpose

buffer berorientasi baris. Visualisasi transpose buffer ditunjukkan pada gambar 5.

Gambar 5. Visualisasi data input dan output pada Transpose Buffer

dengan ymn = elemen y pada baris m dan kolom n.

RAM yang digunakan sebagai transpose buffer dibuat mempunyai dua bus data,

yaitu untuk input dan output serta dua bus alamat yang juga digunakan untuk input

dan output. Transpose Buffer adalah RAM satu dimensi yang digunakan untuk

menyimpan data dua dimensi yaitu citra. Pemetaan alamat RAM ke data ditunjukkan

pada gambar 6.

Gambar 6. Pemetaan alamat RAM 1 dimensi ke dalam matrik citra 8x8

Jadi urutan alamat input adalah diurutkan dalam satu baris sebagai berikut,

0, 1, 2, 3, 4, 5, ...., 8,9,..., 63.

Urutan alamat output adalah diurutkan dalam satu kolom sebagai berikut,

0,8,16,24,32,40, ...., 1,9,17, ....., 63.

Dalam perancangan pada VHDL, sesuai dengan tabel 2, data output pertama( y[0])

baru dikeluarkan pada transisi positif clock ke-15. Output transpose buffer itu akan

dimasukkan ke unit DCT 8 titik berikutnya(DCT2). Jika divisualisasikan secara

paralel, interkoneksi DCT1 – transpose buffer – DCT2 ditunjukkan pada gambar 7.

Blok DCT terpartisi menjadi 8 sub-blok (dipisahkan dengan garis putus-putus

mendatar). Hal ini menunjukkan bahwa data yang akan ditransformasi dibagi-bagi

lebih dahulu sehingga masing-masing kelompok ada 8 titik. DCT akan diterapkan

pada tiap 8 titik tersebut. Panah dengan garis putus-putus pada blok transpose buffer

menunjukkan sebagian operasi pada bagian tersebut. Panah tersebut menunjukkan 8

data pertama (kelompok output pertama) yang dikeluarkan transpose buffer berasal

dari data-data pertama pada masing-masing kelompok keluaran DCT1. Hal itu juga

berlaku untuk kelompok output kedua dan seterusnya.

Blok transpose buffer mempunyai dua bus alamat, yaitu bus alamat input dan bus

alamat output. Bus alamat input digunakan untuk menulis data output DCT1 ke

buffer. Bus alamat input diakses dengan diberi nilai alamat dengan sekuens yang

normal (increment), yaitu 0,1,2,3,.., dan seterusnya. Bus alamat output digunakan

untuk membaca dari buffer dan data yang dikeluarkan akan dikirim ke DCT2. Bus

alamat ini diakses dengan diberi nilai alamat secara transpose yaitu 0,8,16,24,..., dst.

x24

x25

x26

x27

x28

x29

x30

x31

x8

x9

x10

x11

x12

x13

x14

x15

x16

x17

x18

x19

x20

x21

x22

x23

x32

x33

x34

x35

x36

x37

x38

x39

x40

x41

x42

x43

x44

x45

x46

x47

x48

x49

x50

x51

x52

x53

x54

x55

x8

x9

x10

x11

x12

x13

x14

x15

x16

x17

x18

x19

x20

x21

x22

x23

x24

x25

x26

x27

x28

x29

x30

x31

x32

x33

x34

x35

x36

x37

x38

x39

x40

x41

x42

x43

x44

x45

x46

x47

x48

x49

x50

x51

x52

x53

x54

x55

X1

X9

X17

X25

X33

X41

X49

X57

X2

X10

X18

X26

X34

X42

X50

X58

X3

X11

X19

X27

X35

X43

X51

X59

X4

X12

X20

X28

X36

X44

X52

X60

X5

X13

X21

X29

X37

X45

X53

X61

X6

X14

X22

X30

X38

X46

X54

X62

Y8

Y9

Y10

Y11

Y12

Y13

Y14

Y15

Y16

Y17

Y18

Y19

Y20

Y21

Y22

Y23

Y24

Y25

Y26

Y27

Y28

Y29

Y30

Y31

Y32

Y33

Y34

Y35

Y36

Y37

Y38

Y39

Y40

Y41

Y42

Y43

Y44

Y45

Y46

Y47

Y48

Y49

Y50

Y51

Y52

Y53

Y54

Y55

x0

x1

x2

x3

x4

x5

x6

x7

x56

x57

x58

x59

x60

x61

x62

x63

X0

X1

X2

X3

X4

X5

X6

X7

X56

X57

X58

X59

X60

X61

X62

X63

X0

X8

X16

X24

X32

X40

X48

X56

X7

X15

X23

X31

X39

X47

X55

X63

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

Y56

Y57

Y58

Y59

Y60

Y61

Y62

Y63

DCT1Transpose buffer DCT2

Gambar 7. Visualisasi paralel proses DCT-2D

c. Zigzag Buffer

Data dari unit DCT-2D akan dikeluarkan secara zigzag seperti gambar 1. Urutan data

zigzag ini sesuai dengan aturan standar yang ditetapkan JPEG (Wallace, 1991).

Untuk keperluan tersebut digunakan modul memori yang sama dengan transpose

buffer. Bus alamat input buffer zigzag diberi nilai dengan sekuens yang normal,

sedangkan bus alamat output diberi sekuens zigzag. Data keluaran DCT2

ditempatkan pada alamat memori buffer zigzag dengan urutan normal (0,1,2,3,4.. dan

seterusnya). Kemudian, data yang tersimpan di buffer tersebut dibaca dengan urutan

alamat zigzag. Urutan alamat zigzag disimpan dalam suatu ROM. Bus data keluaran

ROM dihubungkan dengan bus alamat output buffer zigzag. Urutan alamat zigzag

ditunjukkan pada gambar 8.

Gambar 8. Alamat zigzag yang tersimpan dalam ROM

d.Quantizer

Pada prinsipnya quantizer adalah suatu pembagi bilangan. Proses kuantiasi dilakukan

dengan cara membagi bilangan yang akan dikuantisasi dengan bilangan quantizer.

Proses pembagian dengan mudah bisa diubah menjadi perkalian. Tabel kuantisasi

untuk luminance pada standar JPEG ditampilkan pada gambar 9 (Wallace, 1991).

Gambar 9. Tabel kuantisasi untuk luminance

X0

X1

X2

X3

X4

X5

X6

X7

Karena DCT yang digunakan adalah DCT terskala, pada proses kuantisasi perlu

dilakukan perkalian dengan nilai penskala supaya nilai data kembali normal. Nilai

penskala ini dikalikan dengan matrik kuantisasi sehingga menghasilkan matrik

kuantisasi baru yang langsung dikalikan dengan data keluaran DCT. Misalnya matrik

kuantisasi Q adalah 1/(nilai_tabel_kuantisasi).

Q =

Matrik Q tersebut dikalikan per elemen dengan matrik penskala K yang dibentuk

dengan persamaan 10 berikut.

K = s * s’ (10)

dengan

s = 0.5

cn = cos (nπ/16).

Matrik kuantisasi baru yang akan dikalikan dengan output DCT ditentukan dengan

persamaan (11).

Qbaru = K .* Q (11)

dengan .* adalah operator perkalian antar elemen matrik. Nilai Qbaru tersebut akan

disimpan dalam ROM kuantisasi.

Proses kuantisasi dilakukan dengan mengalikan satu demi satu (secara sekuensial)

nilai yang keluar dari buffer zigzag dengan nilai yang keluar dari ROM kuantisasi.

ROM kuantisasi diakses secara zigzag dengan urutan alamat yang sama dengan

alamat output zigzag buffer.

e. Controller

Fungsi utama controller adalah untuk menghasilkan isyarat kendali(enable DCT) dan

alamat serta menerima isyarat status dari DCT (ready). Unit controller dan DCT

bersama-sama dikendalikan oleh masukan clock. Controller menentukan waktu saat

enable DCT diaktifkan dan nilai yang akan dikeluarkan di bus alamat.

3. Pengujian Sistem dan Hasilnya

a. Secara Simulasi

Untuk menguji sistem yang sudah dirancang, digunakan sebuah sampel citra

grayscale yang ditunjukkan oleh gambar 10. Sebuah program Matlab dibuat untuk

membaca citra sampel. Program Matlab kemudian mengubah citra tersebut menjadi

sebuah test bench source dalam VHDL. Test bench digunakan untuk memberi

stimulus rangkaian yang akan disimulasi. Untuk menguji nilai output rangkaian yang

telah dirancang, digunakan skema pada gambar 11.

Gambar 10. Citra untuk testbench

Gambar 11. Skema pengujian hasil simulasi rangkaian

Pengujian dilakukan secara khusus terhadap rangkaian DCT-2D dan juga rangkaian

DCT-2D dan quantizer secara keseluruhan.

a.1. Hasil Simulasi

- akuisisi input

Gambar 12 menunjukkan simulasi penyimpanan nilai input DCT pada register

internal rangkaian. Nilai pada input dicuplik pada setiap positive edge dari clock.

Data input dimasukkan secara sekuensial dengan kendali clock. Setiap titik input

dimasukkan pada setiap tepi positif clock.

Gambar 12. Simulasi akuisisi input

- Simulasi pengeluaran data output DCT 2 dimensi

Hasil simulasi pengeluaran data output DCT2D sebelum zigzag dan kuantisasi

ditunjukkan pada gambar 12.

Gambar 13. Hasil simulasi pengeluaran output DCT2D

Dari gambar 13 bisa dilihat bahwa output DCT-2D yang valid baru keluar mulai t = 1890

ns. Dengan periode clock 20ns, berarti output DCT-2D yang valid pertama kali baru

muncul pada clock ke-95. Bisa dikatakan, DCT-2D mempunyai latency 95 siklus clock.

Isyarat ‘en_out’ digunakan sebagai penanda(status) bahwa pada clock berikutnya, akan

muncul data yang valid.

- Pengeluaran buffer zigzag dan quantizer

Output sistem secara keseluruhan merupakan output dari buffer zigzag dan quantizer.

Gambaran pengeluaran output sistem secara keseluruhan ditunjukkan pada gambar 13.

Gambar 14. Hasil simulasi pengeluaran output sistem secara keseluruhan.

Dari Gambar 14 bisa dilihat bahwa output sistem baru ready pada t =2470 ns. Dengan

periode clock 20 ns, data output baru ready pada clock ke-123. Addr_baca adalah alamat

input buffer zigzag yang dihasilkan oleh ROM zigzag. Pada gambar 14 juga bisa dilihat

bahwa urutan addr_baca yang dikeluarkan sama dengan urutan alamat zigzag pada

gambar 8.

a.2. Perbandingan nilai keluaran rangkaian hasil simulasi dan perhitungan Matlab

- keluaran DCT 2D

Berikut ini adalah cuplikan program Matlab untuk melakukan DCT-2D pada suatu

sampel citra

Im = double(imread('tes.bmp'));

I =Im(1:16,1:16);Id= I-128;fun = @dct_arai;I2 = blkproc(Id,[8 8],fun)

Kemudian cuplikan program Matlab berikutnya adalah pembacaan output hasil simulasi

VHDL.

%bandingkan dengan hasil dari orcadfid_r=fopen('dct_out_pre.txt','r+'); %file output simulasidum=fgets(fid_r);[m,n]=size(Id);m_out=[];i=1;j=1;base=0;while feof(fid_r) == 0 str = fgets(fid_r); num = eval(str); m_out(i,j)=num; j=j+1; if(j==base+9) i=i+1; if(i>m) i=1; base=base+8; end; j=1+base; end;end;

Langkah berikutnya adalah menghitung selisih antara data perhitungan Matlab dengan

data hasil simulasi. Langkah ini digunakan untuk mengetahui tingkat ketelitian

penghitungan DCT-2D oleh rangkaian. Untuk mengukur tingkat kesalahan, digunakan

kriteria mean square error.

err=I2-m_out

err2=err.^2%nilai mean square errormse=sum(sum(err2))/(m*n)

Berdasarkan analisis hasil simulasi VHDL, didapatkan bahwa dengan citra yang

diberikan, output DCT-2D mempunyai nilai MSE sebesar

mse =0.4565

- Keluaran quantizer

Untuk menganalisis keluaran quantizer, digunakan metode dan sampel citra yang sama

dengan analisis keluaran DCT-2D. Keluaran quantizer dibandingkan dengan hasil

perhitungan DCT 2 dimensi dan kuantisasi pada Matlab. Berikut adalah cuplikan

program untuk perhitungan DCT 2 dimensi yang diikuti dengan kuantisasi.

Im = double(imread('tes.bmp'));I =Im(1:16,1:16);Id= I-128;%data yang akan di DCT kanfun3=@dct2; I4 = blkproc(Id,[8 8],fun3); %lakukan DCT 2Dfun4=@quantize;I5 = blkproc(I4,[8 8],fun4) %lakukan kuantisasi

Hasil pengolahan menggunakan perintah Matlab tersebut kemudian dibandingkan dengan

data hasil simulasi VHDL yang telah tersimpan dalam bentuk file.

fid_r=fopen('dct_out.txt','r+');%dum=fgets(fid_r);m=16;n=16;m_out=[];i=1;while feof(fid_r) == 0 str = fgets(fid_r); num = eval(str);

m_out(i)=num; i=i+1;end;fclose(fid_r);%m_out;fun6=@zigzag_invm_out2=blkproc(m_out,[1 64],fun6);m_tmp2=[];k=1;for i=1:n/8 m_tmp=[]; for j=1:m/8 ma=m_out2(:,k:k+7); m_tmp=[m_tmp;ma]; k=k+8; end; m_tmp2=[m_tmp2 m_tmp]; %m_tmp2 adalah data hasil simulasi rangkaian

%yang dibentuk menjadi sebuah matrik m*nend;m_tmp2 %tampilkan matrik m_tmp2

Untuk mengetahui tingkat kebenaran output, bandingkan output simulasi rangkaian

dengan hasil perhitungan Matlab sebagai berikut:err=I5-m_tmp2err2=err.^2%nilai mean square errormse=sum(sum(err2))/(m*n)

Dari hasil perhitungan, didapatkan nilai MSE yaitu

MSE = 0.0518.

Berikut ini adalah hasil lengkap eksekusi program di Matlab untuk 16 X 16 data pertama

- hasil perhitungan DCT2D - kuantiasiMatlab:

I5 =

Columns 1 through 11

1.2500 -12.9981 18.2235 8.4061 -0.5729 0.6096 -0.2120 0.0302 -35.3437 26.1146 12.4708 1.8115 2.5407 5.5988 -3.0328 0.2785 -0.4058 -0.1243 -0.6224 17.6743 15.4977 1.9610 -3.1371 2.7157 -2.7801 1.7497 -0.4250 0.4139 0.0254 0.0403 1.0719 -2.4890 -6.6031 1.4416 -1.6704 1.7147 -1.1940 0.2346 -0.1105 0.3716 -0.2583 1.5174 -0.0197 -1.6604 -0.8611 1.0804 -0.6748 0.4351 -0.1581 0.1547 -0.0651 0.1708 1.6389 0.7485 -0.0786 0.8038 -0.4698 0.3042 -0.3007 0.1618 -0.0948 0.0644 -0.0507 -0.2186 -0.5483 -0.3969

-0.2307 0.1992 -0.2627 0.1089 -0.0052 0.0083 -0.1939 0.1622 -0.0606 -0.0666 0.0977 0.0483 -0.0637 0.0566 -0.0480 0.0515 -0.0417 0.0306 -0.0252 -0.3039 -0.2450 -0.1117 -10.7891 37.6573 -13.2365 -0.4238 4.8594 -0.1959 -0.6361 1.1334 -52.2422 -0.8928 0.9722 -14.2534 -14.5233 4.7859 5.3650 -1.7556 0.5232 0.8617 -0.5987 -0.9170 2.0294 -0.8203 -2.7349 -4.6707 1.0089 1.3640 -0.9077 0.3761 0.1703 -0.3948 0.9926 -1.0228 0.5904 5.2861 1.1062 -1.1480 -0.1291 -0.0408 0.0283 -0.2406 0.1994 -0.4140 0.1074 -0.0701 4.5486 1.6010 -0.9329 -0.3537 0.1636 -0.0375 -0.3301 0.4305 -0.0486 -0.0438 -0.0950 0.5671 0.0448 -0.0222 0.0523 -0.0093 0.1171 -0.1135 0.0661 0.0030 -0.0422 -0.0633 -1.0266 -0.6701 0.3910 0.1586 -0.1312 0.1745 0.0447 -0.0570 -0.0153 -0.0306 -0.0258 -0.8294 -0.3483 0.3147 0.1161 -0.0859 0.1050 0.1134 -0.0722 0.0010 -0.0022 -0.0052

Columns 12 through 16

2.1572 0.6667 0.0966 -0.1427 -0.0333 -2.0927 -0.9763 -0.1987 -0.1742 -0.1279 -3.8677 -0.6529 0.2011 0.1611 0.1229 -0.2001 0.9085 0.5749 0.3336 0.2014 0.1988 0.3897 -0.0243 -0.2458 -0.1575 -0.0701 -0.0457 -0.3353 -0.4351 -0.2920 0.3798 0.3520 0.0803 -0.0113 0.0694 0.0056 0.0853 0.0444 0.0246 0.0677 -0.0425 0.1406 0.0062 -0.0073 -0.0459 0.4303 0.1017 -0.0405 -0.0449 -0.0590 0.0737 -0.0221 -0.0846 -0.0400 -0.0737 -0.0547 -0.0142 -0.0868 -0.0205 -0.0015 -0.0378 0.0129 0.0641 0.0286 -0.0785 0.0389 -0.0287 0.0448 0.0632 -0.0876 -0.0505 -0.0556 -0.0169 0.0213 -0.0035 0.0024 0.0004 0.0024 -0.0022 -0.0043

- Hasil simulasi VHDL:

m_tmp2 =

1 -13 18 8 -1 1 0 0 -35 26 12 2 1 0 0 0 2 3 6 -3 0 0 0 -1 18 15 2 -2 -1 0 0 0 -3 3 -3 2 0 0 0 0 1 -3 -7 -4 -1 0 0 0 1 -2 2 -1 0 0 0 0 2 0 -2 0 1 1 0 0 -1 1 -1 0 0 0 0 0 2 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11 38 -13 0 5 0 -1 1 -52 -1 1 0 0 0 0 0 -14 -14 5 6 -2 1 1 -1 -1 2 -1 0 0 0 0 0 -3 -5 1 1 -1 0 0 0 1 -1 1 0 0 0 0 0 5 1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

b. Implementasi di keping FPGA

Development board FPGA yang digunakan dalam penelitian ini adalah seri Spartan

3E. Board tersebut menggunakan chip XC3S500E. Spesifikasi Spartan 3E

disebutkan pada tabel 5. Pada penelitian ini, implementasi menggunakan Xilinx ISE

dilakukan untuk mengetahui berapa banyak resource FPGA yang digunakan serta

berapa lama delay yang terjadi pada rangkaian. Informasi tersebut bisa didapatkan

dari report yang dihasilkan dari proses kompilasi.

Tabel 6 memperlihatkan penggunaan cell FPGA untuk rangkaian yang dirancang.

Tabel 5. Perbandingan feature pada beberapa seri FPGA Xilinx

Tabel 6. Penggunaan Cell pada FPGA XC3S500E untuk rangkaian yang dirancang

Tabel 7 memperlihatkan tingkat penggunaan piranti-piranti internal FPGA seperti

slice, LUT, pengali dan pin input-output.

Tabel 7. Tingkat penggunaan piranti pada FPGA XC3S500E

Dari laporan sintesis Xilinx ISE juga didapatkan laporan pewaktuan diantaranya

delay maksimum rangkaian dan frekuensi clock maksimum yang bisa diterapkan di

rangkaian. Delay maksimum rangkaian adalah 5.895ns dan frekuensi clock

maksimum yang diizinkan adalah 84.818MHz (periode minimum clock 11.790ns).

4. Kesimpulan

1. Hasil perhitungan DCT-2D dan kuantisasi pada rangkaian memiliki mean square

error sebesar 0.0518 dibandingkan dengan hasil DCT-2D dan kuantisasi pada

perhitungan Matlab. Nilai tersebut dicapai untuk citra sampel yang diberikan.

2. Implementasi rangkaian pada FPGA Spartan-3E membutuhkan 3174 gerbang

dasar, 1145 Slice, 21 pin I/O, dan 11 pengali.

3. Delay maksimum pada rangkaian 5.895ns

4. Frekuensi clock maksimum yang diizinkan adalah 84.818MHz (periode

minimum clock 11.790ns).