Dalam suatu sistem perekaman suara, dilakukan perekaman suara secara digital dalam suatu area yang berisik dengan frekuensi cuplik 8 kHz. Dianggap bahwa rekaman suara yang dihasilkan mengandung informasi mulai dari hingga 1800 Hz, sehingga kita bisa merancang sebuah tapis lolos-rendah (low-pass) yang akan menahan derau antara 1800 Hz hingga batasan Nyquist, 4000 Hz (separo dari frekuensi cuplik 8000 Hz).

Berikut spesifikasi Tapis kita:

  • Tipe Tapis = FIR lolos-rendah (lowpass FIR filter)
  • Jangkauan Frekuensi Passband = 0 - 1800 Hz
  • Riak (ripple) pada Passband = 0,02 dB
  • Jangkauan Frekuensi Stopband = 2000 - 4000 Hz
  • Pelemahan (attenuation) pada Stopband = 50 dB
  • Tipe Jendela = Hamming
  • Jumlah koefisien = 133
  • Frekuensi cutoff = 1900 Hz

Fungsi jendela menggunakan persamaan-persamaan berikut:

Selanjutnya dibuat skrip fungsi firwd(N,Ftype,WnL,WnH,Wtype) yang digunakan untuk membuat tapis menggunakan jendela dengan listing sebagai berikut…

function B=firwd(N,Ftype,WnL,WnH,Wtype)
 %  B = firwd(N,Ftype,WnL,WnH,Wtype)
 %  Rancang Tapis FIR menggunakan metode Fungsi Jendela
 %  Parameter2 masukan:
 %  N: jumlah koefisien (tap) tapis FIR
 %     Catatan: Harus bilangan ganjil.
 %  Ftype: Tipe tapis
 %	1.  Tapis Low-pass ;
 %   2.  Tapis High-pass;
 %	3.  Tapis Bandpass;
 %   4.  Tapis Bandstop.
 %  WnL: Frekuensi cutoff bawah (radian), WnL=0 untuk Tapis Highpass
 %  WnH: Frekuensi cutoff atas (radian), WnH=0 untuk Tapis Lowpass.
 %  Wtype: tipe fungsi jendela
 %	1.  Jendela Rectangular;
 %   2.  Jendela Triangular;
 %	3.  Jendela Hanning;
 %   4.  Jendela Hamming;
 %	5.  Jendela Blackman;
 % Keluaran:
 % B: Koefisien2 Tapis FIR.
 %
 M=(N-1)/2;
 hH=sin(WnH*[-M:1:-1])./([-M:1:-1]*pi);
 hH(M+1)=WnH/pi;
 hH(M+2:1:N)=hH(M:-1:1);
 hL=sin(WnL*[-M:1:-1])./([-M:1:-1]*pi);
 hL(M+1)=WnL/pi;
 hL(M+2:1:N)=hL(M:-1:1);
 if Ftype == 1
    h(1:N)=hL(1:N);
 end
 if Ftype == 2
    h(1:N)=-hH(1:N);
    h(M+1)=1+h(M+1);
 end
 if Ftype ==3
    h(1:N)=hH(1:N)-hL(1:N);
 end
 if Ftype == 4
    h(1:N)=hL(1:N)-hH(1:N);
    h(M+1)=1+h(M+1);
 end
 % Fungsi-fungsi jendela;
 if Wtype ==1
    w(1:N)=ones(1,N);
 end
 if Wtype ==2
    w=1-abs([-M:1:M])/M;
 end
 if Wtype ==3
    w= 0.5+0.5*cos([-M:1:M]*pi/M);
 end
 if Wtype ==4
    w=0.54+0.46*cos([-M:1:M]*pi/M);
 end
 if Wtype ==5
    w=0.42+0.5*cos([-M:1:M]*pi/M)+0.08*cos(2*[-M:1:M]*pi/M);
 end
 B=h .* w

Fungsi firwd() ini akan kita gunakan dalam ekperimen Noise Removal kita ini. Baik, mari kita lakukan proses tapis derau langkah demi langkah sebagai berikut, kita awali dengan menutup jendela-jendela, sekalian membersihkan memori Matlab…

close all; clear all

Kita siapkan frekuensi cuplik (8000 Hz) dan periodenya (1/Fs), sekaligus membaca data yang digunakan untuk eksperimen ini (menggunakan instruksi load pada Matlab, data beserta listing program lengkap bisa diunduh disini):

fs=8000;T=1/fs;
load we.dat

Kemudian kita siapkan variabel waktunya (t). Mulai dari 0 (detik) hingga [Panjang(we)-1] dikali T (detik)…

t=[0:length(we)-1]*T;

Baik, sekarang kita siapkan deraunya. Derau berkaitan dengan data-data, tingkatnya tinggi (high level) dan bersifat broadband (nanti akan Anda lihat spektrumnya), diawali dengan 1/4 dari rerata kuadrat data…

th=mean(we.*we)/4;
v=sqrt(th)*randn([1,length(we)]);

Gabungkan derau (v) dengan sinyal aslinya (we) dan gambarkan hasilnya (dalam ranah waktu)….

