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