Anda di halaman 1dari 10

[signal processing]

July 24, 2012

Pre-emphasis and De-emphasis of Speech Signal by Using FIR and IIR Filter

Filter digital FIR (finite impulse response) dapat juga digunakan untuk pengolahan isyarat wicara dalam kawasan waktu. Filter FIR dihitung dengan persamaan diferensial berikut

= 1 × + 2 × − 1 + ⋯ + + 1 ×

Dalam Matlab dapat digunakan perintah

y = filter(b, 1, x)

dimana b merupakan merupakan vektor yang berisi koefisien filter. Vektor x dan y merupakan input dan output dengan panjang yang sama.

Untuk filter IIR memiliki persamaan diferensial sebagai berikut

= 1 × + 2 × − 1 + ⋯ + + 1 × 2 × − 1

3 × − 2 − ⋯ − + 1 ×

Dengan perintah matlabnya

y = filter(b, a, x)

dimana a dan b merupakan vektor-vektor yang berisi koefisien filter dan x dan y merupakan input dan output dengan panjang yang sama.

Dalam artikel ini, akan dibahas tentang penggunaan fungsi filter pada matlab sebagai FIR dan IIR. Filter FIR digunakan sebagai pre-emphasis isyarat sedangkan IIR digunakan sebagai de-emphasis terhadap keluaran dari filter FIR.

Pre-emphasis isyarat wicara

Isyarat wicara yang direkam baik menggunakan perangkat lunak komersial maupun yang menggunakan Matlab, tidak terlepas dari percampuran antara frekuensi tinggi dan frekuensi rendah. Andaikan LPC digunakan untuk analisa isyarat wicara, faktanya LPC hanya mampu mengolah dengan baik frekuensi rendah sementara tidak begitu dengan frekuensi tinggi. Untuk itu kita melakukan teknik yang disebut pre-emphasis untuk memberikan penekanan pada frekuensi tinggi dan menghilangkan frekuensi rendah yang lemah. Hasil dari filter FIR ini adalah suara yang

[signal processing]

July 24, 2012

terdengar lebih kecil seperti sengau tapi lebih baik dan jelas dibandingkan isyarat wicara asli. Untuk pre-emphasis kita menggunakan filter FIR (finite impulse response) yang telah dirumuskan di atas.

Bila kita misalkan bahwa isyarat asli sebagai s(n) maka fungsi transfer untuk pre-emphasis adalah 1 − dimana merupakan koefisien emphasis yang bernilai 0.5 – 1. Nilai umum untuk yang

biasa digunakan adalah =

= 0.9375. Filter yang kita gunakan merupakan filter digital, maka

fungsi transfer nya dituliskan dalam format alihragam Z. Dengan demikian, formula akhir dari pre- emphasis filter adalah

= − 0.9375 ∗ − 1

Artinya keluaran dari filter pre-emphasis tergantung pada data masukan saat ini dan data sebelumnya yang dikalikan dengan koefisien tertentu.

De-emphasis isyarat wicara

Jika isyarat wicara telah mengalami pre-emphasis baik diproses langsung secara keseluruhan maupun perbagian (segment), isyarat tersebut bisa langsung diproses ke tahap selanjutnya. Tapi isyarat tersebut perlu kita de-emphasised untuk menggantikan frekuensi-frekuensi rendah yang telah dihilangkan melalui proses pre-emphasis tadi. Jika kita menggunakan filter FIR untuk pre- emphasis maka kita menggunakan filter IIR (Infinite Impulse Response) untuk proses de-emphasis yang sesuai dengan rumus di atas. Masukan untuk filter IIR adalah hasil pre-emphasis. Persamaan tersebut adalah

Tampak bahwa rumusnya mirip.

Penggunaan Matlab

= + 0.9375 ∗ − 1

Kita dapat menerapkan pre-emphasis dan de-emphasis pada data wicara dengan 2 cara:

a. Filter data keseluruhan bersamaan Pre-emphasis terhadap data wicara secara keseluruhan dapat menggunakan code berikut ini:

[signal processing]

July 24, 2012

% program filter sederhana untuk audio

clear all;

close all;

clc;

% load ddata.mat

% read data

[data, fs] = wavread('contoh.wav');

soundsc(data, fs);

%

pre-emphasized

h

= [1, -0.9375];

filtereddata = filter(h, 1, data); soundsc(filtereddata, fs);

dengan catatan bahwa saya sudah memiliki file audio (wicara) yang bernama contoh.wav. Pada contoh di atas, perlu dilihat bahwa penulisan untuk koefisien dari filter adalah h =

[1, -0.9375]

lalu diikuti dengan fungsi filter sesuai dengan format penulisannya.

Untuk de-emphasis kita bisa menuliskan dengan code berikut

%

deemphasized

h

= [1, -0.9375];

de_emp_data = filter(1, h, filtereddata); soundsc(de_emp_data, fs);

% end

Untuk

pertama.

penulisan fungsi filter pada IIR juga mengikuti yang sudah dijelaskan pada halaman

