ABSTRAK
Speech coding bertujuan untuk kompresi sehingga menghasilkan bit rate yang makin rendah, memori yang lebih kecil tanpa harus menghilangkan informasi yang dikandung. Linear Predictive Coding (LPC) menjadi dasar sebagian besar teknik pengkodean suara yang terus berkembang.
Linear Predictive Coding (LPC) adalah suatu metode yang kebanyakan digunakan dalam proses sinyal audio dan proses percakapan suara manusia. LPC adalah salah satu tehnik yang baik dan berguna untuk mengkodekan sinyal suara yang baik pada suatu bit rendah dan menyediakan perkiraan parameter-parameter yang akurat.
DAFTAR ISI
ABSTRAK... i
ABSTRACT... ii
KATA PENGANTAR... iii
DAFTAR ISI... v
DAFTAR GAMBAR... vii
DAFTAR TABEL... ix
BAB I PENDAHULUAN... 1
I.1 Latar Belakang... 1
I.2 Identifikasi Masalah... 2
I.3 Pembatasan Masalah... 2
I.4 Tujuan... 2
I.5 Sistematika Penulisan... 2
BAB II LANDASAN TEORI... 3
II.1 Teknologi Pengkodean Suara... 3
II.2 Sistem Komunikasi Suara... 3
II.3 Klasifikasi Metode Pengkodean Suara... 4
II.3.1 Waveform Coding... 5
II.3.2 Voice Coding... 5
II.3.3 Hybrid Coding... 6
II.4 Proses Pengkodean Suara... 6
II.5 Produksi dan Karakteristik Sinyal Suara... 7
II.6 Proses Kuantisasi... 9
II.7 Kuantisasi Logaritmik... 9
II.8 Laju Bit...10
II.9 Kompleksitas... 10
BAB III LINEAR PREDICTIVE CODING... 13
III.1 Speech Coding... 13
III.2 Cara Kerja... 14
III.3 Gambar Diagram Alir dari Program Utama... 15
III.4 LPC Konvensional Vokoder... 15
III.4.1 Preprocessing... 16
III.4.2 Windowing... 17
III.4.3 Penghitungan Koefisien LPC... 17
III.4.4 Deteksi Pitch... 17
III.4.6 Dekoder LPC... 18
III.4.7 Impulse Train Model... 18
III.5 Voiced-Excited LPC Vocoder... 18
III.6 DCT Pada Sinyal Residual... 19
BAB IV SIMULASI DAN ANALISA DATA... 20
IV.1. Karakteristik Sinyal Input... 20
IV.2. Simulasi LPC... 20
IV.3. Pengamatan... 27
BAB V KESIMPULAN DAN SARAN... 29
V.1. Kesimpulan... 29
V.2. Saran...29
DAFTAR PUSTAKA
DAFTAR GAMBAR
Gambar II.1 Sistem Komunikasi Suara... 4
Gambar II.2 Metode Pengkodean Suara... 5
Gambar II.3 Elemen-elemen sistem proses pengkodean suara... 6
Gambar III.1 Diagram Alir... 15
Gambar III.2 Blok Dasar LPC Konvensional Vocoder... 15
Gambar III.3 Bentuk Sinyal coba1.wav... 16
Gambar III.4 Respon frekuensi pre-empasis... 16
Gambar III.5 Blok diagram dekoder LPC... 18
Gambar III.6 Blok Dasar Voice-excited LPC vocoder... 18
Gambar IV.1 Sinyal asli coba1.wav, hasil LPC-5 konvensional, hasil Voice-Excite LPC-5... 21
Gambar IV.2 Sinyal asli coba2.wav, hasil LPC-5 konvensional, hasil Voice-Excite LPC-5... 21
Gambar IV.3 Sinyal asli coba3.wav, hasil LPC-5 konvensional, hasil Voice-Excite LPC-5... 22
Gambar IV.4 Sinyal asli coba1.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 22
Gambar IV.5 Sinyal asli coba1.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 23
Gambar IV.6 Sinyal asli coba3.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 23
Gambar IV.7 Sinyal asli coba1.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 24
Gambar IV.8 Sinyal asli coba2.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 24
Gambar IV.9 Sinyal asli coba3.wav, hasil LPC-10 konvensional, hasil Voice-Excite LPC-10... 25
Gambar IV.11 Sinyal asli coba2.wav, hasil LPC-10 konvensional, hasil
Voice-Excite LPC-10... 26 Gambar IV.12 Sinyal asli coba3.wav, hasil LPC-10 konvensional, hasil
Voice-Excite LPC-10... 26 Gambar IV.13 Sinyal asli coba1.wav, hasil LPC-15 konvensional, hasil
Voice-Excite LPC-15... 27 Gambar IV.14 Sinyal asli coba2.wav, hasil LPC-15 konvensional, hasil
Voice-Excite LPC-15... 27 Gambar IV.15 Sinyal asli coba3.wav, hasil LPC-15 konvensional, hasil
DAFTAR TABEL
%main program clc;
clear all;
InputFilename = 'coba2.wav';
[inspeech, Fs, bits] = wavread(InputFilename); tic
outspeech1 = speechcoder1(inspeech); outspeech2 = speechcoder2(inspeech); toc
disp('u/ dengerin suara asli!'); pause;
soundsc(inspeech, Fs);
disp('u/ dengerin suara compressed LPC!'); pause;
soundsc(outspeech1, Fs);
disp('u/ dengerin voice-excited compressed LPC!'); pause;
soundsc(outspeech2, Fs);
%hitunglpc
if (nargin<3), L = 10; end if (nargin<4), fr = 20; end if (nargin<5), fs = 30; end
if (nargin<6), preemp = .9378; end [row col] = size(data);
if col==1 data=data'; end
nframe = 0;
msfr = round(sr/1000*fr); msfs = round(sr/1000*fs); duration = length(data);
speech = filter([1 -preemp], 1, data)'; msoverlap = msfs - msfr;
ramp = [0:1/(msoverlap-1):1]';
for frameIndex=1:msfr:duration-msfs+1
frameData = speech(frameIndex:(frameIndex+msfs-1)); nframe = nframe+1;
autoCor = xcorr(frameData); autoCorVec = autoCor(msfs+[0:L]); err(1) = autoCorVec(1);
k(1) = 0; A = [];
for index=1:L
numerator = [1 A.']*autoCorVec(index+1:-1:2); denominator = -1*err(index);
k(index) = numerator/denominator; A = [A+k(index)*flipud(A); k(index)]; err(index+1) = (1-k(index)^2)*err(index); end
parcor(:,nframe) = k';
if 0 gain=0;
cft=0:(1/255):1; for index=1:L
gain = gain + aCoeff(index,nframe)*exp(-i*2*pi*cft).^index; end
gain = abs(1./gain);
spec(:,nframe) = 20*log10(gain(1:128))'; plot(20*log10(gain));
title(nframe); drawnow; end
if 0
impulseResponse = filter(1, aCoeff(:,nframe), [1 zeros(1,255)]); freqResp = 20*log10(abs(fft(impulseResponse)));
plot(freqResp); end
errSig = filter([1 A'],1,frameData); G(nframe) = sqrt(err(L+1)); autoCorErr = xcorr(errSig); [B,I] = sort(autoCorErr); num = length(I);
if B(num-1) > .01*B(num)
pitch(nframe) = abs(I(num) - I(num-1)); else
pitch(nframe) = 0; end
if(frameIndex==1)
stream = resid(1:msfr,nframe); else
stream = [stream;
overlap+resid(1:msoverlap,nframe).*ramp; resid(msoverlap+1:msfr,nframe)];
end
if(frameIndex+msfr+msfs-1 > duration) stream = [stream; resid(msfr+1:msfs,nframe)]; else
overlap = resid(msfr+1:msfs,nframe).*flipud(ramp); end
end
stream = filter(1, [1 -preemp], stream)';
%LPC vocoder
function [ outspeech ] = speechcoder1( inspeech )
if ( nargin ~= 1)
error('argument check failed'); end;
Fs = 16000; Order = 10;
[aCoeff, resid, pitch, G, parcor, stream] = proclpc(inspeech, Fs, Order); outspeech = synlpc(aCoeff, pitch, Fs, G);
function [ outspeech ] = speechcoder2( inspeech )
if ( nargin ~= 1)
error('argument check failed'); end;
Fs = 16000; Order = 10;
[aCoeff, resid, pitch, G, parcor, stream] = proclpc(inspeech, Fs, Order); resid = dct(resid);
[a,b] = size(resid);
resid = [ resid(1:50,:); zeros(430,b) ]; resid = uencode(resid,4);
resid = udecode(resid,4); resid = idct(resid);
noise = [ zeros(50,b); 0.01*randn(430,b) ]; resid = resid + noise;
outspeech = synlpc2(aCoeff, resid, Fs, G);
%LPC Decoder
function synWave = synlpc(aCoeff,pitch,sr,G,fr,fs,preemp)
if (nargin < 5), fr = 20; end; if (nargin < 6), fs = 30; end;
if (nargin < 7), preemp = .9378; end;
[L1 nframe] = size(aCoeff);
for frameIndex=1:nframe A = aCoeff(:,frameIndex); if ( pitch(frameIndex) ~= 0 ) t = 0 : 1/sr : fs*10^(-3);
d = 0 : 1/pitch(frameIndex) : 1;
residFrame = (pulstran(t, d, 'tripuls', 0.001))'; residFrame = residFrame + 0.01*randn(msfs+1,1); else
residFrame = []; for m = 1:msfs
residFrame = [residFrame; randn]; end
end;
synFrame = filter(G(frameIndex), A', residFrame); if(frameIndex==1)
synWave = synFrame(1:msfr); else
synWave = [synWave; overlap+synFrame(1:msoverlap).*ramp; ... synFrame(msoverlap+1:msfr)];
end
if(frameIndex==nframe)
synWave = [synWave; synFrame(msfr+1:msfs)]; else
overlap = synFrame(msfr+1:msfs).*flipud(ramp); end
end;
function synWave = synlpc2(aCoeff,source,sr,G,fr,fs,preemp)
if (nargin < 5), fr = 20; end; if (nargin < 6), fs = 30; end;
if (nargin < 7), preemp = .9378; end;
msfs = round(sr*fs/1000); msfr = round(sr*fr/1000); msoverlap = msfs - msfr; ramp = [0:1/(msoverlap-1):1]'; [L1 nframe] = size(aCoeff);
[row col] = size(source); if(row==1 | col==1)
postFilter = 0; duration = length(source); frameIndex = 1; for sampleIndex=1:msfr:duration-msfs+1
resid(:,frameIndex) = source(sampleIndex:(sampleIndex+msfs-1))'; frameIndex = frameIndex+1;
end else
postFilter = 1; resid = source; end
[row col] = size(resid); if col<nframe
nframe=col; end
residFrame = resid(:,frameIndex)*G(frameIndex); synFrame = filter(1, A', residFrame);
if(frameIndex==1)
synWave = synFrame(1:msfr); else
synWave = [synWave; overlap+synFrame(1:msoverlap).*ramp; ... synFrame(msoverlap+1:msfr)];
end
if(frameIndex==nframe)
synWave = [synWave; synFrame(msfr+1:msfs)]; else
overlap = synFrame(msfr+1:msfs).*flipud(ramp);
end end;
if(postFilter)
RESPON MEAN OPINION SCORE (MOS)
Nama :
Jenis Kelamin : L/P (Lingkari salah satu)
Kualitas
No. File output Tidak
Memuaskan Kurang Cukup Baik Memuaskan
(1) (2) (3) (4) (5)
1. coba1.wav 2. coba2.wav
3. coba3.wav
Keterangan :
RESPON MEAN OPINION SCORE (MOS)
Nama :
Jenis Kelamin : L/P (Lingkari salah satu)
Kualitas
No. File output Tidak
Memuaskan Kurang Cukup Baik Memuaskan
(1) (2) (3) (4) (5)
1. coba1.wav 2. coba2.wav
3. coba3.wav
Keterangan :
RESPON MEAN OPINION SCORE (MOS)
Nama :
Jenis Kelamin : L/P (Lingkari salah satu)
Kualitas
No. File output Tidak
Memuaskan Kurang Cukup Baik Memuaskan
(1) (2) (3) (4) (5)
1. coba1.wav 2. coba2.wav
3. coba3.wav
Keterangan :
RESPON MEAN OPINION SCORE (MOS)
Nama :
Jenis Kelamin : L/P (Lingkari salah satu)
Kualitas
No. File output Tidak
Memuaskan Kurang Cukup Baik Memuaskan
(1) (2) (3) (4) (5)
1. coba1.wav 2. coba2.wav
3. coba3.wav
Keterangan :
RESPON MEAN OPINION SCORE (MOS)
Nama :
Jenis Kelamin : L/P (Lingkari salah satu)
Kualitas
No. File output Tidak
Memuaskan Kurang Cukup Baik Memuaskan
(1) (2) (3) (4) (5)
1. coba1.wav 2. coba2.wav
3. coba3.wav
Keterangan :
BAB I
PENDAHULUAN
I.1 Latar Belakang
Speech coding atau pengkodean suara merupakan inti dari pembahasan mengenai digital speech processing. Speech coding bertujuan untuk kompresi sehingga menghasilkan bit rate yang makin rendah dan memori yang lebih kecil tanpa harus menghilangkan informasi yang dikandung. Hal ini merupakan salah satu solusi tentang keterbatasan bandwith.
Ada beberapa tehnik speech coding seperti Linear Predictive Coding, Waveform Coding dan Subband Coding. LPC menjadi dasar dari sebagian besar tehnik pengkodean suara yang terus berkembang.
Speech coder yang akan dikembangkan perlu dianalisa secara subyekif dan obyektif. Pada analisa subyektif kualitas speech berdasarkan opini pendengar dengan kriteria dapat dimengerti dan dapat jelas terdengar. Analisa obyektif dilakukan dengan menghitung Segmental Signal to Noise Ratio (SEGSNR) antara sinyal speech yang asli dan yang sinyal speech yang telah dikodekan.
I.2 Identifikasi Masalah
1. Bagaimana menentukan koefisien LPC dengan mengadakan simulasi LPC vocoder ?
2. Bagaimana membuat suatu penilaian subyektif untuk memperoleh nilai koefisien LPC yang optimal ?
I.3 Pembatasan Masalah
1. Teknik speech coding yang digunakan menggunakan Linear Predictive Coding (LPC).
2. Mengadakan simulasi menggunakan LPC konvensional Vocoder dan Voice-Excited LPC Vocoder.
I.4 Tujuan
Untuk memperoleh hasil pengkodean yang optimal dengan memperhitungkan koefisien LPC dan juga waktu komputasi yang dibutuhkan.
I.5 Sistematika Pembahasan
Laporan tugas akhir yang disusun ini, terbagi menjadi 5 bab yang mempunyai garis besar sebagai berikut :
BAB I. PENDAHULUAN
Bab ini berisi latar belakang, identifikasi masalah, pembatasan masalah, tujuan, dan sistematika pembahasan.
BAB II. LANDASAN TEORI
Bab ini membahas tentang teori dasar pengkodean suara, proses pengkodean suara, karakteristik sinyal suara , proses kuantisasi.
BAB III. LINEAR PREDICTIVE CODING (LPC)
Bab ini berisi tentang deskripsi simulasi LPC Konvensional Vocoder dan Voice-Excited LPC Vocoder, cara kerja, dan diagram alir dari program utama. BAB IV. SIMULASI DAN ANALISA DATA
Bab ini membahas hasil simulasi dan analisa data pengkodean suara dengan menggunakan metode Linear Predictive Coding (LPC) pada sinyal suara manusia.
BAB V. KESIMPULAN DAN SARAN
BAB IV
SIMULASI DAN ANALISA DATA
IV.1 Karakteristik Sinyal Input
Sinyal suara yang akan disimulasikan dengan menggunakan 3 buah sampel suara yang diucapkan oleh satu orang wanita dan 2 orang laki-laki yang direkam secara terpisah dan ditampilkan dalam tabel IV.1.
Input sinyal suara yang digunakan pada simulasi adalah sinyal suara manusia yang direkam dalam file dengan format *.wav dan menggunakan Personal Computer (PC). Sinyal suara yang direkam menggunakan soundcard soundblaster live dengan frekuensi sampling 16.000 Hz dan 8 bit mono.
Tabel IV.1 Sampel suara yang digunakan untuk simulasi
No. Nama file Bunyi suara
1. coba1.wav Pengkodean Sumber dan Kanal 2. coba2.wav Teknik Elektro
3. coba3.wav Universitas Kristen Maranatha
IV.2 Simulasi LPC
fr = 5 ; fs =20 ; elapsed_time = 3.1640
Gambar IV.1 Sinyal asli coba1.wav, hasil LPC-5 konvensional, hasil Voice- Excite LPC-5
fr = 5 ; fs =20 ; elapsed_time = 3.0740
fr = 5 ; fs = 20 ; 5.2480
Gambar IV.3 Sinyal asli coba3.wav, hasil LPC-5 konvensional, hasil Voice- Excite LPC-5
fr = 10 ; fs = 20 ; elapsed_time = 3.6350
fr = 10 ; fs = 20 ; elapsed_time = 3.4550
Gambar IV.5 Sinyal asli coba1.wav, hasil LPC-10 konvensional, hasil Voice- Excite LPC-10
fr = 10 ; fs = 20 ; elapsed_time = 5.6380
fr = 20 ; fs =20 ; elapsed_time = 3.8760
Gambar IV.7 Sinyal asli coba1.wav, hasil LPC-10 konvensional, hasil Voice- Excite LPC-10
fr = 20 ; fs = 20 ; elapsed_time = 3.5150
fr = 20 ; fs =20 ; elapsed_time = 5.7280
Gambar IV.9 Sinyal asli coba3.wav, hasil LPC-10 konvensional, hasil Voice- Excite LPC-10
fr = 20 ; fs = 30 ; elapsed_time = 4.0360
fr = 20 ; fs =30 ; elapsed_time =3.8460
Gambar IV.11 Sinyal asli coba2.wav, hasil LPC-10 konvensional, hasil Voice-
Excite LPC-10
fr = 20 ; fs = 30 ; elapsed_time = 6.2390
Gambar IV.12 Sinyal asli coba3.wav, hasil LPC-10 konvensional, hasil Voice-
fr = 20 ; fs = 30 ; elapsed_time = 4.6970
Gambar IV.13 Sinyal asli coba3.wav, hasil LPC-15 konvensional, hasil Voice- Excite LPC-15
fr = 20 ; fs = 30 ; elapsed_time = 4.7270
fr = 20 ; fs = 30 ; elapsed_time = 8.0420
Gambar IV.15 Sinyal asli coba3.wav, hasil LPC-15 konvensional, hasil Voice- Excite LPC-15
IV.3 Pengamatan
Dari beberapa hasil simulasi akan dapat terlihat bahwa semakin besar orde LPC akan menghasilkan sinyal rekonstruksi yang semakin baik. Dan dari hasil penilaian setelah diperdengarkan kepada para responden dapat diperoleh bahwa hasil rekonstruksi yang paling baik pada saat ukuran frame (fr) = 20 ms dan panjang frame (fs) = 30 ms.
Dari pengamatan yang diperoleh juga dapat diketahui bahwa koefisien LPC 10 mempunyai hasil rekonstruksi yang tidak berbeda jauh dari koefisien LPC 15. Tetapi waktu komputasi yang dibutuhkan jauh lebih lama menggunakan koefisien LPC 15. Contoh sinyal coba3.wav hasil LPC 10 membuthkan waktu 6,239 s sedangkan hasil LPC 15 membutuhkan waktu 8,042 s. Oleh sebab itu
DAFTAR PUSTAKA
1. A. M. Kondoz, “Digital Speech”, Coding for Low Bit Rate
Communication System, University of Surrey, UK, 1994.
2. Bryan Douglas, “Voice Encoding Methods for Digital Wireless
Communication System”, Southern Methodist University, 1997.
3. Eddie L. T. Choy, “Waveform Interpolation Speech Coder at 4 kb/s”,
Department of Electrical and Engineering McGill University Montreal,
Canada, August 1998.
4. Hasan Limi Mulya, ”Simulasi Pengkodean Suara dengan Menggunakan
Metode Sinusoidal Transform Coding (STC) Method”, Bandung, 2005.
5. Ozgu Ozun, Philip Steuer, Daniel Thell, “Wideband Speech Coding With
LPC”, Digital Speech Processing, University of California at Los Angeles
DAFTAR PUSTAKA
1. A. M. Kondoz, “Digital Speech”, Coding for Low Bit Rate
Communication System, University of Surrey, UK, 1994.
2. Bryan Douglas, “Voice Encoding Methods for Digital Wireless
Communication System”, Southern Methodist University, 1997.
3. Eddie L. T. Choy, “Waveform Interpolation Speech Coder at 4 kb/s”,
Department of Electrical and Engineering McGill University Montreal,
Canada, August 1998.
4. Hasan Limi Mulya, ”Simulasi Pengkodean Suara dengan Menggunakan
Metode Sinusoidal Transform Coding (STC) Method”, Bandung, 2005.
5. Ozgu Ozun, Philip Steuer, Daniel Thell, “Wideband Speech Coding With
LPC”, Digital Speech Processing, University of California at Los Angeles