annotate computeCQT.m @ 1:3ea8ed09af0f tip

additional clarifications
author Dimitrios Giannoulis
date Wed, 13 Mar 2013 11:57:24 +0000
parents 22b10c5b72e8
children
rev   line source
Dimitrios@0 1 function [intCQT] = computeCQT(y)
Dimitrios@0 2 % Settings for computing CQT for music signals (by E. Benetos)
Dimitrios@0 3
Dimitrios@0 4 % COMPUTING A CQT WITH 40ms STEP AND BASIC NOISE REDUCTION:
Dimitrios@0 5 %[intCQT] = computeCQT(filename);
Dimitrios@0 6 %X = intCQT(:,round(1:7.1128:size(intCQT,2)))';
Dimitrios@0 7 %noiseLevel1 = medfilt1(X',40);
Dimitrios@0 8 %noiseLevel2 = medfilt1(min(X',noiseLevel1),40);
Dimitrios@0 9 %X = max(X-noiseLevel2',0);
Dimitrios@0 10 %Y = X(1:4:size(X,1),:); % 40ms step
Dimitrios@0 11
Dimitrios@0 12
Dimitrios@0 13 % Load .wav file
Dimitrios@0 14 %[x fs bits] = wavread(filename);
Dimitrios@0 15 %if (size(x,2) == 2) y = mean(x')'; clear('x'); else y=x; clear('x'); end;
Dimitrios@0 16 %if (fs ~= 44100) y = resample(y,44100,fs); end;
Dimitrios@0 17 %y = 0.5*y/max(y);
Dimitrios@0 18 fs = 44100;
Dimitrios@0 19
Dimitrios@0 20
Dimitrios@0 21 % Compute CQT
Dimitrios@0 22 Xcqt = cqt(y,27.5,fs/3,60,fs,'q',0.80,'atomHopFactor',0.3,'thresh',0.0005,'win','hann');
Dimitrios@0 23 %Xcqt = cqt(y,27.5,fs/3,120,fs,'q',0.35,'atomHopFactor',0.3,'thresh',0.0005,'win','hann'); % old resolution
Dimitrios@0 24 absCQT = getCQT(Xcqt,'all','all');
Dimitrios@0 25
Dimitrios@0 26 % Crop CQT to useful time regions
Dimitrios@0 27 emptyHops = Xcqt.intParams.firstcenter/Xcqt.intParams.atomHOP;
Dimitrios@0 28 maxDrop = emptyHops*2^(Xcqt.octaveNr-1)-emptyHops;
Dimitrios@0 29 droppedSamples = (maxDrop-1)*Xcqt.intParams.atomHOP + Xcqt.intParams.firstcenter;
Dimitrios@0 30 outputTimeVec = (1:size(absCQT,2))*Xcqt.intParams.atomHOP-Xcqt.intParams.preZeros+droppedSamples;
Dimitrios@0 31
Dimitrios@0 32 lowerLim = find(outputTimeVec>0,1);
Dimitrios@0 33 upperLim = find(outputTimeVec>length(y),1)-1;
Dimitrios@0 34
Dimitrios@0 35 %intCQT = absCQT(112:1200,lowerLim:upperLim); % old resolution
Dimitrios@0 36 intCQT = absCQT(56:600,lowerLim:upperLim);
Dimitrios@0 37
Dimitrios@0 38
Dimitrios@0 39 %figure; imagesc(imrotate(abs(intCQT),90));
Dimitrios@0 40