Berikut ini adalah perbandingan spectrum frekuensi masing-masing proses. Anda bisa melihat adanya pengaruh dari filtering pada data original.

masing-masing proses. Anda bisa melihat adanya pengaruh dari filtering pada data original. [janshendry@gmail.com] Page 3
masing-masing proses. Anda bisa melihat adanya pengaruh dari filtering pada data original. [janshendry@gmail.com] Page 3

[signal processing]

July 24, 2012

[signal processing] July 24, 2012 Tampak jelas bahwa gambar hasil pre-emphasis menunjukkan filtering menyebabkan frekuensi

Tampak jelas bahwa gambar hasil pre-emphasis menunjukkan filtering menyebabkan frekuensi tinggi muncul dan frekuensi-frekuensi rendah yang lemah telah dihilangkan. Lalu pada gambar ketiga, tampak bahwa frekuensi-frekuensi rendah yang hilang tadi degenerate kembali sehingga frekuensi tinggi tidak mendominasi lagi. Bisa kita katakana bahwa hasil pre-emphasis memunculkan banyak informasi yang penting ketimbang data asli sehingga bagian pre-emphasis bisa kita gunakan sebagai data lanjutan untuk proses berikutnya. Dalam hal ini pengenalan pola untuk aplikasi-aplikasi yang menarik.

b. Filter data perbagian (segment) Kita juga dapat melakukan filtering pada isyarat dengan terlebih dahulu membagi data menjadi blok-blok atau kita sebut dengan segmentasi. Misalkan data wicara ingin disegment tiap 256 frame, maka codenya:

% filter sederhana untuk speech dengan segmentasi

clear all;

close all;

clc;

%% baca data audio

% load ddata.mat

% read data

[data, fs] = wavread('contoh.wav');

plot((1:length(data))/fs,data);

title('Original Data');

figure, ft1 = fft(data); plot([1:2*fs/length(ft1):fs], abs(ft1(1:length(ft1)/2)));

[signal processing]

July 24, 2012

title('FFT dari original data'); %%

%% pre-emphasized data FIR

% ukuran segmentasi win = 256;

h = [1, -0.9375];

Ldata = length(data);

L = floor(Ldata/win);

% segmentasi

for n = 1:L seg = data(1+(n-1)*win:n*win); filtseg = filter(h, 1, seg); filterdata(1+(n-1)*win:n*win) = filtseg;

end

figure, plot((1:length(data))/fs,filterdata); title('Hasil pre-emphasis');

figure,

ft2 = fft(filterdata); plot([1:2*fs/length(ft2):fs], abs(ft2(1:length(ft2)/2)));

title('FFT dari hasil pre-emphasis'); soundsc(filterdata, fs); %%

Hasil eksekusi dari program di atas adalah

); soundsc(filterdata, fs); %% Hasil eksekusi dari program di atas adalah [janshendry@gmail.com] Page 5
); soundsc(filterdata, fs); %% Hasil eksekusi dari program di atas adalah [janshendry@gmail.com] Page 5

[signal processing]

[signal processing] July 24, 2012 Lalu de-emphasis untuk program di atas dengan menggunakan segmentasi adalah %%

July 24, 2012

[signal processing] July 24, 2012 Lalu de-emphasis untuk program di atas dengan menggunakan segmentasi adalah %%

Lalu de-emphasis untuk program di atas dengan menggunakan segmentasi adalah

%% de-emphasized data using IIR

% ukuran segmentasi win = 256;

h = [1, -0.9375];

Ldata = length(data);

L = floor(Ldata/win);

% segmentasi

for n = 1:L seg = data(1+(n-1)*win:n*win); filtseg = filter(1, h, seg); de_emp_data(1+(n-1)*win:n*win) = filtseg;

end

figure, plot((1:length(data))/fs,de_emp_data); title('Hasil De-emphasis');

figure,

ft3 = fft(de_emp_data); plot([1:2*fs/length(ft3):fs], abs(ft3(1:length(ft3)/2))); title('FFT dari hasil De-emphasis'); soundsc(de_emp_data, fs); %%

[signal processing]

July 24, 2012

Hasil eksekusi dari program di atas adalah

July 24, 2012 Hasil eksekusi dari program di atas adalah Hasil de-emphasis menunjukkan bahwa beberapa frekuensi
July 24, 2012 Hasil eksekusi dari program di atas adalah Hasil de-emphasis menunjukkan bahwa beberapa frekuensi

Hasil de-emphasis menunjukkan bahwa beberapa frekuensi rendah telah dimunculkan kembali, tapi memang tidak bisa menghasilkan bentuk isyarat wicara asli. Yang perlu diperhatikan di sini adalah munculnya diskontinyu pada masing-masing transisi antar frame yang menyebabkan adanya bunyi ‘click’ pada output. Hal ini merupakan masalah yang perlu ditemukan solusinya. Memang pada saat kita melihat pada kawasan waktu, diskontinyu tidak tampak tapi dengan menggunakan fungsi spectrogram pada Matlab hal tersebut bisa dideteksi dengan mudah.

