Model-based EM Source Separation and Localization
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
data
plottools initial checkin Mar 5, 2012
.gitignore compiled octave mex file of logProbGmm.mex, added .o to gitignore Mar 28, 2014
README.md added function to make grid of tau values Jun 9, 2015
argmax.m
binSpec.m
countIbmNeighbors.m changed file names to work with latest version of gen_mixes_timit Aug 27, 2014
dB.m initial checkin Mar 5, 2012
fig_no_focus.m initial checkin Mar 5, 2012
ibmNeighborCountsSimple.mat added IBM neighbor count data for MRF Sep 26, 2016
idB.m initial checkin Mar 5, 2012
ildPrior.m wrote my own version of x2fx Mar 28, 2014
isNoDisplay.m added reMatch as a sub-function to isNoDisplay Jan 13, 2017
istft.m initial checkin Mar 5, 2012
logProbGmm.cpp initial checkin Mar 5, 2012
logProbGmm.mex compiled octave mex file of logProbGmm.mex, added .o to gitignore Mar 28, 2014
logProbGmm.mexa64
logProbGmm.mexglx set execute permission for mex files Mar 28, 2014
logProbGmm.mexw32 set execute permission for mex files Mar 28, 2014
logProbGmm.mexw64
ls10.m initial checkin Mar 5, 2012
makeBands.m initial checkin Mar 5, 2012
messl.m tweaked output to console Jul 8, 2015
messlIldInit.m more factoring stuff out into helper functions Apr 28, 2015
messlIldLogLikelihood.m
messlIldUpdateParams.m added protection from ILD variance going to 0, other assertions to ca… Jul 12, 2015
messlIpdEnforcePriors.m added protection from ILD variance going to 0, other assertions to ca… Jul 12, 2015
messlIpdInit.m got multi-channel messl working Apr 29, 2015
messlIpdLogLikelihood.m split functions out into their own files Apr 28, 2015
messlIpdUpdateParams.m split functions out into their own files Apr 28, 2015
messlMrfApply.m added protection from ILD variance going to 0, other assertions to ca… Jul 12, 2015
messlMrfLoadCompat.m split functions out into their own files Apr 28, 2015
messlMultichannel.m use MMSE TDOA instead of mode of TDOA distribution Aug 14, 2015
messlObsDerive.m
messlPosterior.m tweak for slight speedup Jun 5, 2015
messlSpChannelAdaptGmms.m split functions out into their own files Apr 28, 2015
messlSpEigenvoiceAndChannelAdaptGmms.m split functions out into their own files Apr 28, 2015
messlSpInit.m
messlSpLogLikelihood.m
messlSpPermuteGmms.m
messlSpUpdateParams.m split functions out into their own files Apr 28, 2015
messlUtilDctInit.m more factoring stuff out into helper functions Apr 28, 2015
messlUtilMakeMuAvg.m split functions out into their own files Apr 28, 2015
messlUtilVisualizeParams.m split functions out into their own files Apr 28, 2015
mrfGridLbp.m added max-product formulation of MRF Grid loopy-BP, output argument o… Aug 27, 2014
perMicTdoaLs.m
phatLoc.m initial checkin Mar 5, 2012
pickPeaks.m initial checkin Mar 5, 2012
prob2mask.m initial checkin Mar 5, 2012
probCC.m
process_options.m
reconstruct.m initial checkin Mar 5, 2012
stft.m initial checkin Mar 5, 2012
subplots.m added function for detecting no display to avoid maximum recursion de… May 24, 2015
tauGrid.m added function to make grid of tau values Jun 9, 2015
tdoaOverTime.m optimized MESSL observation functions Jul 22, 2015
visParams.m don't call subplot unless actually trying to plot Sep 14, 2015
x2fx2.m wrote my own version of x2fx Mar 28, 2014

README.md

Model-Based EM Source Separation and Localization

Copyright 2006-2009 Michael I Mandel and Ron Weiss, all rights reserved mim@ee.columbia.ed and ronw@ee.columbia.edu Last updated 2009-08-20

Basic usage to separate two sources:

addpath('./plottools/')

% % Load stereo wav files of the same length and mix them
% [y1 fs] = wavread('data/src1.wav');
% [y2 fs] = wavread('data/src2.wav');
% lr = y1' + y2';

% Load pre-mixed version of those two files (don't forget the transpose)
[lr fs] = wavread('data/mix.wav');
lr = lr';

% Derive grid of tau values (use your numbers here)
tau = tauGrid(0.15, fs, 31);

% Run MESSL
[m,p] = messl(lr, tau, 2, 'vis', 1);

% Reconstruct wavforms from masks
yhat1 = reconstruct(m, lr, 1);
yhat2 = reconstruct(m, lr, 2);

Fancier usage

Initialized from PHAT-histogram:

% Localize and then run MESSL
tdoa = phatLoc(lr, tau, 2, 1024, 1);
[m,p] = messl(lr, tau, 2, 'vis', 1, 'tauPosInit', tdoa);

Even fancier usage, garbage source and ILD prior (better in reverb, but only when using dummy-head recordings):

[m,p] = messl(lr, tau, 2, 'vis', 1, 'ildPriorPrec', 3, ...
              'GarbageSrc', 1, 'sr', 16000);

Can also use prob2mask to make the mask more definitive, i.e. closer to binary, but not binary.

m2 = prob2mask(m);
yhat1 = reconstruct(m2, lr, 1);
yhat2 = reconstruct(m2, lr, 2);