matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: % CQ2HPCP Convert Constant Q spectrum to a HPCP matthiasm@8: % matthiasm@8: % CQ2HPCP(cqframes, info) matthiasm@8: % matthiasm@8: % cqframes = vector or matrix constant q spectrum / spectra matthiasm@8: % info = info structure containing parameters matthiasm@8: % matthiasm@8: matthiasm@8: function [hpcpframes] = mmcq2hpcp(cqframes, info) matthiasm@8: matthiasm@8: %get cq parameters from info structure matthiasm@8: num_win = info.numberframes; matthiasm@8: matthiasm@8: cqbins = size(cqframes,1); matthiasm@8: matthiasm@8: bpo = info.binsperoctave; matthiasm@8: matthiasm@8: % calculate the number of octaves we have in the spectrum matthiasm@8: num_oct = floor(cqbins/bpo)-1; matthiasm@8: matthiasm@8: hpcpframes(1:num_win, 1:bpo) = 0; matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: % for each window calculate chromagram matthiasm@8: for i = 1 : num_win matthiasm@8: % add each octave of the spectrum into the chromagram matthiasm@8: for oct = 0:num_oct; matthiasm@8: ind = oct*bpo; matthiasm@8: matthiasm@8: hpcpframes(i, 1:bpo) = hpcpframes(i, 1:bpo) + abs(cqframes(ind+1:ind+bpo,i))'; matthiasm@8: matthiasm@8: end; matthiasm@8: matthiasm@8: % normalise matthiasm@8: % hpcpframes(i,1:bpo) = hpcpframes(i,1:bpo)/max(hpcpframes(i,1:bpo)); matthiasm@8: meanc = mean(hpcpframes(i,1:bpo)); matthiasm@8: if meanc > 0.0000001 matthiasm@8: hpcpframes(i,1:bpo) = hpcpframes(i,1:bpo)/mean(hpcpframes(i,1:bpo)); %scale to be a distribution! matthiasm@8: else matthiasm@8: hpcpframes(i,1:bpo) = (bpo)^(-1); matthiasm@8: end matthiasm@8: end; matthiasm@8: