Mercurial > hg > nimfks
diff src/matlab/CSS.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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/matlab/CSS.m Sun Jun 18 06:26:13 2017 -0400 @@ -0,0 +1,126 @@ +classdef CSS < handle + properties + NMF_features + Activations + Cost + Synthesis_method + Synthesis + end + + methods + function obj = CSS(varargin) + if nargin == 2 + obj.NMF_features = varargin{1}; + obj.Synthesis_method = varargin{2}; + end + end + end + + methods + function obj = nmf(obj, corpus_sound, target_sound, varargin) + if( nargin == 4 ) + pct_prune = varargin{1} + else + pct_prune = 1 + end + nmf_alg = obj.NMF_features.Algorithm; + target_spect = abs(target_sound.Features.STFT.S); + corpus_spect = abs(corpus_sound.Features.STFT.S); + [corpus_spect, pruned_frames, frames_to_keep] = prune_corpus( target_spect, corpus_spect, pct_prune ); + + switch nmf_alg + case 'Euclidean' + if length(fieldnames(obj.NMF_features)) > 1 + [H, obj.Cost] = nmf_euclidean(target_spect, corpus_spect, obj.NMF_features); + else + [H, obj.Cost] = nmf_euclidean(target_spect, corpus_spect); + end + case 'Divergence' + if length(fieldnames(obj.NMF_features)) > 1 + [H, obj.Cost] = nmf_divergence(target_spect, corpus_spect, obj.NMF_features); + else + [H, obj.Cost] = nmf_divergence(target_spect, corpus_spect); + end + case 'Sparse NMF' + if length(fieldnames(obj.NMF_features)) > 1 + [~, H, deleted, obj.Cost] = SA_B_NMF(target_spect, corpus_spect, 5, obj.NMF_features); + else + [~, H, deleted, obj.Cost] = SA_B_NMF(target_spect, corpus_spect, 5 ); + end + + H( deleted, : ) = 0; + obj.Activations = H; + end + + if size( frames_to_keep ) > 0 + tmp = zeros( size( corpus_sound.Features.STFT.S,2 ), size( target_spect,2 ) ); + for i = 1:length( frames_to_keep ) + tmp(frames_to_keep(i), :) = H(i,:); + end + H = tmp; + end +% H( pruned_frames, : ) = 0; +% % Pad activations to size of corpus frames +% % since pruned frames maximum can be < size of corpus +% H( setdiff( 1:( size( corpus_spect, 2 ) + length( pruned_frames ) ), 1:size( H, 1 ) ), : ) = 0; + obj.Activations = H; + end + + function obj = synthesize(obj, corpus_sound) + synth_method = obj.Synthesis_method; + win = corpus_sound.Features.window; + W = abs(corpus_sound.Features.STFT.S); + H = obj.Activations; + + switch synth_method + case 'ISTFT' + parameters = []; + parameters.synHop = win.Hop; + parameters.win = window(lower(win.Type), win.Length); + + reconstruction = W*H; + padding = size(reconstruction, 1)*2 - win.Length - 2; + if padding >= 0 + parameters.zeroPad = padding; + end + + obj.Synthesis = istft(reconstruction, parameters); + case 'Template Addition' + obj.Synthesis = templateAdditionResynth(corpus_sound.Signal, H, win); + end + end + + function plot_activations(obj, varargin) + if(nargin > 1) + maxDb = varargin{1}; + else + maxDb = -45; + end + + H = obj.Activations; + + HdB = 20*log10(H./max(max(H))); + HdB = HdB - maxDb; + HdB(HdB < 0) = 0; + imagesc(HdB); + cmap = colormap('gray'); + cmap(1,:) = 0*ones(1,3); + colormap(flipud(cmap)) + colorbar + axis xy; grid on; + set(gca, 'Layer', 'top'); + ylabel('Template'); + xlabel('Time'); + grid on; + set(gca,'FontSize',16); + end + + function plot_cost(obj) + plot(obj.Cost); + xlabel('Iteration'); + ylabel('Cost'); + title('Cost vs. Iteration'); + grid on + end + end +end \ No newline at end of file