Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB - Hallo sahabat pawang bisnis, Pada sharing INFO TEKNIK berjudul Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB, saya telah menulis sebuah artikel. mudah-mudahan isi postingan dapat bermanfaat dan mudah anda pahami. okelah, ini dia isi contennya.

Artikel : Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB
Judul : Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB


Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB

Artikel Tugas Kuliah,
       Assalamu'alaikum Wr. Wb. pada kesempatan ini saya akan berbagi cara membuat program noise cancellation dengan menggunakan algoritma LMS (Least Mean Squared) pada MATLAB.
        Pada program noise cancellation ini hanya akan meredam noise yang ada dari suara yang sudah direkam yang bercampur dengan suara-suara lain di sekitarnya yang tidak diinginkan jadi tidak untuk real time noise cancellation dikarenakan simulasi ini hanya digunakan pada laptop yang menggunakan satu mikrofon saja. Sehingga suara yang diinputkan menjadi harus bergantian. Suara yang sudah difilter dengan algoritma LMS ini akan menjadi lebih jernih dari suara yang masih bercampur dengan noise-nya. Cara menggunakannya yaitu dengan merekam terlebih dahulu suara yang bercampur dengan noise, kemudian direkam kembali hanya suara noise-nya saja. Noise cancellation ini banyak digunakan pada ponsel (ponsel yang sudah memiliki dedicated mic noise cancellation, biasanya terdapat lubang mic kecil di bagian atas ponsel/hp) untuk menghilangkan suara dari luar saat kita sedang melakukan panggilan suara.
