Dokumen tersebut membahas tentang praktikum analisis envelope spectrum sinyal suara menggunakan metode cepstrum dan metode Linear Predictive Coding (LPC). Praktikum ini melibatkan proses pengolahan sinyal suara seperti pengambilan sinyal dari file, resampling, penentuan frame, windowing, transformasi ke domain frekuensi menggunakan FFT, dan analisis envelope spectrum dengan kedua metode tersebut.
Buku speech processing_subp_envelopespectral-sinyal-wicara
1. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
1
Pengolahan Informasi Wicara
Bab: Analisa Envelope pada Spectrum Sinyal Sinyal Wicara
Sub: Kegiatan Pembelajaran di Lab Analisa Envelope pada Spectrum Sinyal Sinyal
Wicara
Pada kegiatan di laboratorium ini kita akan melakukan analisa envelope spectral sinyal
wicara menggunakan standar pengolahan sinyal wicara yang memenuhi persyaratan Linear dan
Time Invariant seperti yang telah dibicarakan di dalam teori pada Bab xxx. Untuk melakukan
proses secara keseluruhan akan memakan waktu, untuk itu perlu dilakukan penyederhanaan
dengan melakukan simulasi tanpa harus mengorbankan pemahaman pada konsep system
yang sesungguhnya.
Ada dua model analisa envelope spectral sinyal wicara yang kita buat pada kegiatan lab ini, yaitu
berbasis Metode Cepstrum dan berbasis Metode Linear Predictive Code (LPC).
P.1.1. Analisa Cepstrum Sinyal Wicara
Pemodelan dimulai dengan mengacu pada diagram blok pada Gambar xxx, pada bagian teori.
Pada gambar sudah jelas langkah-langkah apa yang seharusnya dilakukan.
Pemodelan dapat disusun dengan pembuatan program sbb:
1. Lakukan proses pengambilan sinyal wicara dari file yang sudah anda buat tsb, dan
gambarkan hasilnya. Untuk menyesuaikan dengan standar pengolahan wicara, anda
lakukan proses resampling. Tetapi jika anda merasa tidak terlalu urgent, anda dapat
melakukannya tanpa proses resample. Karena file yang anda ambil terdiri dari 2 kolom
(berbentuk matrix), maka anda cukup ambil salah satu kolom saja, agar proses bisa berjalan
dengan benar.
%File Name:Listing_9_1.m
close all; clear all;clc;
[y,Fs]=wavread('file_a.wav');
y01=y(:,1);
2. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
2
2. Lakukan proses resampling agar anda yakin bahwa frekuensi sampling yang anda gunakan
adalah 16000 Hz.
%Proses resampling:
%------------------
fs1=16000;
x=resample(y01,fs1,Fs);
3. Agar anda dapat mengetahui kondisi asli dari sinyal wicara yang akan anda gunakan, akan
sebagai objek percobaan, maka tampilkan sinyal asli tsb.
figure(1);plot(y01);
Gambar 1. Sinyal file_a.wav
4. Dari gambar tersebut anda dapat memilih sampel ke 5001 sampai 5361 untuk diamati.
Karena anda sudah menetapkan satu frame berukuran N=320, dan melakukan windowing
dengan fungsi window Hamming. Untuk itu anda dapat menyusun program sbb:
frameLength = 20;
nsample = round(frameLength * fs1 / 1000);
window = eval(sprintf('%s(nsample)','hamming'));
pos = 5001;
frame = x(pos:pos+nsample-1);
time=(0:length(frame)-1)/fs1;
frameW = frame .* window;
0 0.5 1 1.5 2 2.5 3 3.5
x 10
4
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
3. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
3
figure();
subplot(2,1,1);
plot(time,frame);
legend('Waveform'); xlabel('Time (s)'); ylabel('Amplitude');
subplot(2,1,2);
plot(time,frameW);
legend('Windowed Waveform'); xlabel('Time (s)'); ylabel('Amplitude');
Gambar 2. Perbandingan 1 frame sinyal sebelum dan sesudah windowing
5. Lakukan proses transformasi ke domain frekuensi dengan memanfaatkan library fft pada
Matlab.
Y = fft(frameW, nsample);
hz8000=8000*length(Y)/fs1;
6. Dapatkan nilai absolute dari hasil fft, dan lanjutkan dengan perubahan skala dari linear
menjadi logarithmic sesuai dengan konsep dasar penghitungan power spectral density
(PSD) estimate.
f=(0:hz8000)*fs1/length(Y);
dbY10K = 20*log10(abs(Y(1:length(f)))+eps);
7. Lakukan proses ifft dan jangan lupa anda ubah ke benttuk absolut sebelum anda tampilkan.
Tampilan gambar yang anda peroleh adalah nilai quefrency dari sinyal wicara.
logY = log(abs(Y));
Cepstrum=ifft(logY);
Cepstrum10K = (Cepstrum(1:length(f)));
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-0.4
-0.2
0
0.2
0.4
Time (s)
Amplitude
Waveform
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-0.2
0
0.2
0.4
0.6
Time (s)
Amplitude
Windowed Waveform
4. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
4
figure();
subplot(2,1,1);
plot(f,dbY10K);
legend('Spectrum'); xlabel('Frequency (Hz)'); ylabel('Magnitude(dB)');
subplot(2,1,2);
plot(Cepstrum10K(2:end));
legend('Cepstrum'); xlabel('Quefrequency (s)'); ylabel('Level');
Gambar 3. Tampilan Spectrum dan Cepstrum
P.1.2. Analisa Envelope Spectral dengan Metode Ceptrum
Pada Sub Bab ini anda akan melanjutkan proses Pengolahan Metode Cepstrum untuk
mendapatkan gambaran envelope spectral dari sinyal wicara.
1. Langkah 1 sampai dengan langkah 6 sama seperti sebelumnya,sampai dengan anda
mendapatkan nilai spectrum sinyal wicara
%File Name:Listing_9_1.m
close all; clear all;clc;
[y,Fs]=wavread('file_a.wav');
y01=y(:,1);
figure(1);plot(y01);
xlabel('Sampel ke-n');ylabel('level tegangan (volt)');
%Proses resampling:
0 1000 2000 3000 4000 5000 6000 7000 8000
-100
-50
0
50
Frequency (Hz)
Magnitude(dB)
Spectrum
0 20 40 60 80 100 120 140 160
-0.5
0
0.5
1
1.5
Quefrequency (s)
Level
Cepstrum
5. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
5
%------------------
fs1=16000;
x=resample(y01,fs1,Fs);
frameLength = 20;
nsample = round(frameLength * fs1 / 1000);
window = eval(sprintf('%s(nsample)','hamming'));
pos = 5001;
frame = x(pos:pos+nsample-1);
time=(0:length(frame)-1)/fs1;
frameW = frame .* window;
Y = fft(frameW, nsample);
hz8000=8000*length(Y)/fs1;
f=(0:hz8000)*fs1/length(Y);
dbY10K = 20*log10(abs(Y(1:length(f)))+eps);
2. Lanjutkan dengan sedikitmodifikasi pada nama variable, sebetulnya dalam hal ini anda tidak
harus melakukan perubahan tersebut kalau anda sudah terbiasa dengan pengolahan sinyal
wicara. Tetapi sebagai langkah awal, sebaiknya anda ikuti prosedur sederhana berikut.
logY = log(abs(Y));
C=ifft(logY);
3. Ambil 10 nilai pertama dari quefrency anda, langkah ini merupakan proses Lifter
Window , dalam program ini kita beri nama truncated Number 10. Di belakangnya kita
tetapkan dengan nilai nol. Dan bandingkan antara bentuk Cepstrum dengan Truncated 10
yang telah anda buat.
%Truncuted Number 10:
%--------------------
C10K = (C(1:length(f)));
t_C10K = 1:length(f);
thisC = C; trunNo = 10;
trunFn10 = zeros(length(f),1); trunFn10 (1:10) = 1;
thisC(trunNo:end-trunNo) = 0;
figure(2);
plot(t_C10K,abs(C10K'),'b',t_C10K,trunFn10','r-','linewidth',2);
xlabel('Quefrency');ylabel('Level');title('Truncuted Number 10');
legend('Spectrum','Truncated Cepstrum');
4. Kembali anda lakukan transformasi ke domain frekuensi dengan memanfaatkan fft.
Amati bentuk yang dihasilkan, mungkin anda penasaran sebab tidak sesuai dengan
konsep di dalam teori bahwa cepstrum yang dihasilkan berbeda jauh dengan psd.
iC = exp(real(fft(thisC)));
dbiC10K10 = 20*log10(abs(iC(1:length(f)))+eps);
6. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
6
figure(3);
plot(f,dbY10K','b',f,dbiC10K10','r-','linewidth',2);
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');title('Truncuted
Number 10');
legend('Spectrum','Truncated Cepstrum');
Gambar 4. Perbandingan Cepstrum dan Lifter Window 10 sampel
(truncated Number 10)
Gambar 5. Perbandingan Spectrum FFT dan Envelope Spectrum
pada truncated Number 10
0 20 40 60 80 100 120 140 160 180
0
0.5
1
1.5
2
2.5
3
Quefrency
Level Truncuted Number 10
Spectrum
Truncated Cepstrum
0 1000 2000 3000 4000 5000 6000 7000 8000
-70
-60
-50
-40
-30
-20
-10
0
10
20
Frequency (Hz)
Magnitude(dB)
Truncuted Number 10
Spectrum
Truncated Cepstrum
7. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
7
5. Lakukan langkah 3 dan 4 untuk nilai Truncated Number 30 dan Truncated Number 80.
%Truncuted Number 30:
%--------------------
thisC = C; trunNo = 30;
trunFn30 = zeros(length(f),1); trunFn30 (1:30) = 1;
thisC(trunNo:end-trunNo) = 0;
iC = exp(real(fft(thisC)));
dbiC10K30 = 20*log10(abs(iC(1:length(f)))+eps);
figure(4);
plot(t_C10K,abs(C10K'),'b',t_C10K,trunFn30','r-','linewidth',2);
xlabel('Quefrency');ylabel('Level');title('Truncuted Number 30');
legend('Spectrum','Truncated Cepstrum');
figure(5);
plot(f,dbY10K','b',f,dbiC10K30','r-','linewidth',2);
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');title('Truncuted
Number 30');
legend('Spectrum','Truncated Cepstrum');
%Truncuted Number 80:
%--------------------
thisC = C; trunNo = 80;
trunFn80 = zeros(length(f),1); trunFn80 (1:80) = 1;
thisC(trunNo:end-trunNo) = 0;
iC = exp(real(fft(thisC)));
dbiC10K80 = 20*log10(abs(iC(1:length(f)))+eps);
figure(6);
plot(t_C10K,abs(C10K'),'b',t_C10K,trunFn80','r-','linewidth',2);
xlabel('Quefrency');ylabel('Level');title('Truncuted Number 80');
legend('Spectrum','Truncated Cepstrum');
figure(7);
plot(f,dbY10K','b',f,dbiC10K80','r-','linewidth',2);
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');title('Truncuted
Number 80');
legend('Spectrum','Truncated Cepstrum');
P.1.3. Analisa Envelope Spectral dengan Metode LPC
Dalam hal ini sebaiknya anda melihat kembali bagian teori pada LPC Analysis, dan untuk
selanjutnya dapat anda ikuti langkah-langkah percobaan sbb.
1. Diawali dengan cara yang mirip dengan langkah 1 sampai dengan 4 pada PercobaanP.1.1,
dan sedikit modifikasi pada program anda.
8. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
8
%File Name: LPC_Analysis02a.m
%Untuk Envelope Spectral Development
%Menggnakan metode: Linear Prediction and Autoregressive Modeling
close all;clc;clear all;
%Mencoba dengan 'file_a.wav'
[y,Fs]=wavread('file_a.wav');
y_1=y(:,1);
%Proses resampling:
%------------------
fs1=16000;
x=resample(y_1,fs1,Fs);
figure(1);plot(x);
frameLength = 20;
nsample = round(frameLength * fs1 / 1000);
window = eval(sprintf('%s(nsample)','hamming'));
pos = 5001;
frame = x(pos:pos+nsample-1);
time=(0:length(frame)-1)/fs1;
frameW = frame .* window;
2. Tetapkan sebuah low pass filter filter FIR, kali ini dengan orde N = 64, tetapkan nilai w = 0,5
(sekitar 4 kHz pada frekuensi real). Selanjutnya anda filter sinyal yang sudah dalam bentuk
frame terwindow.
b = fir1(64, .5);
[d,p0] = lpc(b,7);
x_1 = filter(1,d,frameW);
3. Manfaatkan model Auto Regressive (AR) untuk mendapatkan koefisien lpc anda, dalam hal
ini dengan menyelsaikan persamaan Yule-Walker. Dalam hal ini kita dapat memperoleh nilai
parameter untuk suatu all-pole filter yang akan dihasilkan oleh sinyal wicara dengan proses
AR. Dalam penyelesaian persaan Yule-Walker equations, perlu dilakukan langkah
autokorelasi pada sinyal tersampel tersebut dan dikombinasikan dengan algoritma Levinson.
Proses yang panjang ARYULE (aryule.m).
%Autoregressive dg Yule walter Method
[d1_1,p1_1] = aryule(x_1,7);
4. Perbandingan domain envelope spectral sinyal wicara kali ini kita lakukan dengan
memanfaatkan fungsi periodogram untuk sinyal asli, dan dengan memanfaatkan fungsi freqz
pada nilai-nilai koefisien lpc yang sudah diperoleh. Langkah ini diambil untuk
9. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
9
menyederhanakan proses secara keseluruhan, tetapi dengan tetap mempertahankan kualitas
hasil estimasi envelope spectral yang akan diperoleh.
%Membandingkan AR Model dengan AR Signal
[H1_1,w1_1] = freqz(sqrt(p1_1),d1_1);
figure();
periodogram(x_1);
hold on
hp = plot((w1_1/pi),20*log10(2*abs(H1_1)/(2*pi)),'r--','linewidth',2);
% Scale to make one-sided PSD
%%hp.LineWidth = 2;
xlabel('Normalized frequency (times pi rad/sample)')
ylabel('Power Spectral(dB/rad/sample)')
legend('PSD estimate of x','PSD of model output')
Gambar 6. Perbandingan Spectrum asal dan Envelope dengan metode LPC
Mungkin muncul pertanyaan pada diri anda, kenapa pada percobaan ini dilakukan berbeda
dengan cara yang telah dilakukan pada metode Cepstrum. Hal ini sengaja dilakukan di sini untuk
memberikan gambaran bahwa ada banyak cara di dalam melakukan analisa envelope sinyal
wicara, dan sampai sekarang semua metode ini diakui sebagai metode yang cukup valid,
walaupun mungkin memberikan hasil yang sedikit berbeda. Satu hal yang harus anaa pegang
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-100
-80
-60
-40
-20
0
20
Normalized frequency ( rad/sample)
PowerSpectral(dB/rad/sample)
Periodogram Power Spectral Density Estimate
PSD estimate of x
PSD of model output
10. PraktikumAnalisa Envelope pada SpectrumSinyal Sinyal Wicara
10
adalah bahwa secara logika proses yang dilakukan telah benar, dan fitur-fitur utama yang
diperoleh telah memenuhi standar pengolahan yang benar pula.