samer@32: function edges=as_cqedges(fs,range,res,F0) samer@32: samer@32: % as_cqedges - Audio Spectrum linear to log frequency map (no checking) samer@32: % samer@32: % Converts a constant-Q filterbank specification into a list of band samer@32: % edges, and optionally the sparse mapping matrix samer@32: % which can be multiplied by a STFT power spectrogram to get a samer@32: % constant-Q spectrogram. samer@32: % samer@32: % as_cqmap0 :: samer@32: % real ~ 'sampling rate', samer@32: % [[2]] ~ 'requested lower and upper cut-off frequencies', samer@32: % real ~ 'resolution in octaves', samer@32: % real ~ 'origin of frequency grid in Hz (defaut=1kHz)' samer@32: % -> samer@32: % [[L-1]] ~ 'frequency bin edges', samer@32: % [[L,M]] ~ 'L by M sparse array'. samer@32: samer@32: % origin of frequnecy grid defaults to 1kHz samer@32: if nargin<4, F0=1000; end samer@32: samer@32: % quantise requested edges and represent them in samer@32: % in units of res on a log frequency scale. samer@32: limits = round(log2(range/F0)/res); samer@32: samer@32: % convert to normalised frequencies (fs=1) samer@32: edges = (F0/fs)*2.^(res*(limits(1):limits(2))); samer@32: samer@32: % remove any edges above Nyquist rate samer@32: if edges(end)>=0.5, edges = edges(edges<0.5); end