Agar diskontinyu tidak terjadi maka kita perlu melakukan perubahan terhadap code di atas baik untuk pre-emphasis maupun untuk de-emphasis. Sebelum itu akan saya jelaskan mengapa program di atas tidak bekerja dengan baik. Dari persamaan filter FIR, kita bisa menyimpulkan bahwa output saat ini tergantung pada dua nilai:

- Input saat ini (s(n))

- Input sebelumnya (s(n-1))

Masing-masing diskalakan oleh koefisien tertentu. Pada saat n = 0, maka data sebelumnya merupakan s(-1) yang tentu saja bernilai 0 (kecuali telah ditentukan). Nah s(-1) ini selalu terjadi ditiap awal frame sehingga transisi tiap frame menjadi tidak mulus dan ada diskontinyu. Ketidakmulusan itulah yang menyebabkan munculnya suara ‘click’. Solusinya adalah menyimpan history dari proses saat ini untuk digunakan pada proses selanjutnya yang disebut dengan internal history saving. Pada kasus sebelumnya, internal history bernilai nol sehingga diskontinyu terjadi. Namun jika kita menyimpan internal history dan dijadikan masukan tambahan untuk proses filter pada frame selanjutnya, maka diskontinyu

[signal processing]

July 24, 2012

tidak akan terjadi sehingga transisi antar frame akan menjadi lebih mulus. Internal history saving ini telah disediakan oleh fungsi filter pada Matlab sehingga akan menjadi tugas yang mudah buat kita. Maka, program akhir yang berisi perbaikan dari permasalahan di atas baik untuk pre- emphasis dan de-emphasis adalah

%

filter single tap untuk speech dengan segmentasi

%%

clear all;

close all;

 

clc;

% load ddata.mat

% read data

[data, fs] = wavread('contoh.wav');

plot((1:length(data))/fs,data);

title('original audio data');

figure,

ft1 = fft(data); plot([1:2*fs/length(ft1):fs], abs(ft1(1:length(ft1)/2))); title('FFT of original data'); %%

%% pre-emphasized data FIR

% ukuran segmentasi win = 256;

h = [1, -0.9375];

Ldata = length(data);

L = floor(Ldata/win);

% segmentasi

hst = []; for n = 1:L seg = data(1+(n-1)*win:n*win); [filtseg, hst] = filter(h, 1, seg, hst); filterdata(1+(n-1)*win:n*win) = filtseg;

end

figure, plot((1:length(data))/fs,filterdata); title('result of pre-emphasis');

figure,

ft2 = fft(filterdata); plot([1:2*fs/length(ft2):fs], abs(ft2(1:length(ft2)/2))); title('FFT of pre-emphasis'); soundsc(filterdata, fs); %%

[signal processing]

July 24, 2012

%% de-emphasized data using IIR

% ukuran segmentasi win = 256;

h = [1, -0.9375];

Ldata = length(data);

L = floor(Ldata/win);

% segmentasi

hst = []; for n = 1:L seg = data(1+(n-1)*win:n*win); [filtseg, hst] = filter(1, h, seg, hst); de_emp_data(1+(n-1)*win:n*win) = filtseg;

end

figure, plot((1:length(data))/fs,de_emp_data); title('resul of de-emphasis');

figure,

ft3 = fft(de_emp_data); plot([1:2*fs/length(ft3):fs], abs(ft3(1:length(ft3)/2))); title('FFT of de-emphasis'); soundsc(de_emp_data, fs); %%

Hasil eksekusi dari program di atas adalah

); soundsc(de_emp_data, fs); %% Hasil eksekusi dari program di atas adalah [janshendry@gmail.com] Page 9
); soundsc(de_emp_data, fs); %% Hasil eksekusi dari program di atas adalah [janshendry@gmail.com] Page 9

[signal processing]

July 24, 2012

[signal processing] July 24, 2012 Filter digital ini bisa kita gunakan langsung pada kawasan waktu, itu
[signal processing] July 24, 2012 Filter digital ini bisa kita gunakan langsung pada kawasan waktu, itu
[signal processing] July 24, 2012 Filter digital ini bisa kita gunakan langsung pada kawasan waktu, itu
[signal processing] July 24, 2012 Filter digital ini bisa kita gunakan langsung pada kawasan waktu, itu

Filter digital ini bisa kita gunakan langsung pada kawasan waktu, itu merupakan sebuah keuntungan karena kita tidak perlu menambahkan operasi alihragam waktu ke frekuensi yang cukup menambah jumlah komputasi.

Demikianlah artikel singkat mengenai pre-emphasis dan de-emphasis menggunakan filter FIR dan IIR single tap. Ini akan kita gunakan pada projek speech recognition dan speaker recognition pada pre-processing.

@ thanks…

Sumber:

Applied Speech and Audio Processing with Matlab Example. Ian McLoughlin. Cambridge Press.