I would like to sum a filterbank made of bandpass butterworth filters to reconstruct an audio signal. Given group delays for each channel shown in the following plot . . .
How would I go about designing complementaty allpass filters to flatten this out somewhat? It doesn't have to be completely flat, just a bit flatter than it is. Sampling the impulse responses to make linear phase filters is not an option at the moment.
The Matlab code used to generate this is shown below. Note: I have multiplied the group delays by a factor of 2 as the signal is passed through the bank twice.
sr = 22050; %Make octave wide filters cfs = [125 250 500 1000 2000 4000]; bw = 1; %octaves nBins = 2^12; gd = zeros(nBins,numel(cfs)); for nn = 1:numel(cfs) cf = cfs(nn); loEdge = cf*(2^-bw/2); hiEdge = cf*(2^+bw/2); [b, a] = butter(2, [loEdge hiEdge]/(sr/2), 'bandpass'); [gd(:,nn),f] = grpdelay(b,a,nBins,sr); end figure; semilogx(f,2*gd); xlim([10 8000]) legend(num2str(cfs')); xlabel ('F [Hz]'); ylabel('Group delay [samples]')