ALGORITMA HUFFMAN
SKRIPSI
ABSTRAK
Ukuran file audio khususnya berformat .wav relatif besar dibandingkan file
dengan format teks, yang membutuhkan memori yang besar dalam melakukan
penyimpanan maupun dalam hal transmisi (pengiriman) melalui media komunikasi.
Hal ini sangat mempengaruhi ketersediaan tempat (space) maupun pengolahan data
khususnya data audio. Untuk itu perlu dikembangkan aplikasi untuk kompresi data
yang bertujuan untuk minimalisasi memori menggunakan algoritma Huffman.
Algoritma atau encoding Huffman sebenarnya merupakan algoritma kompresi yang
dapat diterapkan pada semua jenis baik untuk file biner maupun file teks. Algoritma
ini efektif jika terdapat banyak redundancy data atau perulangan data yang sama pada
file. Pada algoritma ini, kompresi file audio dilakukan pada data sampel audio yang
redundancy. Hasil kompresi file wav dengan algoritma Huffman Coding dapat
memberikan ukuran file yang lebih kecil yaitu rata-rata rasio kompresi sebesar 24.43
%.
Keyword: Audio Wav, Compression, Huffman Coding.
DAFTAR ISI
Halaman
ABSTRAK
ABSTRAC
DAFTAR ISI
DAFTAR TABEL
DAFTAR GAMBAR
ii
iii
iv
v
vi
BAB 1 PENDAHULUAN
1.1 Latar Belakang
1.2 Rumusan Masalah
1.3 Batasan Masalah
1.4 Tujuan Penelitian
1.5 Manfaat Penelitian
1.6 Metodologi Penelitian
1.7 Sistematika Penulisan
1
1
3
3
3
3
3
6
7
7
9
9
9
9
10
10
11
13
14
16
16
17
20
21
25
26
29
29
30
35
35
37
37
38
43
45
45
3.2.2
3.2.3
3.2.4
3.2.5
48
49
50
50
52
52
52
53
53
54
55
55
55
56
56
56
DAFTAR PUSTAKA
LAMPIRAN PROGRAM
58
59
DAFTAR TABEL
Halaman
Tabel 2.1 Frekuensi Sampling dan Kualitas Suara yang Dihasilkan
Tabel 2.2 Penyimpanan Berbagai Konfigurasi Audio Digital
Tabel 2.3 Nilai Jenis Chunk RIFF
Tabel 2.4 Format Chunk RIFF
Tabel 2.5 Chunk Format File Wav
Tabel 2.6 Kode Kompresi Wav
Tabel 2.7 Format Data Chunk
Tabel 2.8 Penjelasan Struktur File Wav
Tabel 2.9 Penambahan Chunk Lain Pada File Wav
Tabel 2.10 Penelitian terdahulu
Tabel 3.1 Frekuensi setiap simbol data
Tabel 3.2 Frekuensi setiap simbol data
Tabel 4.1 Tampilan hasil pengujian kompresi
Tabel 4.2 Tampilan pengujian hasil dekompresi
8
10
14
14
15
16
18
20
22
33
38
41
55
55
DAFTAR GAMBAR
6
6
13
19
21
23
24
25
25
26
27
29
29
30
30
31
31
35
38
39
39
39
40
40
41
45
46
47
48
49
50
51
52
53
53
55
56
ABSTRAK
Ukuran file audio khususnya berformat .wav relatif besar dibandingkan file
dengan format teks, yang membutuhkan memori yang besar dalam melakukan
penyimpanan maupun dalam hal transmisi (pengiriman) melalui media komunikasi.
Hal ini sangat mempengaruhi ketersediaan tempat (space) maupun pengolahan data
khususnya data audio. Untuk itu perlu dikembangkan aplikasi untuk kompresi data
yang bertujuan untuk minimalisasi memori menggunakan algoritma Huffman.
Algoritma atau encoding Huffman sebenarnya merupakan algoritma kompresi yang
dapat diterapkan pada semua jenis baik untuk file biner maupun file teks. Algoritma
ini efektif jika terdapat banyak redundancy data atau perulangan data yang sama pada
file. Pada algoritma ini, kompresi file audio dilakukan pada data sampel audio yang
redundancy. Hasil kompresi file wav dengan algoritma Huffman Coding dapat
memberikan ukuran file yang lebih kecil yaitu rata-rata rasio kompresi sebesar 24.43
%.
Keyword: Audio Wav, Compression, Huffman Coding.
BAB 1
PENDAHULUAN
kualitas
data
tersebut.
Melihat
masalah-masalah
tadi,
maka
pohon
2.
3.
4.
2.
Sebagai bahan referensi mengenai algoritma Huffman pada proses kompresi file
audio.
BAB 2 LANDASAN TEORI membahas tentang landasan teori tentang audio wav,
kompresi data, algoritma Huffman serta flow chart.
BAB 2
LANDASAN TEORI
Proses sebaliknya, yaitu pengubahan dari data digital menjadi tegangan analog
juga terdiri atas beberapa tahap, yang ditunjukkan pada Gambar 2.2, yaitu:
1. Menghitung data digital menjadi amplitudo-amplitudo analog.
2. Menyambung amplitudo analog ini menjadi sinyal analog.
3. Memfilter keluaran dengan Low Pass Filter sehingga bentuk gelombang
keluaran menjadi lebih mulus.
dua kali lebih rapat, atau 2X Hertz. Jika tidak, sinyal tidak akan dapat dikembalikan
ke dalam bentuk semula.
yang
sempurna
yang
dimaksud
adalah
kemampuannya
untuk
depan dan 2 kanal surround, 1 kanal tengah dan 1 kanal subwoofer. Bahkan ada yang
menggunakan 8 kanal (format audio 7.1) yaitu terdiri dari 2 kanal depan dan 2 kanal
surround, 1 kanal tengah dan 1 kanal subwoofer dan ditambah 2 buah speaker EX
(Environmental Extended) untuk menghasilkan suara dari belakang.
Aplikasi
Telepon
11,025
Radio AM
16
22,025
Mendekati Radio FM
32,075
44,1
48
Sampling rate yang umumnya digunakan antara lain 8 KHz, 11 KHz, 16 KHz,
22 KHz, 24 KHz, 44 KHz, 88 KHz. Makin tinggi sampling rate, semakin baik kualitas
audio. Teori Nyquist menyatakan bahwa sampling rate yang diperlukan minimal 2
kali bandwidth sinyal. Hal ini berkaitan dengan kemampuan untuk merekonstruksi
ulang sinyal audio.
2.3.3 Bandwidth
Bandwitdth adalah selisih antara frekuensi tertinggi dan frekuensi terendah yang akan
diolah. Misalnya sinyal audio pada telepon yang digunakan untuk menyampaikan
sinyal dengan frekuensi 300 3400 Hz (ucapan manusia), berarti bandwidth-nya
adalah 3100 Hz (3400 dikurangi 300). Maka sampling rate minimum yang diperlukan
adalah 2 kali yaitu 6,2 KHz. Demikian pula dengan frekuensi suara secara umum,
frekuensi yang dapat didengar manusia adalah 20 20.000 Hz, dengan bandwidth
19.980. Berarti sampling rate minimum yang digunakan adalah 39.960 Hz. Jadi
frekuensi sampling yang mencukupi adalah 44.100 Hz (Gunawan, 2005).
Sampling
Bit per
Jumlah
rate
sample
kanal
12 kHz
12 kHz
12 kHz
Bit rate
Byte rate (1
Byte rate
byte = 8 bit)
per menit
96.000
12.000
720 KB
192.000
24.000
1,44 MB
16
192.000
24.000
1,44 MB
12 kHz
16
348.000
48.000
2,88 MB
24 kHz
192.000
24.000
1,44 MB
24 kHz
348.000
48.000
2,88 MB
24 kHz
16
348.000
48.000
2,88 MB
24 kHz
16
768.000
96.000
5,76 MB
44.1 kHz
352.800
44.100
2,646 MB
44.1 kHz
705.600
88.200
5,292 MB
44.1 kHz
16
705.600
88.200
5,292 MB
44.1 kHz
16
1.411.200
176.400
10,584 MB
Audio sekualitas CD Audio menggunakan sampling rate 44,1 kHz, 16 bit per
sample, 2 kanal. Total media yang diperlukan untuk menyimpan data audio ini
perdetik adalah 176.400 byte, untuk durasi 1 menit diperlukan 10,584 MB. Jika ratarata durasi satu lagu selama 5 menit, maka dibutuhkan tempat lebih dari 50 MB untuk
menyimpan data audio lagu tersebut jika diasumsikan 1 KB = 1.000 byte dan 1 MB =
1.000 KB = 1.000.000 byte.
Tipe dari pelayanan audio memerlukan format yang berbeda untuk informasi
audio dan teknologi yang berbeda untuk menghasilkan suara. Windows menawarkan
beberapa tipe dari pelayanan audio :
1.
2.
Midi Audio, menyediakan pelayanan file MIDI dan MIDI playback melalui
synthesizer internal maupun eksternal dan perekaman MIDI. MIDI digunakan
untuk aplikasi yang berhubungan dengan musik seperti komposisi musik dan
program MIDI sequencer. Karena memerlukan tempat penyimpanan lebih kecil
dan tingkat transfer yang lebih kecil daripada Waveform audio, maka sering
digunakan untuk keperluan background.
3.
4.
Pada saat ini, file *.AVI merupakan satu-satunya jenis file RIFF yang telah
secara penuh diimplementasikan menggunakan spesifikasi RIFF. Meskipun file
*.WAV juga menggunakan spesifikasi RIFF, karena struktur file *.WAV ini begitu
sederhana maka banyak perusahaan lain yang mengembangkan spesifikasi dan standar
mereka masing-masing.
Format file WAV seperti yang diketahui, merupakan bagian dari spesifikasi
RIFF Microsoft yang digunakan sebagai penyimpan data digital audio. Format file ini
merupakan salah satu format file audio pada PC. Seiring dengan popularitas Windows
maka banyak aplikasi yang mendukung format file ini. Karena bekerja pada
lingkungan Windows yang menggunakan prosesor Intel, maka format data dari file
WAV disimpan dalam format urutan little-endian (least significant byte) dan sebagian
dalam urutan big-endian.
File WAV menggunakan struktur standar RIFF yang mengelompokkan isi file
(sampel format, sampel digital audio, dan lain sebagainya) menjadi chunk yang
terpisah, setiap bagian mempunyai header dan byte data masing-masing. Header
chunck menetapkan jenis dan ukuran dari byte data chunk. Dengan metoda pengaturan
seperti ini maka program yang tidak mengenali jenis chunk yang khusus dapat dengan
mudah melewati bagian chunk ini dan melanjutkan langkah memproses chunk yang
dikenalnya. Jenis chunk tertentu mungkin terdiri atas sub-chunk. Sebagai contoh, pada
gambar 2.3 dapat dilihat chunk fmt dan data sebenarnya merupakan sub-chunk
dari chunk RIFF.
Chunk pada file RIFF merupakan suatu string yang harus diatur untuk tiap
kata. Ini berarti ukuran total dari chunk harus merupakan kelipatan dari 2 byte (seperti
2, 4, 6, 8 dan seterusnya). Jika suatu chunk terdiri atas jumlah byte yang ganjil maka
harus dilakukan penambahan byte (extra padding byte) dengan menambahkan sebuah
nilai nol pada byte data terakhir. Extra padding byte ini tidak ikut dihitung pada
ukuran chunk. Oleh karena itu sebuah program harus selalu melakukan pengaturan
kata untuk menentukan ukuran nilai dari header sebuah chunk untuk mengkalkulasi
offset dari chunk berikutnya. Sebagaimana dapat dilihat pada gambar 2.3
Nilai
0x00
Chunk ID
"RIFF" (0x52494646)
0x04
0x08
Jenis RIFF
0x10
"WAV" (0x57415645)
Chunk WAV
Chunk ID
0x04
0x08
Chunk format terdiri atas informasi tentang bagaimana suatu data wavform disimpan
dan cara untuk dimainkan kembali, termasuk jenis kompresi yang digunakan, jumlah
kanal, laju pencuplikan (sampling rate), jumlah bit tiap sampel dan atribut lainnya.
Chunk format ini ditandai dengan chunnk ID fmt . Sebagaimana dapat dilihat pada
table 2.5
Nilai
0x00
Chunk ID
0x04
0x08
Kode Kompresi
1 - 65,535
0x0a
Jumlah Kanal
1 - 65,535
0x0c
Laju Pencuplikan
1 - 0xFFFFFFFF
0x10
0x14
Block align
1 - 65,535
0x16
2 - 65,535
0x18
0 - 65,535
0x1a
sebesar data format Wav (16 byte) ditambah dengan extra format byte yang
diperlukan untuk format Wav khusus, jika tidak terdiri atas data PCM tidak
terkompresi. Sebagai catatan string chunk ID ini selalu diakhir dengan karakter
spasi (0x20). Chunk ID fmt digunakan sebagai informasi file Wav, informasi ini
berupa: Compression Code, Number of Channels, Sample Rate, Average Bytes per
Second, Block Align, Significant Bits per Sample, Extra Format Bytes.
Deskripsi
0 (0x0000)
Tidak Diketahui
1 (0x0001)
2 (0x0002)
Microsoft ADPCM
6 (0x0006)
7 (0x0007)
17 (0x0011)
IMA ADPCM
20 (0x0016)
49 (0x0031)
GSM 6.10
64 (0x0040)
80 (0x0050)
MPEG
Menyatakan jumlah potongan sampel tiap detik. Nilai ini tidak dipengaruhi oleh
jumlah kanal.
E. Jumlah Rata-Rata Byte Tiap Detik (Average Bytes Per Second)
Nilai ini mengindikasikan berapa besar byte data Wav harus di-stream ke
konverter D/A (Digital Audio) tiap detik sewaktu suatu file Wav dimainkan.
Informasi ini berguna ketika terjadi pengecekan apakah data dapat di-stream
cukup cepat dari suatu sumber agar sewaktu playback pembacaan data tidak
terhenti. Nilai ini dapat dihitung dengan menggunakan rumus di bawah ini:
.............................................................. (2.1)
F. Block Align
Menyatakan jumlah byte tiap potongan sampel. Nilai ini tidak dipengaruhi oleh
jumlah kanal dan dapat dikalkulasi dengan rumus di bawah ini:
.................. (2.2)
BlockAlign = SignificantBitsPerSample / 8 * NumChannels
G. Bit Signifikan Tiap Sampel (Significant Bits Per Sample)
Nilai ini menyatakan jumlah bit yang digunakan untuk mendefinisikan tiap
sampel. Nilai ini biasanya berupa 8, 16, 24 atau 32 (merupakan kelipatan 8). Jika
jumlah bit tidak merupakan kelipatan 8 maka jumlah byte yang digunakan tiap
sampel akan dibulatkan ke ukuran byte paling dekat dan byte yang tidak digunakan
akan diset 0 (nol) dan diabaikan.
H. Extra Format Byte
Nilai ini menyatakan berapa banyak format byte tambahan. Nilai ini tidak ada jika
kode kompresi adalah 0 (file PCM yang tidak terkompresi). Jika terdapat suatu
nilai pada bagian ini maka ini digunakan untuk menentukan jenis file Wav yang
memiliki kompresi dan ini memberikan informasi mengenai jenis kompresi apa
yang diperlukan untuk men-decode data Wav. Jika nilai ini tidak dilakukan word
aligned (merupakan kelipatan 2), penambahan byte (padding) pada bagian akhir
data ini harus dilakukan.
Chunk ini ditandai dengan adanya string data. Chunk Data pada file Wav terdiri atas
sampel digital audio yang mana dapat didecode kembali menggunakan metoda
kompresi atau format biasa yang dinyatakan dalam chunk format Wav. Jika kode
kompresinya adalah 1 (jenis PCM tidak terkompresi), maka Data Wav terdiri atas
nilai sampel mentah (raw sample value). Sebagaimana dapat dilihat padatabel 2.7
Deskripsi
Nilai
0x00
char[4] chunk ID
0x04
0x08
"data" (0x64617461)
Tergantung pada panjang sampel dan jenis
kompresi
Sampel data
tidak terkompresi, akibatnya ukuran file sangat besar jika file mempunyai durasi yang
panjang. Format file Wav PCM (Gunawan, 2005) dapat dilihat pada gambar 2.4
Penjelasan mengenai struktur file Wav yang dimulai dengan header RIFF
dapat dilihat pada table 2.8
Size
4
Nama Field
Deskripsi
ChunkID
Chunksize
Format
12
SubChunk1ID
16
SubChunk1Size
20
AudioFormat
22
NumChannels
24
SampleRate
28
ByteRate
32
BlockAlign
= NumChannels * BitsPerSample / 8
Jumlah byte untuk satu sampel termasuk semua
channel.
34
BitsPerSample
36
SubChunk2ID
40
SubChunk2Size
44
Data
Keterangan:
Sebagai contoh, berikut ini merupakan 72 byte pertama dari sebuah file Wav
yang ditampilkan dalam heksadesimal:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
Berikut ini (Gambar 2.5) interpretasi dari tiap byte pada file Wav di atas:
Selain bentuk standar dari file Wav di atas, seperti yang dikemukakan sebelumnya file
Wav dapat ditambahkan chunk-chunk lain. Penambahan ini tidak berpengaruh sebab
suatu program yang membaca file Wav jika tidak memerlukan informasi pada chunk
ini akan mengabaikannya dan mencari chunk lain yang diperlukannya. Sebuah file
Wav dengan penambah chunk rgad dapat dilihat pada table 2.9.
Tabel 2.9 Penambahan Chunk Lain Pada File Wav (Binanto, 2010)
Start
Chunk Chunk
Field Name
contents
Byte
0
contents
bytes format
(HEX)
RIFF
name
"RIFF" 52 49 46 46
ASCII
size
176444 3C B1 02 00
uInt32
"WAV" 57 41 56 45
ASCII
WAV
name
12
Fmt
name
"fmt "
66 6D 74 20
ASCII
16
size
16
10 00 00 00
uInt32
20
wFormatTag
01 00
uInt16
22
nChannels
02 00
uInt16
24
nSamplesPerSec
44100 44 AC 00 00
uInt32
28
nAvgBytesPerSec
176400 10 B1 02 00
uInt32
32
nBlockAlign
04 00
uInt16
34
nBitsPerSample
16
10 00
uInt16
name
"rgad"
72 67 61 64
ASCII
40
size
08 00 00 00
uInt32
44
fPeakAmplitude
00 00 80 3F
float32
48
nRadioRgAdjust
10822
46 2A
uInt16
nAudiophileRgAdjust 18999
37 4A
uInt16
64 61 74 61
ASCII
176400 10 B1 02 00
uInt32
36
Rgad
50
52
Data
name
56
size
60
wavform data
"data"
.....
.....
176400 Int16
Level
Level Translasi
Level Device
Gambar 2.6 Lapisan-Lapisan Multimedia dengan Windows
2.7
Binary Tree
Parent
Parent
child
child
leaf
leaf
leaf
leaf
leaf
leaf
Dilihat dari kepemilikan node pada masing-masing parent dan tinggi tree,
maka pohon biner (binary tree) dibedakan menjadi dua yaitu pohon biner lengkap dan
pohon biner sempurna. Pohon biner lengkap (completely binary tree), yakni masingmasing node memiliki 2 buah anak atau tidak memiliki anak sama sekali (Gambar
2.8).
Sebuah pohon biner sempurna (perfect binary tree) adalah pohon biner yang
lengkap yang masing-masing node memiliki 2 buah anak dan mempunyai kedalaman
yang sama (jarak dari akar atau biasanya disebut juga dengan height). Gambar 2.9
memperlihatkan contoh dari pohon biner sempurna.
A
terdiri atas sebuah referensi pada parent-nya yang unik. Jika suatu node mempunyai
lebih dari dua anak, beberapa pointer dari anak mungkin diset ke suatu nilai null
khusus, atau ke node sentinel khusus (Zakaria, 2005).
Pohon biner juga dapat disimpan dengan array, dan jika pohon merupakan
suatu pohon biner lengkap, metode ini tidak memborosokan ruang penyimpanan.
Dengan pengaturan kompak tersebut, jika suatu node yang mempunyai indeks i, anakanaknya dapat ditemukan pada indeks (2i + 1) ke sisi kiri dan (2i + 2) ke sisi kanan,
sementara parent-nya ditemukan pada indeks floor ((i1)/2) dengan asumsi akar
mempunyai indeks nol. Metode ini menguntungkan sebab lebih kompak dari segi
penyimpanan dan referensi lokasi yang lebih baik, terutama selama pemindahan pada
urutan awal. Bagaimanapun juga, ini memerlukan memori yang saling berdampingan,
sulit bertambah, dan menghabiskan ruang proporsional sebesar 2h n untuk sebuah
pohon dengan height (h) dan node (n).
Array disusun atau ditempatkan secara level order traversal seperti terlihat
pada Gambar 2.10 berikut ini.
A
2.8
Kompresi Data
Kompresi data dilakukan untuk mereduksi ukuran data atau file. Dengan melakukan
kompresi atau pemadatan data maka ukuran file atau data akan lebih kecil sehingga
dapat mengurangi waktu transmisi sewaktu data dikirim dan tidak banyak banyak
menghabiskan ruang media penyimpan.
Shannon juga mengembangkan teori mengenai kompresi data lossy. Ini lebih
dikenal sebagai rate-distortion theory. Pada kompresi data lossy, proses dekompresi
data tidak menghasilkan data yang sama persis dengan data aslinya. Selain itu, jumlah
distorsi atau nilai D dapat ditoleransi. Shannon menunjukkan bahwa, untuk data
sumber (dengan semua properti statistikal yang diketahui) dengan memberikan
pengukuran distorsi, terdapat sebuah fungsi R(D) yang disebut dengan rate-distortion
function. Pada teori ini dikemukakan jika D bersifat toleransi terhadap jumlah distorsi,
maka R(D) adalah kemungkinan terbaik dari laju kompresi.
Ketika kompresi lossless (berarti tidak terdapat distorsi atau D = 0),
kemungkinan laju kompresi terbaik adalah R(0) = H (untuk sumber alphabet yang
terbatas). Dengan kata lain, laju kompresi terbaik yang mungkin adalah entropy rate.
Dalam pengertian ini, teori rate-distortion adalah suatu penyamarataan dari teori
kompresi data lossless, dimana dimulai dari tidak ada distorsi (D = 0) hingga terdapat
beberapa distorsi (D > 0).
Teori kompresi data lossless dan teori rate-distortion dikenal secara kolektif
sebagai teori pengkodean sumber (source coding theory). Teori pengkodean sumber
menyatakan batas fundamental pada unjuk kerja dari seluruh algoritma kompresi data.
Teori tersebut sendiri tidak dinyatakan secara tepat bagaimana merancang dan
mengimplementasikan algoritma tersebut. Bagaimana pun juga algoritma tersebut
menyediakan beberapa petunjuk dan panduan untuk memperoleh unjuk kerja yang
optimal. Dalam bagian ini, akan dijelaskan bagaimana Shannon membuat model dari
sumber informasi dalam istilah yang disebut dengan proses acak (random process).
Di bagian selanjutnya akan dijelaskan mengenai teorema pengkodean sumber lossless
Shannon, dan teori Shannon mengenai rate-distortion. Latar belakang mengenai teori
probabilitas diperlukan untuk menjelaskan teori tersebut.
ACDABA
Distribusi frekuensi untuk karakter di atas seperti berikut ini:
Karakter
A B C D
Frekuensi
A
3
C
1
D
1
Selanjutnya dua buah node terkecil digabung membentuk satu node baru
dimana frekuensinya merupakan penjumlahan dari keduanya seperti pada Gambar
2.12.
2
B
D
1
2
B
1
3
C
1
Kemudian dua buah node terkecil digabung menjadi satu kembali untuk
membentuk node baru seperti pada Gambar 2.14.
A
3
D
1
2
B
1
C
1
Setelah itu diurutkan kembali berdasarkan frekuensi tiap node secara urutan
menaik seperti pada Gambar 2.15.
A
3
D
1
2
B
1
C
1
6
A
3
D
1
2
B
1
C
1
Langkah terakhir adalah memberikan label bit 0 untuk setiap sisi kiri dari
pohon dan label bit 1 untuk setiap sisi kanan dari pohon seperti pada Gambar 2.17.
.
6
0
A
3
D
1
2
0
B
1
C
1
Karena potongan data tersebut terdiri atas 6 karakter, maka teks tersebut terdiri
atas 6 byte atau 48 bit. Dengan Huffman encoding, akan dicari simbol yang paling
sering muncul (dalam kasus ini adalah karakter A muncul sebanyak 3 kali). dan
kemudian sebuah pohon (tree) akan dibentuk untuk menggantikan simbol dengan
urutan bit yang lebih pendek. Pada kasus khusus ini, algoritma akan menggunakan
tabel pengganti sebagai berikut: A = 1, B = 010, C = 011, D = 00. Jika code word
dipakai untuk mengkompresi file, maka data yang telah dikompresi akan terlihat
seperti berikut ini. ACDABA.
10110010101
Ini berarti hanya 11 bit yang dipakai selain 48 bit, berarti rasio kompresi
adalah 4 : 1 untuk file tersebut.
Huffman encoding dapat dioptimalkan dengan dua cara yang berbeda yaitu
sebagai berikut:
1.
2.
2.
b.
Gabungkan dua pohon tersebut menjadi satu dan mempunyai nilai setara
dengan jumlah keduanya, atur salah satunya yang bernilai paling kecil
sebagai child sisi kiri dan yang lainnya sebagai child sisi kanan
3.
4.
Untuk setiap child sisi kiri beri simbol 0 dan beri simbol 1 untuk
merepresentasi child sisi kanan.
Penelitian terdahulu tentang algoritma Huffman juga telah dilakukan. Penelitian ini
berfungsi sebagai bahan referensi dalam pengompresan file audi WAV agar lebih
optimal. Berbagai penelitian terdahulu dapat dilihat pada table 2.10.
Judul
Pengarang
Tahun
Kelebihan
1.
Kompresi teks
2010
menggunakan metode
Logistia
2.
Huffman untuk
menggunakan aplikasi
menghemat karakter
menghemat biaya
service(SMS)
Aplikasi kompresi
Dyah Kusuma
citra dengan
Ningrum
2010
Untuk
mengimplementasikan
algoritma Huffman
algoritma Huffman
menggunakan
borland delphi 7
3.
Perbandingan
Danny Dinas
algoritma Huffman
Sulistio
2010
Static dengan
alggoritma Huffman
algoritma Huffman
Static untuk
Adaptif pada
melakukan kompresi
BAB 3
ANALISIS DAN PERANCANGAN
3.1 Analisis
Kompresi data atau dikenal juga sebagai pemadatan data mempunyai tujuan
memperkecil ukuran data sehingga selain dapat menghemat media penyimpanan dan
memudahkan transfer data dalam jaringan seperti internet. Dalam masalah transfer
data, ukuran file yang kecil akan mempercepat waktu transmisi. File merupakan data
digital yang berupa representasi atas bit 0 dan 1. Seringkali dalam sebuah file
terjadi perulangan data atau redundancy. Umumnya metode kompresi melakukan
pemadatan terhadap data berulang tersebut. Seperti diketahui jenis algoritma kompresi
terbagi atas lossless compression dan lossy compression. Algoritma lossy compression
membuang bagian-bagian data yang sebenarnya tidak berguna seperti data yang tidak
dapat dilihat maupun didengar oleh manusia sehingga data asli tidak dapat
dikembalikan seperti semula, sedangkan algoritma lossless adalah tidak ada
kehilangan data atau informasi dimana data asli dapat direkonstruksi kembali sama
persis dari data yang telah dikompresi.
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 22 56 00
00 88 58 01 00 04 00 10 00 64 61 74 61 3E 3E 3E 3E 3E 3E 3E 3E 3E 3E 2F 2F 2F
2F 2F 2F 2F 2F 42 42 42 42 42 42 1A 1A 1A 1A 1A 4C 4C 34 e7 0 0 0 0 24 f2 0 0 0
0 00 7f 11 00 22 07 3d 3d 0 3d 0 2 9a 2a 4f 3e 3d 00 10 10 10 03 3d 10 10 2 f 10 10
12 00 12 10 25 23 13 00 04 11 23 00 00 12 11 32 2a 2a 9f 25 10 -10 02 12 10 53 13
00 a6 11 12 23 00 0f 10 10 10 12 10 5d 23 13 70 11 26 23 00 01 13 9a 2a 2f 10 10
10 12 10 53 90 56 11 23 00 01 13 0e 22 529a 2a 10 3d 10 02 2f 10 10 10 12 -10 11 33
13 00 07 3d 10 02 3f 10 10 12 12 53 13 30 30 37 07 13 3d 10 02 f 0 10 10 12 -10 53
14 13 00 07 3d 10 02 f 0 10 00 12 26 25
Gambar 3.1 Data Audio Wav dalam Hexa
Keterangan:
a. Empat byte pertama selalu berisi 52 49 46 46 (hexa) yang jika di konvensi
mempunyai arti R =52, I =49, F= 46, F = 46 sama dengan RIFF.
b. Empat byte berikutnya berisi 24 08 00 00 menyatakan ukuran file audio yaitu
24=36, 08=8, 00=0, 00=0 yang sama dengan 36800, maka ukuran filenya
adalah 36800 kb 1 kb = 36799 kb.
c. Empat byte berikutnya 57 41 56 45 menyatakan jenis file: 57=W, 41=A, 56=V,
45=E
d. Empat byte berikutnya adalah 66 6d 74 20 menyatakan ID fmt, 66=f, 6d=m,
74=t dan 20=spasi kosong.
e. Empat byte berikutnya adalah 10 00 00 00 yang menyatakan panjang
informasi, 10 = 16, 00=0, 00=0, 00=0 semuanya bernilai 16.
f. Empat byte berikutnya adalah 01 00 02 00 yang bernilai 1 dan 2 channel
(stereo).
g. Empat byte berikutnya adalah 22 56 00 00 yang menyatakan sample rate
dengan nilai 22=, 56=V, 00=0, 00=0.
h. Empat byte berikutnya adalah 88 58 01 00 yang menyatakan byte rate dengan
nilai 88=X, 58=:, 01=1, 00=0.
i.
j.
Dua byte berikutnya adalah nilai bit per sampel (BitsPerSample) yang bernilai
10 00 adalah 16 dan 00 = 16 bit per sampel untuk sampel right channel
maupun untuk sampel left channel.
l.
Enam belas (16) byte berikutnya adalah sampel audio right channel sampel 1
sampai sampel ke 4 dengan nilai 3E 3E 3E 3E 3E 3E 3E 3E 3E 3E 2F 2F 2F
2F 2F 2F 2F 2F 42 42 42 42 42 42 1A 1A 1A 1A 1A 4C 4C.
Kode
ASCII
dan kode
yang
disebutkan
di
bagian
atas
untuk
dikarenakan tiap karakter mempunyai panjang bit yang sama atau dengan kata lain
jumlah bit yang diperlukan untuk merepresentasi tiap karakter sama. Pada kode ASCII
setiap karakter memerlukan 7 bit. Dengan menggunakan variable length codes untuk
tiap karakter maka dapat direduksi ukuran dari suatu file. Dengan menggantikan code
yang lebih kecil untuk karakter-karakter yang lebih sering dipakai dan code yang
lebih besar untuk karakter yang tidak sering dipakai, maka sebuah file dapat
dikompresi.
3E 3E 3E 3E 3E 3E 3E 3E 3E 3E 2F 2F 2F 2F 2F 2F 2F 2F 42 42 42 42 42 42 1A 1A
1A 1A 1A 4C 4C. Maka cara mengkompresi citra tersebut menggunakan algoritma
Huffman sebagai berikut:
a.
Hitung frekuensi atau banyaknya sebuah data muncul pada sampel audio adalah
sebagai berikut.
Frekuensi dari 3E adalah 10
Frekuensi dari 2F adalah 8
Frekuensi dari 42 adalah 6
Frekuensi dari 1A adalah 5
Frekuensi dari 4C adalah 2
Frekuensi setiap simbol atau data diatas dimasukkan pada Tabel 3.1 sebagai berikut:
Tabel 3.1 Frekuensi setiap simbol data
Simbol
b.
Frekuensi
3E
10
2F
42
1A
4C
Urutkan data secara menaik (ascending order) dari yang frekuensinya terkecil ke
frekuensinya terbesar masing-masing simbol data direpresentasikan sebagai
sebuah simpul. Urutkan data secara menaik (ascending order) dapat dilihat
seperti pada Gambar 4.1.
c.
4C:2
1A:5
42:6
2F:8
3E:10
4C,1A:7
42:6
2F:8
3E:10
4C:2
1A:5
Gambar 3.2 Gabungan dua buah simpul yang mempunyai frekuensi terkecil
Dara gabungan dua buah simpul diatas, urutkan kembali berdasarkan frekuensi
kemunculannya seperti yang terlihat pada Gambar 3.3.
42:6
4C,1A:7
4C:2
2F:8
3E:10
1A:5
e.
Ulangi langkah 2 dan 3 sampai tersisa hanya satu pohon biner, sebagai berikut:
3E:10
4C,1A:7
4C:2
1A:5
42,2F:14
42:6
2F:8
4C,1A,3E:17
4C:2
42,2F:14
42:6
2F:8
1A,3E:15
3E:10
1A:5
4C,1A, 42,2F,3E:31
4C,1A:7
42,2F,3E:24
42,2F:14
3E:10
42:6
2F:8
Beri label dari akar ke daun, sebelah kiri = 0, kanan = 1 seperti yang terlihat pada
Gambar 3.7.
4C,1A, 42,2F,3E:31
0
4C,1A:7
42,2F,3E:24
4C:2
3E:10
1A:5
42,2F:14
0
42:6
2F:8
g. Penelusuran dari akar ke daun (dari atas ke bawah) menghasilkan kode Huffman
Frekuensi
Kode
Huffman
3E
10
10 (2 bit)
2F
111 (3 bit)
42
110 (3 bit)
1A
01 (2 bit)
4C
00 (2 bit)
Total
31 byte
12 bit
Ganti 3E 3E 3E 3E 3E 3E 3E 3E 3E 3E 2F 2F 2F 2F 2F 2F 2F 2F 42 42 42 42 42
42 1A 1A 1A 1A 1A 4C 4C menjadi:
10 10 10 10 10 10 10 10 10 10 111 111 111 111 111 111 111 111 110 110 110 110
110 110 01 01 01 01 01 00 00
Sebelum dilakukan kompresi maka ukuran data file audio adalah 31 byte, diperoleh
dari total frekuensi kemunculan simbol dikalikan dengan 1 byte. Sedangkan ukuran
audio setelah dikompresi (dalam kode Huffman): (10 x 2 bit) + (8 x 3 bit) + (6 x 3 bit)
+ (5 x 2 bit) + (2 x 2 bit) adalah: 76 bit setara dengan 9.5 byte.
Rasio kompresinya: 100 % -(
1.
Menginisialisasi sebuah array dengan 511 elemen dan diset dengan nilai 0.
2.
Mengambil satu elemen dari array untuk dijadikan sebagai node akar (root node).
Root node merupakan bagian awal dari node.
3.
Berikutnya membaca bit ke-i dari code untuk karakter ke-j pada tabel.
4.
Jika bit ke-i dari code bernilai 1, diambil elemen yang lain dari array dan
membuatnya sebagai node anak sisi kanan dari node sekarang. Jika bernilai 0
maka node dibuat di sisi kiri dari child node dari node saat ini. Jika node saat ini
telah mempunyai sebuah node akan baik di sisi kiri atau kanan maka langkah ini
diabaikan.
5.
Jika bit yang baru dibaca saat ini merupakan bit terakhir dari code maka node
tersebut menyimpan karakter yang direpresentasikan oleh code.
6.
7.
Nilai i ditambah
8.
Langkah ke-3 dan ke-5 diulang hingga semua bit yang code untuk karakter ke-j
dibaca.
9.
Setelah proses selesai akan diperoleh pohon Huffman yang lengkap dan dapat
dipakai untuk mengkompresi file. Pohon ini dipakai untuk mencari karakter yang
direpresentasikan oleh code pada file yang dikompresi. Setelah pohon Huffman
dibentuk kembali maka proses dekompresi dapat dilakukan dengan algoritma berikut
ini:
1.
2.
Suatu urutan nilai 0 dan 1 dibaca dari file yang terkompresi. Untuk setiap nilai
0 yang dibaca maka pindah ke node anak sisi kiri dari node saat ini dan setiap
nilai 1 yang dibaca maka pindah ke node anak sisi kanan dari node saat ini dan
diset sebagai node saat ini.
3.
Jika node saat ini merupakan sebuah daun akan cetak karakter yang
direpresentasikan oleh node ini. Node saat ini diset ulang ke node akar.
4.
Langkah ke-2 dan ke-3 diulang hingga semua byte dalam file selesai dibaca.
Setelah proses selesai maka file output terdiri dari data yang dikompresi.
3.3 Perancangan
Pada bagian perancangan ini akan dijelaskan proses perancangan program beserta
dengan perancangan form sebagai user interface dari program.
Mulai
Pembentukan Pohon
Huffman
Kode Huffman
Selesai
Flow chart kedua adalah proses pembentukan pohon Huffman seperti yang terlihat
pada Gambar 3.9.
Mulai
Semua simpul
sudah digunakan
untuk membuat
pohon ?
No
Yes
Pohon Huffman
Selesai
Rancangan Menu Utama terdiri dari menu Kompresi, Help, About dan Quit. Pada
bagian atas menu Utama terdapat empat menu, yaitu menu:
a. Kompresi
b. Help
c. About
d. Quit
Rancangan Menu Utama dapat dilihat pada Gambar 3.10 berikut ini.
Kompresi
Help
About
Quit
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
Keterangan :
1. Menu File yang memanggil program Kompresi dan Dekompresi
2. Menu About untuk membuka halaman About
3. Menu Help untuk membuka halaman Help
4. Menu Quit untuk menjalankan program Quit
5. Label tempat menampilkan judul skripsi
Proses
xxxxxxxxx
File Asal
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Size
999
File Tujuan
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Size
999
Password
999
999
Ratio
10
Load
File Save
999
Lama
11
Proses
12
13
Bersih
Keluar
Rancangan Help berfungsi untuk menampilkan informasi Judul Skripsi dan Proses
yang terjadi pada kompresi dan Dekompresi file Audio. Rancangan Help dapat dilihat
pada Gambar 3.12.
XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
Logo USU
XXXXXXXXXXXXXXXXX
2
3
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
Keterangan :
1. Label untuk menampilkan Judul Skripsi
2. Logo Fakultas.
3. Foto Penulis.
4. Label untuk menampilkan nama penulis
5. Label untuk menampilkan NIM penulis
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.3 Implementasi
Implementasi perangkat lunak adalah tampilan hasil rancangan dari penulisan kode
program dimulai dari program Menu Utama, Kompresi, Help, About serta Exit.
Pada Gambar 4.2 diatas terlihat file audio asli wav ding.wav dengan ukuran 70.060
bytes dikompresi menjadi file DING.huf yang berukuran 53.176 bytes dengan rasio
kompresi 24.09 % lama kompresi adalah 2 detik.
Pengujian sistem adalah pengumpulan data hasil perbandingan proses kompresi dan
dekompresi file audio dengan algoritma Algoritma Huffman serta menampilkan waktu
dan rasio kompresi. Tampilan Hasil Kompresi / Dekompresi adalah sebagai berikut:
File Audio
(.wav)
Ukuran
(bytes)
1
2
3
4
5
6
7
8
9
10
Chimes
Ding
Music
Notify
PIENSO
Ringout
Startup
Telepone-ring
Toques Para
You belong
216.364
70.060
3.376.060
228.396
1.412.690
88.236
424.644
958.536
2.562.742
1.711.604
File Hasil
Kompresi
(.huf)
Chime
Ding
Music
Notify
PIENSO
Ringout
Startup
Telepone-ring
Toques Para
You belong
Ukuran
(Bytes)
Rasio
(%)
Waktu
(Det)
Status
168.869
53.176
3.213.925
177.612
1.325.353
78.442
376.822
687.192
2.423.529
1.665.288
21.95
24.09
4.80
22.23
6.18
11.09
11.26
28.30
5.43
2.7
2
1
3
2
3
1
1
46
4
1
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
1
2
3
4
5
6
7
8
9
10
File Hasil
Kompresi
(.huf)
Chimes
Ding
Music
Notify
PIENSO
Ringout
Startup
Telepone-ring
Toques Para
You belong
Ukuran
(bytes)
168.869
53.176
3.213.925
177.612
1.325.353
78.442
376.822
687.192
2.423.529
1.665.288
File
Hasil
Dekompresi
(.wav)
Chimes
Ding
Music
Notify
PIENSO
Ringout
Startup
Telepone-ring
Toques Para
You belong
Ukuran
(Bytes)
Rasio
(%)
Waktu
(Det)
Status
216.364
70.060
3.376.060
228.396
1.412.690
88.236
424.644
958.536
2.562.742
1.711.604
21.95
24.09
4.80
22.23
6.18
11.09
11.26
28.30
5.43
2.7
2
1
3
2
3
1
1
46
4
1
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Grafik Hasil Kompresi Size Terhadap Waktu adalah informasi besar ukuran file audio
dengan waktu proses kompresi seperti pada Gambar 4.8.
Berdasarkan Gambar 4.8 di atas, maka waktu kompresi yang tercepat (1 detik) pada
saat mengkompresi file dengan size 53 kb, 78 kb, 376 kb dan 1.6 mb.
Grafik Hasil Kompresi Size Terhadap Rasio adalah informasi besar ukuran file audio
dengan rasio kompresi seperti pada Gambar 4.9.
Berdasarkan Gambar 4.9 di atas, maka rasio kompresi yang terbesar pada
mengkompresi file dengan size 958.536 kb, 70.060 kb dan 216.364 mb.
BAB 5
KESIMPULAN DAN SARAN
5.1
Kesimpulan
Berdasarkan pembahasan dari bab-bab sebelumnya yang telah dilakukan maka dapat
diambil beberapa kesimpulan sebagai berikut:
1.
Reduksi ukuran file yang diperoleh dengan algoritma Huffman ini berkisar dari
range 15 % hingga 36 %. Jadi dapat dikatakan dengan rasio kompresi ini
algoritma Huffman sudah dikatakan baik dalam hal mengkompresi
file
Tingkat kompresi dipengaruhi oleh banyaknya data sampel yang sama dalam file
Wave.
3.
Kecepatan proses tidak bergantung pada data yang diproses tetapi berbanding
lurus dengan ukuran file Wav, artinya semakin besar ukuran file Wav yang
diproses maka semakin lama waktu prosesnya.
4.
Untuk dapat memutar file audio hasil kompresi, maka harus dilakukan proses
dekompresi terlebih dahulu.
5.2
Saran
Untuk pengembangan lebih lanjut program kompresi pada file Wave ini, maka dapat
diberikan beberapa saran sebagai berikut:
1.
2.
DAFTAR PUSTAKA
Zakaria, T.M & Prijono, A. 2005. Konsep dan Implementasi Struktur Data,
Bandung. Penerbit: Informatika.