Sunday, December 28, 2014

Menghitung MSE dari .wav file di Matlab

MSE (mean squared error) adalah salah satu standar evaluasi obyektif (objective evaluation) pada dunia sains dan teknik, baik pada cabang ilmu fisika, kimia, biologi, informatika, elektronika dan bidang rekayasa yang lain. Misalkan kita mempunyai sebuah data atau sinyal (suara, gambar, dll) yang telah kita manipulasi (enhancement, separation, improvement) dan kita ingin membandingkan sinyal output (estimasi, enhanced, separated) dengan sinyal aslinya, maka kita membandingkan sinyal asli dan sinyal estimasi tersebut dengan teknik MSE dengan salah satu syarat: panjang sinyalnya sama.

Secara matematik, MSE dirumuskan sebagai berikut,


Sedangkan implementasi dalam matlab untuk file suara yang berekstensi .wav dapat dilihat pada kode di bawah. Cara menggunakan fungsi ini cukup mudah, yakni (dalam Matlab command window): msewav('fileinput.wav','fileoutput.wav').

Pastikan file fungsi ini beserta dua file wav yang akan dihitung MSE-nya ada dalam satu folder (direktori) dimana anda bekerja, atau gunakan perintah addpath untuk menambahkannya ke dalam direktori kerja anda.

msewav.m (Github )

function error  = msewav(inputFile ,outputFile)
% function to compute mse between two .wav. files
% usage: mse=msewav(cleanfile.wav,enhanced.wav)
% matlab spectrum library for Vibrastic Lab, ITS
% bagustris@yahoo.com (21/7/2014) for .wav files

if nargin<2 
fprintf('mse=msewav(inputFile, outputFile) \n');
return;
end;
 
[in, fs1, Nbits1]= wavread(inputFile);
[out, fs2, Nbits2]= wavread(outputFile);
if (( fs1~= fs2) | ( Nbits1~= Nbits2))
error( 'The two files do not match!\n');
end
 
if length(in)<length(out);
out=out(1:length(in));
else
in=in(1:length(out));
end
 
in=in(:);
out=out(:);
 
%error=mse(in,out);
in=in./max(abs(in));
out=out/max(abs(out));
z=sum(((in)-(out)).^2);
error=z/length(in);
end 

If you find a bug (or suggest some improvement), please contact me.
Related Posts Plugin for WordPress, Blogger...