annotate dsp/tri_filterbank_aa.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents c3b0cd708782
children
rev   line source
samer@32 1 % tri_filterbank_aa - Bank of anti-aliased triangular filters
samer@32 2 %
samer@32 3 % tri_filterbank_aa ::
samer@32 4 % E:[[M+2]->nonneg] ~'array of filter edge frequencies',
samer@32 5 % F:[[N]] ~'array of bin frequencies for input spectra'
samer@32 6 % -> [[M,N]] ~'matrix to multiply by input spectra'.
samer@32 7
samer@32 8 function W=tri_filterbank_aa(fb_edges,fmap)
samer@32 9 bins = buffer(edges(fmap),2,1,'nodelay');
samer@32 10 M = length(fb_edges)-2; % total number of filters to prepare
samer@32 11 W = zeros(M,size(bins,2));
samer@32 12 for i=1:M
samer@32 13 W(i,:) = olap_up(bins,fb_edges(i:i+1)) + olap_dn(bins,fb_edges(i+1:i+2));
samer@32 14 end
samer@32 15 W=sparse(W);
samer@32 16 end
samer@32 17
samer@32 18 function y=olap_up(bands,seg), [lx,cx]=intersect(bands,seg); y=lx.*(cx-seg(1))./(seg(2)-seg(1)); end
samer@32 19 function y=olap_dn(bands,seg), [lx,cx]=intersect(bands,seg); y=lx.*(seg(2)-cx)./(seg(2)-seg(1)); end
samer@32 20 function [lens,centres]=intersect(i1,i2),
samer@32 21 ivals=[max(i1(1,:),i2(1));min(i1(2,:),i2(2))]; % intersect intervals
samer@32 22 lens=max(ivals(2,:)-ivals(1,:),0); % positive lengths only
samer@32 23 centres=(ivals(2,:)+ivals(1,:))/2; % centres of intervals
samer@32 24 end