Model-based EM Source Separation and Localization
Matlab C++
Switch branches/tags
Nothing to show
Clone or download
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
logProbGmm.mexw32
logProbGmm.mexw64
ls10.m
makeBands.m
messl.m
messlIldInit.m
messlIldLogLikelihood.m
messlIldUpdateParams.m
messlIpdEnforcePriors.m
messlIpdInit.m
messlIpdLogLikelihood.m
messlIpdUpdateParams.m
messlMrfApply.m
messlMrfLoadCompat.m
messlMultichannel.m
messlObsDerive.m
messlPosterior.m
messlSpChannelAdaptGmms.m
messlSpEigenvoiceAndChannelAdaptGmms.m
messlSpInit.m
messlSpLogLikelihood.m
messlSpPermuteGmms.m
messlSpUpdateParams.m
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);