Model-based EM Source Separation and Localization
Matlab C++
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
data
plottools
.gitignore
README.md
argmax.m
binSpec.m
countIbmNeighbors.m
dB.m
fig_no_focus.m
ibmNeighborCountsSimple.mat
idB.m
ildPrior.m
isNoDisplay.m
istft.m
logProbGmm.cpp
logProbGmm.mex
logProbGmm.mexa64
logProbGmm.mexglx set execute permission for mex files Mar 28, 2014
logProbGmm.mexw32
logProbGmm.mexw64
ls10.m
makeBands.m
messl.m
messlIldInit.m
messlIldLogLikelihood.m
messlIldUpdateParams.m
messlIpdEnforcePriors.m added protection from ILD variance going to 0, other assertions to ca… Jul 12, 2015
messlIpdInit.m
messlIpdLogLikelihood.m split functions out into their own files Apr 28, 2015
messlIpdUpdateParams.m
messlMrfApply.m
messlMrfLoadCompat.m
messlMultichannel.m
messlObsDerive.m
messlPosterior.m
messlSpChannelAdaptGmms.m
messlSpEigenvoiceAndChannelAdaptGmms.m
messlSpInit.m
messlSpLogLikelihood.m
messlSpPermuteGmms.m
messlSpUpdateParams.m split functions out into their own files Apr 28, 2015
messlUtilDctInit.m
messlUtilMakeMuAvg.m
messlUtilVisualizeParams.m
mrfGridLbp.m
perMicTdoaLs.m
phatLoc.m
pickPeaks.m
prob2mask.m
probCC.m
process_options.m
reconstruct.m
stft.m
subplots.m
tauGrid.m
tdoaOverTime.m
visParams.m
x2fx2.m

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);