annotate _beattracker/chromaframe.m @ 9:4ea6619cb3f5 tip

removed log files
author matthiasm
date Fri, 11 Apr 2014 15:55:11 +0100
parents b5b38998ef3b
children
rev   line source
matthiasm@8 1 function [spec] = chromaframe(x,spark);
matthiasm@8 2 % function [spec,mfcc,cq,hpcp,chroma] = chromaframe(x,spark);
matthiasm@8 3
matthiasm@8 4 % function to return spectrogram, constq, hpcp and chromagram
matthiasm@8 5 % for one single frame of arbitrary length
matthiasm@8 6 % with the possible inclusion of an adaptive thresholding stage.
matthiasm@8 7
matthiasm@8 8 fmin = 110;
matthiasm@8 9 fmax = 880;
matthiasm@8 10
matthiasm@8 11 if nargin<2
matthiasm@8 12 spark = sparsekernel(fmin, fmax, 36, 44100/16, 0.054);
matthiasm@8 13 spark(1025:end,:) = [];
matthiasm@8 14 end
matthiasm@8 15
matthiasm@8 16
matthiasm@8 17 % make x a row vector
matthiasm@8 18 x = x(:)';
matthiasm@8 19 x2 = x;
matthiasm@8 20 fs = 44100;
matthiasm@8 21 % downsample by a factor of 16.
matthiasm@8 22 %x = x(1:16:end);
matthiasm@8 23 % x = resample(x,11025,44100);
matthiasm@8 24 x = resample(x,2756,11024);
matthiasm@8 25 % x = resample(x,11024,44096);
matthiasm@8 26
matthiasm@8 27 len = length(x);
matthiasm@8 28
matthiasm@8 29
matthiasm@8 30 % make windowing function
matthiasm@8 31 w = hanningz(len);
matthiasm@8 32 w = w(:)';
matthiasm@8 33 % w = ones(1,length(x)); % or no windowing... shouldn't be better..
matthiasm@8 34 % take fft
matthiasm@8 35 spec = abs(fft(w.*x,2048));
matthiasm@8 36 spec = adapt_thresh(spec(1:1024),16,15);
matthiasm@8 37
matthiasm@8 38 % %spec = spec(1:1024);
matthiasm@8 39 %
matthiasm@8 40 % %cq = adapt_thresh(abs(spec*spark));
matthiasm@8 41 % cq = abs(spec*spark);
matthiasm@8 42 % hpcp = zeros(1,36);
matthiasm@8 43 %
matthiasm@8 44 % for k=1:36
matthiasm@8 45 % hpcp(k) = sum(abs(cq(k:36:end)));
matthiasm@8 46 % end
matthiasm@8 47 %
matthiasm@8 48 % %hpcp = adapt_thresh(hpcp,2,3);
matthiasm@8 49 %
matthiasm@8 50 % % for k=1:round(abs(log2(fmax/fmin))),
matthiasm@8 51 % % l(k) = sum(hpcp(k:3:end));
matthiasm@8 52 % % end
matthiasm@8 53 % %
matthiasm@8 54 % % [val,ind] = max(l);
matthiasm@8 55 % %
matthiasm@8 56 % % chroma = hpcp(ind:3:end);
matthiasm@8 57 % %
matthiasm@8 58 % for i=1:12 % sum bins..
matthiasm@8 59 % chroma(i) = sum(hpcp((i-1)*3+1:3*i));
matthiasm@8 60 % end
matthiasm@8 61
matthiasm@8 62
matthiasm@8 63 %chroma = adapt_thresh(chroma,3,2);
matthiasm@8 64
matthiasm@8 65 % % modulated complex lapped transform
matthiasm@8 66 % % spec = abs(fmclt(x',1024)');
matthiasm@8 67 % % spec = adapt_thresh(spec);
matthiasm@8 68 %
matthiasm@8 69 % % % try to treat everything as gaussians
matthiasm@8 70 % % n = 1:length(cq);
matthiasm@8 71 % % mu = sum(n.*cq)/sum(cq);
matthiasm@8 72 % % sigma = sqrt(sum((n-mu).^2)/sum(cq));
matthiasm@8 73 % % cq = exp(-0.5 * ((n - mu)./sigma).^2) ./ (sqrt(2*pi) .* sigma);
matthiasm@8 74 % %
matthiasm@8 75 % % n = 1:length(hpcp);
matthiasm@8 76 % % mu = sum(n.*hpcp)/sum(hpcp);
matthiasm@8 77 % % sigma = sqrt(sum((n-mu).^2)/sum(hpcp));
matthiasm@8 78 % % hpcp = exp(-0.5 * ((n - mu)./sigma).^2) ./ (sqrt(2*pi) .* sigma);
matthiasm@8 79 % %
matthiasm@8 80 % % n = 1:length(chroma);
matthiasm@8 81 % % mu = sum(n.*chroma)/sum(chroma);
matthiasm@8 82 % % sigma = sqrt(sum((n-mu).^2)/sum(chroma));
matthiasm@8 83 % % chroma = exp(-0.5 * ((n - mu)./sigma).^2) ./ (sqrt(2*pi) .* sigma);
matthiasm@8 84 % %
matthiasm@8 85 % % n = 1:length(spec);
matthiasm@8 86 % % mu = sum(n.*spec)/sum(spec);
matthiasm@8 87 % % sigma = sqrt(sum((n-mu).^2)/sum(spec));
matthiasm@8 88 % % spec = exp(-0.5 * ((n - mu)./sigma).^2) ./ (sqrt(2*pi) .* sigma);
matthiasm@8 89 %
matthiasm@8 90 % %x2 = resample(x2,8000,44100);
matthiasm@8 91 % %spec = mfcc(x',8000,100);
matthiasm@8 92 % %spec = abs(sum(spec'))';
matthiasm@8 93 %
matthiasm@8 94 % x2 = x2(1:4:end);
matthiasm@8 95 % spec2 = abs(fft(hanning(length(x2))'.*x2,2048));
matthiasm@8 96 % spec2 = spec2(1:1024);
matthiasm@8 97 % mlmx = fft2melmx(1024,round(44100/16),40);
matthiasm@8 98 % [size(mlmx) size(spec2)];
matthiasm@8 99 % mfcc = 20*log10(1+spec*mlmx');
matthiasm@8 100 % spec = 20*log10(1+spec*mlmx');
matthiasm@8 101
matthiasm@8 102 % spec = adapt_thresh(mfcc,2,3);
matthiasm@8 103 % x2 = resample(x2,1378,44096);
matthiasm@8 104 % len = length(x2);
matthiasm@8 105 % w = hanningz(len);
matthiasm@8 106 % w = w(:)';
matthiasm@8 107 % % take fft
matthiasm@8 108 % spec = abs(fft(w.*x2,1024));
matthiasm@8 109 % spec = adapt_thresh(spec(1:512),16,15);
matthiasm@8 110 spec = spec(1:512);
matthiasm@8 111 % mlmx = fft2melmx(512,round(44100),40);
matthiasm@8 112 % spec = spec*mlmx';