Mercurial > hg > nimfks
diff src/matlab/rot_kernel.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/rot_kernel.m Sun Jun 18 06:26:13 2017 -0400 @@ -0,0 +1,80 @@ +function [Y] = rot_kernel(kernel, deg) + +N = size( kernel, 1 ); +max_rots = 4*(N-1); +deg_per_rot = 360 / max_rots; + +% deg = deg - mod( deg, deg_per_rot ); +deg = deg_per_rot * ( round( deg / deg_per_rot ) ); +num_of_rots = ceil( deg / deg_per_rot ); + +if num_of_rots < 1 + Y = kernel; + return +else + for r = 1:num_of_rots + if mod( r, 2 ) == 0 + kernel = rot_outer_layer( kernel ); + else + kernel = rot_inner_layer( kernel ); + end + end +end + +Y = kernel; + +end + +function [Y] = rot_outer_layer( A ) + dim = size( A, 1 ); + top = A( 1, : ); + right = A( 2:dim, dim )'; + bottom = fliplr( A( dim, 1:dim - 1 ) ); + left = fliplr( A( 2:dim - 1, 1 )' ); + shifted_layers = wshift('1D',[top,right,bottom,left],-1); + + top = shifted_layers( 1:length(top)); + last_ind = length( top ); + + right = shifted_layers( last_ind + 1 : last_ind + length(right)); + last_ind = last_ind + length( right ); + + bottom = shifted_layers( last_ind + 1 : last_ind + length(bottom)); + last_ind = last_ind + length( bottom ); + + left = shifted_layers( last_ind + 1 : end ); + + A( 1, : ) = top; + A( 2:dim, dim ) = right'; + A( dim, 1:dim - 1 ) = fliplr( bottom ); + A( 2:dim - 1, 1 ) = fliplr( left' ); + + Y = A; +end + +function [Y] = rot_inner_layer( kernel ) +% dim = size( kernel, 1 ); +% if dim < 2 +% Y = rot_outer_layer( kernel ) +% return; +% else +% Y = rot_inner_layer( kernel( 2:dim - 1, 2:dim - 1 ) ) +% end + dim = size( kernel, 1 ); + + if mod( dim / 2, 2 ) == 0 + max_rots = dim / 2 - 1; + else + max_rots = dim / 2 - 0.5; + end + + low = 2; + high = dim - 1; + for i = 1:max_rots + kernel( low:high, low:high ) = rot_outer_layer( kernel( low:high, low:high ) ); + low = low + 1; + high = high - 1; + end + + Y = kernel; +end \ No newline at end of file