Mercurial > hg > nimfks
view src/matlab/prune_corpus.m @ 0:c52bc3e8d3ad tip
user: boblsturm
branch 'default'
added README.md
added assets/.DS_Store
added assets/playButton.jpg
added assets/stopButton.png
added assets/swapButton.jpg
added data/.DS_Store
added data/fiveoctaves.mp3
added data/glock2.wav
added data/sinScale.mp3
added data/speech_female.mp3
added data/sweep.wav
added nimfks.m.lnk
added src/.DS_Store
added src/matlab/.DS_Store
added src/matlab/AnalysisCache.m
added src/matlab/CSS.m
added src/matlab/DataHash.m
added src/matlab/ExistsInCache.m
added src/matlab/KLDivCost.m
added src/matlab/LoadFromCache.m
added src/matlab/SA_B_NMF.m
added src/matlab/SaveInCache.m
added src/matlab/Sound.m
added src/matlab/SynthesisCache.m
added src/matlab/chromagram_E.m
added src/matlab/chromagram_IF.m
added src/matlab/chromagram_P.m
added src/matlab/chromsynth.m
added src/matlab/computeSTFTFeat.m
added src/matlab/controller.m
added src/matlab/decibelSliderReleaseCallback.m
added src/matlab/drawClickCallBack.m
added src/matlab/fft2chromamx.m
added src/matlab/hz2octs.m
added src/matlab/ifgram.m
added src/matlab/ifptrack.m
added src/matlab/istft.m
added src/matlab/nimfks.fig
added src/matlab/nimfks.m
added src/matlab/nmfFn.m
added src/matlab/nmf_beta.m
added src/matlab/nmf_divergence.m
added src/matlab/nmf_euclidean.m
added src/matlab/prune_corpus.m
added src/matlab/rot_kernel.m
added src/matlab/templateAdditionResynth.m
added src/matlab/templateDelCb.m
added src/matlab/templateScrollCb.m
author | boblsturm |
---|---|
date | Sun, 18 Jun 2017 06:26:13 -0400 |
parents | |
children |
line wrap: on
line source
function [ Y, PrunedFrames, KeepCorpusFrames ] = prune_corpus( target, corpus, reduction_coef ) if reduction_coef == 1 Y = corpus; PrunedFrames = []; KeepCorpusFrames = []; return; end [targetRows, targetCols]= size( target ); [corpusRows, corpusCols]= size( corpus ); % Matrix: distances of every target frame to every other target frame % i.e. Self-similarity matrix TargetSelfSimMat = zeros(targetCols); % Matrix: distances of every target frame to every corpus frame % Matrix( i, j ) = Similarity of corpus frame i to target frame j % TargetToCorpSimMat = -1*ones(WCols, targetCols); % Calculate self-similarity of target (euclidean dist) X2 = sum(target.^2,1); TargetSelfSimMat = bsxfun(@plus,X2,X2')-2*(target'*target); % TargetSelfSimMat = exp(-(1/10) * DistanceMat); % Calculate the distance between each corpus frame to first target % frame KeepCorpusFrames = []; RemainingTargetFrames = 1:targetCols; RemainingCorpusFrames = 1:corpusCols; while ~isempty(RemainingTargetFrames) Dist = repmat(target(:,RemainingTargetFrames(1)),1, ... length(RemainingCorpusFrames)) - corpus(:,RemainingCorpusFrames); Distances = sum(Dist.^2,1); % compute mean distances meanDistance = mean(Distances); % find those corpus frames closer than reduction_coef of mean idxcorpuskeep = Distances < reduction_coef*meanDistance; KeepCorpusFrames = [KeepCorpusFrames RemainingCorpusFrames(idxcorpuskeep)]; % find those target frames within twice that to next frame distancetonext = TargetSelfSimMat(RemainingTargetFrames(1)+1,RemainingTargetFrames(1)); idxtarget = TargetSelfSimMat(RemainingTargetFrames,RemainingTargetFrames(1)) ... < 2*distancetonext; if ~any( idxtarget ) && distancetonext == 0 idxtarget = RemainingTargetFrames(2); end % shrink corpus RemainingCorpusFrames = RemainingCorpusFrames(~idxcorpuskeep); % shrink target frames index RemainingTargetFrames = RemainingTargetFrames(~idxtarget); fprintf( '%d remaining frames...\n', size( RemainingTargetFrames ) ); end KeepCorpusFrames = sort( KeepCorpusFrames ); Y = corpus( :, KeepCorpusFrames ); PrunedFrames = setdiff( 1:corpusCols, KeepCorpusFrames ); fprintf( 'Pruned %d frames...\n', size( PrunedFrames ) ); end