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: fir, noise removal, tapis
March 21st, 2009 at 1:54 am
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!!!(^_^)
March 21st, 2009 at 9:14 pm
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…
March 21st, 2009 at 11:10 pm
OK pak…..
thanx untuk penjelasannya!!!
March 26th, 2009 at 12:00 am
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…^^
March 26th, 2009 at 5:46 am
@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…
March 28th, 2009 at 9:38 pm
hoo…gitu y pak…
ok.trina kasih pak atas penjelasannya…:)
March 28th, 2009 at 9:43 pm
oh iya pak..
ada lagi pertanyaannya…
klo misahin derau brati bisa dibuat secara real time ya?
March 30th, 2009 at 12:37 pm
@lya: pada prinsipnya bisa…!
April 17th, 2009 at 5:27 pm
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
April 27th, 2009 at 1:08 am
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
May 1st, 2009 at 12:55 am
@Lya ada sedikit penjelasan ttg BSS (blind source/speech separation) disini http://www.bagustris.blogspot.com
May 4th, 2009 at 5:42 am
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
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
July 8th, 2009 at 6:11 pm
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.
July 11th, 2009 at 9:48 am
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
August 13th, 2009 at 3:50 pm
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
February 15th, 2010 at 4:21 pm
pak bagaimana kalo kita gunakan fft??
apa bisa kita lakukan reduction noise nya??
August 28th, 2010 at 12:38 pm
pak saya mau tny
cr bpk ni berlaku untuk music tdk?
satu lg,,td itu noise ny ditambahkan atau sudah ada dalam proses perekaman??
September 3rd, 2010 at 9:54 am
@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
December 20th, 2010 at 10:06 am
terima kasih atas infonya..
April 1st, 2011 at 11:53 am
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
April 18th, 2011 at 7:42 pm
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
July 30th, 2015 at 4:04 pm
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
May 3rd, 2017 at 11:42 am
mantap..(y)
April 10th, 2018 at 12:29 am
makasih pak ilmunya
April 11th, 2018 at 1:45 pm
menambah wawasan saya pak
May 16th, 2018 at 3:18 pm
thank you for sharing it’s so helpful
May 25th, 2018 at 7:29 pm
kok gak bsia di download ya?
November 26th, 2018 at 9:28 pm
terimakasih sangat membantu
June 8th, 2019 at 12:38 pm
thank you for sharing it’s so helpful
June 26th, 2019 at 8:10 pm
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
July 20th, 2019 at 1:57 pm
Thanks for sharing informative stuff keep rocking bring more details