N-tap Filter Adaptive Tranversal

        Langsung saja kita eksekusi langkah-langkahnya sebagai berikut :
  1. Langkah pertama buka program MATLAB dan klik ikon "New M-File" seperti pada gambar di bawah. Langkah ini dilakukan untuk membuat dan menyimpan program  "Perekam_Suara.m" pada MATLAB.
  2. Mengetik program berikut pada jendela "Editor" MATLAB.
    1. %Program perekam suara dan menyimpannya dalam bentuk file.wav

    2. function [suara_normal,a] = Perekam_Suara(sampel_frekuensi)
    3. pilihan = 'n';
    4. pilih_merekam = 'n';
    5. waktu_rekaman = 5;         %waktu perekaman (lamanya merekam) dalam detik
    6. sampel_frekuensi = 8192;     %frekuensi sampling dalam Hertz (8KHz)
    7. sampling_waktu = sampel_frekuensi* waktu_rekaman;

    8. 'Aplikasi Perekam Suara dengan MATLAB';
    9. nama_file = input('Ketik nama file hasil rekaman yang akan disimpan: ','s');
    10. nama_file_wav = sprintf('%s.wav',nama_file);
    11. pilih_merekam = input('tekan y untuk mulai merekam: ','s');
    12. if pilih_merekam=='y'
    13. while pilihan=='n',
    14. input('Tekan Enter untuk mulai merekam --> ');
    15. rekaman = wavrecord(sampling_waktu, sampel_frekuensi);       %merekam suara dari sound card dengan sampling rate yang sudah ditentukan
    16. input('Tekan Enter untuk mendengar hasil rekamannya --> ');
    17. sound(rekaman, sampel_frekuensi);
    18. pilihan = input('tekan y untuk menyimpan atau n untuk merekam kembali: ','s');
    19. end
    20. wavwrite(rekaman, sampel_frekuensi, nama_file_wav);  %menyimpan data yang telah direkam dalam format ".wav"
    21. end
  3. Simpan program tersebut dengan menekan ikon "Save" atau menekan tombol Ctrl+S pada keyboard.
  4. Pilih direktori/tempat file sesuai keinginan, dan simpan dengan nama yang sama persis pada program.
  5. Klik tombol Run untuk menjalankan program noise cancellation yang sudah disimpan sebelumnya.
  6. Setelah dijalankan dan disimpan nama file .wav-nya maka akan tersimpad di direktori default MATLAB. kalo di laptop saya letaknya di C:\Users\Vidi Fitriansyah H\Documents\MATLAB.
  7. Selanjutnya memasukkan sintaks  berikut pada "Command Window". Program di bawah ini merupakan program Noise Cancellation dengan algoritma LMS. Dalam program ini menggunakan filter 5-tap (delay sebanyak 5) yaitu Bobot.0 sampai Bobot.4 dengan panjang filter n sebanyak 40960. Semakin banyak n-tap-nya semakin jernih dan lebih mendekati suara asli yang dihasilkan, namun membutuhkan sumber daya (memori) yang banyak juga.
    1. %Program menentukan output sinyal asli berdasarkan pemfilteran antara sinyal noise dan sinyal asli+noise
    2. disp('Program LMS Noise Cancelation')
    3. disp('  ')
    4. disp('Parameter :')
    5. mu=1;%nilai mu dipilih 1 (bebas)
    6. Bobot0=0.1;%nilai inisialisasi w0 (masukkan bebas antara 0,1-0,9)
    7. Bobot1=0.2;%nilai inisialisasi w1 (masukkan bebas antara 0,1-0,9)
    8. Bobot2=0.3;%nilai inisialisasi w2 (masukkan bebas antara 0,1-0,9)
    9. Bobot3=0.4;%nilai inisialisasi w3 (masukkan bebas antara 0,1-0,9)
    10. Bobot4=0.6;%nilai inisialisasi w4 (masukkan bebas antara 0,1-0,9)
    11. n=40960;%panjang filter (sesuai nilai sampling suara)
    12. sn=wavread('Suara_Masuk.wav');%suara asli+noise/campuran
    13. noise=wavread('Suara_Noise.wav');%hanya suara noise
    14. disp('Input : Sound 1')
    15. disp('Desired Output : d(n)= Sound 2')
    16. disp('Output Adaptif : y1(n)=w0*x(n)+w1*x(n-1)w2*x(n-2)+w3*x(n-3)+w4*x(n-4)')
    17. disp('Update Nilai : w(n+1)=w(n)+2*mu*e(n)*x(n)') %algoritma LMS
    18. x=(noise');
    19. y1=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks y1
    20. w0=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks w0 (bobot 1)
    21. w1=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks w1 (bobot 2)
    22. w2=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks w2 (bobot 3)
    23. w3=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks w3 (bobot 4)
    24. w4=[zeros(1,n)];%membuat matriks kosong dengan banyak baris 0 dan kolom n yang digunakan sebagai tempat hasil matriks w4 (bobot 5)
    25. w0(1)=Bobot0;%nilai inisialisasi untuk w0
    26. w1(1)=Bobot1;%nilai inisialisasi untuk w1
    27. w2(1)=Bobot2;%nilai inisialisasi untuk w2
    28. w3(1)=Bobot3;%nilai inisialisasi untuk w3
    29. w4(1)=Bobot4;%nilai inisialisasi untuk w4
    30. for i=1:n-4 %nilai untuk elemen array i dari 1 sampai dengan n-4 karena nilai n=0 sampai n=4 sudah diisi oleh w0 sampai w1
    31. d=(sn');
    32. y1(i+4)=w0(i+4)*x(i+4)+w1(i+4)*x(i+3)+w2(i+4)*x(i+2)+w3(i+4)*x(i+1)+w4(i+4)*x(i);%output adaptif
    33. e(i+4)=d(i+4)-y1(i+4);%nilai error=nilai suara bersih
    34. w0(i+5)=w0(i+4)+2*mu*e(i+4)*x(i+4);%rumus algoritma LMS tap 1 
    35. w1(i+5)=w1(i+4)+2*mu*e(i+4)*x(i+3);%rumus algoritma LMS tap 2 
    36. w2(i+5)=w1(i+4)+2*mu*e(i+4)*x(i+2);%rumus algoritma LMS tap 3 
    37. w3(i+5)=w1(i+4)+2*mu*e(i+4)*x(i+1);%rumus algoritma LMS tap 4 
    38. w4(i+5)=w1(i+4)+2*mu*e(i+4)*x(i);%rumus algoritma LMS tap 5 
    39. end
    40. %disp('s+n    noise    w0       w1       w2      w3      w4        s+n-noise         y1')
    41. %disp('================================================================================')
    42. %fprintf(' %1.d   %.2f  %.5f  %.5f  %.5f  %.5f  %.5f   %.5f   %.5f\n',x,d,w0,w1,w2,w3,w4,e,y1)
    43. figure;
    44. subplot(3,3,1); plot(1:n,x),grid;xlabel('noise');ylabel('n'); %gambar sinyal noise
    45. subplot(3,3,2); plot(1:n,d),grid;xlabel('s+n'); ylabel('n'); %gambar sinyal s+n
    46. subplot(3,3,3); plot(1:n+1,w0),grid;xlabel('w0'); ylabel('n'); %gambar sinyal bobot 1
    47. subplot(3,3,4); plot(1:n+1,w1),grid;xlabel('w1'); ylabel('n'); %gambar sinyal bobot 2
    48. subplot(3,3,5); plot(1:n+1,w2),grid;xlabel('w2'); ylabel('n'); %gambar sinyal bobot 3
    49. subplot(3,3,6); plot(1:n+1,w3),grid;xlabel('w3'); ylabel('n'); %gambar sinyal bobot 4
    50. subplot(3,3,7); plot(1:n+1,w4),grid;xlabel('w4'); ylabel('n'); %gambar sinyal bobot 5
    51. subplot(3,3,8); plot(1:n,e),grid;xlabel('s+n-noise'); ylabel('n'); %gambar sinyal suara terfilter
    52. subplot(3,3,9); plot(1:n,y1),grid;xlabel('y1'); ylabel('n'); %gambar sinyal learning value
    53. fprintf('\n\nNilai w0 yang didapat adalah : %.5f\n',w0(i)) %nilai w0 akhir (sebenarnya)
    54. fprintf('Nilai w1 yang didapat adalah : %.5f\n',w1(i)) %nilai w1 akhir (sebenarnya)
    55. fprintf('Nilai w2 yang didapat adalah : %.5f\n',w2(i)) %nilai w2 akhir (sebenarnya)
    56. fprintf('Nilai w3 yang didapat adalah : %.5f\n',w3(i)) %nilai w3 akhir (sebenarnya)
    57. fprintf('Nilai w4 yang didapat adalah : %.5f\n',w4(i)) %nilai w4 akhir (sebenarnya)
  8. Untuk nama file suara sn dan noise disesuaikan dengan file audio yang sudah direkam sebelumnya.
  9. Setelah itu didapatkan nilai hasil masing-masing bobot yang sebenarnya pada screenshot di bawah.
  10. Dapat dilihat juga grafik sinyalnya pada jendela "Figure 1" di MATLAB.
  11. Karena perbedaan hasil sinyal suara+noise dan suara yang sudah difilter sangat sedikit maka untuk mengetahui perbedaan hasilnya sinyal-sinyal tersebut dari ranah waktu ditransformasikan ke ranah frekuensi dengan menggunakan fungsi fft (fast fourier transform) yang sudah ada pada MATLAB.  Agar dapat diubah ke ranah frekuensi maka dilanjutkan memasukkan program FFT-nya.
    1. A = fft(d);
    2. B = fft(e);
    3. C = fft(x);
    4. figure;
    5. N = length(e);
    6. T = 1/N;
    7. mag = abs(A);
    8. freq = (0:(N/2)-1)/(N*T);
    9. subplot(2,2,1),plot(freq,mag(1:N/2)),grid;
    10. xlabel('frekuensi');
    11. ylabel('magnitude');
    12. title('s+n');
    13. mag = abs(B);
    14. freq = (0:(N/2)-1)/(N*T);
    15. subplot(2,2,2),plot(freq,mag(1:N/2)),grid;
    16. xlabel('frekuensi');
    17. ylabel('magnitude');
    18. title('s+n-noise');
    19. mag = abs(C);
    20. freq = (0:(N/2)-1)/(N*T);
    21. subplot(2,2,3),plot(freq,mag(1:N/2)),grid;
    22. xlabel('frekuensi');
    23. ylabel('magnitude');
    24. title('Noise');
    25. sound(e);
  12. Maka hasil dari sinyal suara+noise, suara+noise-noise dan noise-nya seperti berikut.

        Dari sinyal tersebut terlihat sekilas bahwa suara+noise dan suara yang telah difilter (s+n-n) sama hal itu dikarenakan sinyal noise-nya yang diberikan sangat kecil. Namun jika diperbesar tampilannya maka akan terlihat perbedaan antara keduanya.
Sekian & terima kasih atas kunjungannya...
Semoga bermanfaat ;)




    Demikianlah Artikel Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB

    Sekian Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB, mudah-mudahan bisa memberi manfaat untuk anda semua.

    Anda sedang membaca artikel Noise Cancellation dengan Algoritma Adaptive LMS (Least Mean Squared) pada MATLAB dan artikel ini url permalinknya adalah https://pawang-bisnis.blogspot.com/2019/08/noise-cancellation-dengan-algoritma.html Semoga artikel ini bisa bermanfaat.

    Tag : ,