x=we+v;
subplot(2,1,1);plot(t,x,’k');
xlabel(’Waktu (detik)’);ylabel(’Amplitudo’);grid;

Kemudian gambarkan juga spektrumnya…

N=length(x);
f=[0:N/2]*fs/N;
Axk=2*abs(fft(x))/N;Axk(1)=Axk(1)/2;
subplot(2,1,2); plot(f,Axk(1:N/2+1),’k');
xlabel(’Frekuensi (Hz)’); ylabel(’Besaran |X(f)| ‘);grid;

hasilnya…

Bagaimana? Sekarang Anda bisa melihat dengan jelas sinyal + derau dan spektrumnya. Perhatikan bentuk-bentuk ‘rumput’ pada spektrumnya (ini karena adanya derau). Selanjutnya dilakukan proses penapisan untuk mengambil (atau lebih tepatnya menahan) komponen derau. Kita siapkan frekuensi cutoff dalam radian yang dinormalisasi terhadap frekuensi cuplik (Fc/Fs) dikali dengan 2*pi…

wc=2*pi*1900/8000;

Kemudian kita siapkan tapisnya…

B=firwd(133,1,wc,0,4);

Dan akhirnya kita lakukan proses penapisan (filtering)…

y=filter(B,1,x);

Selanjutnya kita gambarkan hasilnya, sekalian spektrumnya…

Ayk=2*abs(fft(y))/N;Ayk(1)=Ayk(1)/2;
subplot(2,1,1); plot(t,y,’k');
xlabel(’Waktu (detik)’);ylabel(’Amplitudo’);grid;
subplot(2,1,2);plot(f,Ayk(1:N/2+1),’k');
xlabel(’Frekuensi (Hz)’); ylabel(’Besaran |Y(f)| ‘);grid;

Hasilnya…

Okey! Bandingkan kedua gambar tersebut, adakah perbedaan? Dalam ranah waktu? Dalam ranah frekuensi? Mo Jawab? Komentar? Pertanyaan? Silahkan gunakan form komentar di bawah ini…

Terima kasih, semoga bermanfaat.. Oya mo listingnya lengkap (termasuk data we.dat)? Unduh aja disini (RAR)!

Catatan:

  • Beberapa instruksi yang tidak dijelaskan dalam artikel mohon merujuk HELP-nya Matlab.

sumber:

  • Tan, Li, 2008, Digital Signal Processing: Fundamentals and Applications, Academic Press, Elsevier, USA

Tags: , ,

32 Responses to “Pemisahan Derau dan Suara - Speech Noise Reduction”

  1. pak mau tanya nieh…
    metode reduksi noise yang bapak tulis tadi pake wavelet g????
    soalnya Tugas Akhir saya juga reduksi noise suara tapi metodenya pake Descrete Wavelet Transform!!!!
    mohon penjelasannya ya pak!!!(^_^)

  2. untuk reduksi noise belum saya pake wavelet, coba install matlab pasang toolbox wavelet dan jalankan demo waveletnya disana ada tutorial untuk memisahkan derau mengguanakn DWT…

  3. OK pak…..
    thanx untuk penjelasannya!!!

  4. salam kenal pak…
    saya sebenarnya bukan dibidang elektro,tapi informatika.
    tapi saya mau belajar ttg pemrosesan sinyal digital buat TA saya.

    mau nanya nih…
    kasus di atas hampir sama ga sih dengan kasus kalo ada rekaman speech yg ada background noisenya, trus kita mau memperjelas speech ato mengurangi background noisenya???

    maaf kalo pertanyaannya ga berbobot.maklum newbie.
    mohon jawabannya pak.
    trima kasih…^^

  5. @Lya: ya betul, rekaman yang disertai derau kasusnya sama dengan artikel ini, kemungkinan-nya: (1) memisahkan noise (tidak harus pake tais adaptif), atau (2) meng-enhance sinyalnya (ini perlu tapis adaptif)… begitu…

  6. hoo…gitu y pak…
    ok.trina kasih pak atas penjelasannya…:)

  7. oh iya pak..
    ada lagi pertanyaannya…
    klo misahin derau brati bisa dibuat secara real time ya?

  8. @lya: pada prinsipnya bisa…!

  9. maaf pak…mau nanya lg niih…:)

    saya mau tanya tentang teknik`blind speech separation.apakah bpk mengerti?sebenarnya teknik ini berguna untuk apa y pak?apakah memisahkan suara manusia dgn noise sekitarnya, atau memisahkan suara satu manusia dengan manusia lainnya???
    singkat aja gpp kok pak.:)
    makasih pak

  10. Asw pak, dr d3 elins dulu pe skrg, baru kali ini ikut corat coret,.maf
    kbetulan topik ny sama sama tugas kuliah nih, sy merekam suara manusia dg background noise low&high sekalian, format PCM, sampling 8kHz, 8 bit mono.
    metode yg harus digunakan itu FIR & IIR, sy udah buat tp hasilnya jelek sekali, noise nya masih tinggi,dan bahkan suara yg mau di tapis juga hampir hilang,..
    misal nya saya untuk FIR
    jadi stlh ‘wavread’,pakai command ‘fir1′([b,a]=fir1(orde,wn), koof hasilnya di convolusi dgn masukan wav td, trus sudah lgsg wavwrite,

    barangkali ada saran harus pakai apa lagi
    atau gmn cara nentuain freq cutoff nya, apakah ada rumus nya? karena kan sy tidak tau suara manusia yg direkam itu pd freq berapa atau sukur2 sy dikasih program m-file ato simulink nya, karena harus dikumpul+presentasiin besok sore :(

    Thanks
    Regard

  11. @Lya ada sedikit penjelasan ttg BSS (blind source/speech separation) disini http://www.bagustris.blogspot.com

  12. Pak tanya,
    file we.dat itu fungsinya untuk apa..? kalo tidak salah itu file sinyal yh akan ditambahi noise kan? Oya, untuk menyimpan/membuat file .dat itu bagaimana Pak..?
    Terakhir, saya coba mendengarkan suara sinyal+noise dan sinyal setelah di-filter, saya pakai script berikut:
    wavplay(x,fs) %sinyal+noise
    wavplay(y,fs) %after filtering
    Apakah benar skrip yang saya gunakan tsb Pak..?

    Bagus
    TF-ITS

  13. reinhart chandra
    July 5th, 2009 at 10:42 pm

    pak saya mau minta bantuan..
    saya sedang mencoba membuat TA ttg reduksi noise dengan wavelet..kira2 yang dimaksud dengan penentuan threshold itu apa pak?soalnya saya masih belajar metodenya dan masih mengalami kesulitan pak..oiya kalo boleh minta..bapak ada bahan mengenai wavelet ttg penentuan threshold itu pak?kalo boleh minta email saya velocity_stt06@yahoo.co.id..terima kasih pak

  14. Pak, tanya:
    File we.dat, itu buatan bapak sendiri atau bawaannya matlab..?
    apa bedanya kalau kita men-generate random noise..? (randn)
    Terima kasih Sebelumnya, Pak.

    Bagus,
    TF ITS.

  15. siang pak..
    mau nanya bagaiaman jika respon dari FIR filter yang kita buat itu merupakan real time?
    maksudnya data yang kita dapatkan dari sumber derau..dalam hal ini
    kita berikan cotoh dari sound card,apakah bisa lagsung di proses
    atau harus direcord dulu??

    bagaimanakah penentuan frekuensi Nyquist dalam filter yg kita buat?
    frekuensi wn=ws/2 ??

    terima kasih atas tanggapan bapak..syalom

  16. maaf pak, pertanyaan sy mungkin diluar masalah ini. saya kebetuln sedang meneliti ttg segmentasi citra menggunakan metode fuzzy c means. pertanyaan saya : bagaimana membuat file ber-extension dat, dengan datanya berupa matrix dari image.

    makasih

  17. pak bagaimana kalo kita gunakan fft??
    apa bisa kita lakukan reduction noise nya??

  18. pak saya mau tny
    cr bpk ni berlaku untuk music tdk?

    satu lg,,td itu noise ny ditambahkan atau sudah ada dalam proses perekaman??

  19. @nick:
    pada dasarnya bisa untuk musik, untuk artikel tsb, noise kita tambahkan secara manual (melalui skrip matlab), kenyataannya noise terekam pada saat rekaman, penanganannya bisa spt yang jelaskan tsb… terima kasih

  20. terima kasih atas infonya..

  21. Asslkm pak…
    ni winda.. sebelumya juga udah kirim email ke bapak..
    tentang program noise reduction diatas..
    winda mau mengajukan beberapa pertanyaan…
    koefisien yang 133 itu apa ya pak? kenapa harus bernilai ganjil?
    trus lebar window hamingnya brp, pak?
    winda make buat filter sinyal suara pak… Fs=12kHz, di program tsb ada frame blocking ga pak? dimananya?
    kalau ga ada.. boleh ga pak ajarin winda.. cara menambahkannya bagmana?

    (lumyan banyak yang ditanyakan ya pak… maf ya pak, winda make program bapak bwt tugas akhir winda..)

    Makasih sebelumnya pak… mohon bimbingannya pak..
    waslm

  22. Pak, saya mau tanya. Gimana source code untuk tapis adaptif sebagai konfigurasi Penghilang derau suara dengan menggunakan algoritma tapis adaptif LMS. . Di sini saya pake program MATLAB.Terimakasih sebelumnya

  23. Waduh ternyata source pemisahannya dalam sistem perekaman suara tidak mudah ya. Saya kira mudah, ternyata saya salah. Hmmm terimakasih Pak atas penerangannya, semoga ini bisa bermanfaat bagi semua orang

  24. mantap..(y)

  25. makasih pak ilmunya

  26. menambah wawasan saya pak

  27. thank you for sharing it’s so helpful

  28. kok gak bsia di download ya?

  29. terimakasih sangat membantu

  30. thank you for sharing it’s so helpful

  31. hello reshab here please follow our link for all vip escorts in bangalore complete details best escorts service in bangalore

    best escorts service in bangalore

  32. Thanks for sharing informative stuff keep rocking bring more details

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>