This is where navigation should be.

IFILTERBANKITER - Filter bank iterative inversion

Usage

f=ifilterbankiter(c,g,a);

Description

ifilterbankiter(c,g,a) iteratively synthesizes a signal f from the coefficients c which were obtained using the filters stored in g for a channel subsampling rate of a (the hop-size).

The filter bank g and the subsampling rate a must be the same as used in filterbank or ufilterbank.

This function is useful if there is no way how to explicitly compute a dual system using filterbankdual or filterbankrealdual.

Additional parameters

The function calls frsyniter and passes all the optional arguments to it. Please refer to help of frsyniter for further details.

Please note that by default, the function expects filterbank g to be created for real signals i.e. g cover only the positive frequencies. Additional flag 'complex' is required if the filterbank is defined for positive and negative frequencies.

Examples:

The following example compares convergence rates of CG and PCG for a filterbank which forms a frame, but it is neither uniform or painless:

[f,fs] = greasy; L = size(f,1);
[g,a,fc]=erbfilters(fs,L,'fractional','bwmul',0.6,'redmul',4/5,'complex');
filterbankfreqz(g,a,L,'plot','linabs');
% Filterbankdual does not work
try
    gd=filterbankdual(g,a,L);
catch
    disp('FILTERBANKDUAL exited with error.');
end

c = filterbank(f,g,a);
[fpcg,~,iterpcg] = ifilterbankiter(c,g,a,'complex','pcg');
[fcg,~,itercg] = ifilterbankiter(c,g,a,'complex','cg');

fprintf('CG achieved error %e in %d iterations.\n',norm(f-fcg), itercg);
fprintf('PCG achieved error %e in %d iterations.\n',norm(f-fpcg), iterpcg);

Similar example with real filterbank:

[f,fs] = greasy; L = size(f,1);
[g,a,fc]=erbfilters(fs,L,'fractional','bwmul',0.6,'redmul',4/5);
filterbankfreqz(g,a,L,'plot','linabs');
% Filterbankrealdual does not work
try
    gd=filterbankrealdual(g,a,L);
catch
    disp('FILTERBANKREALDUAL exited with error.');
end

c = filterbank(f,g,a);
[fpcg,~,iterpcg] = ifilterbankiter(c,g,a,'pcg');
[fcg,~,itercg] = ifilterbankiter(c,g,a,'cg');

fprintf('CG achieved error %e in %d iterations.\n',norm(f-fcg), itercg);
fprintf('PCG achieved error %e in %d iterations.\n',norm(f-fpcg), iterpcg);

References:

T. Necciari, P. Balazs, N. Holighaus, and P. L. Søndergaard. The ERBlet transform: An auditory-based time-frequency representation with perfect reconstruction. In Proceedings of the 38th International Conference on Acoustics, Speech, and Signal Processing (ICASSP 2013), pages 498--502, Vancouver, Canada, May 2013. IEEE.

T. Necciari, N. Holighaus, P. Balazs, Z. Průša, P. Majdak, and O. Derrien. Audlet filter banks: A versatile analysis/synthesis framework using auditory frequency scales. Applied Sciences, 8(1), 2018. [ DOI | http ]