[3deeb5]: comp / comp_iwpfbt.m  Maximize  Restore  History

Download this file

47 lines (42 with data), 1.7 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function f=comp_iwpfbt(c,wtNodes,pOutIdxs,chOutIdxs,Ls,ext,do_scale)
%COMP_IWFBT Compute Inverse Wavelet Packet Filter-Bank Tree
% Usage: f=comp_iwpfbt(c,wtNodes,pOutIdxs,chOutIdxs,Ls,ext)
%
% Input parameters:
% c : Coefficients stored in cell array.
% wtNodes : Filterbank tree nodes (elementary filterbans) in
% reverse BF order. Cell array of structures of length *nodeNo*.
% pOutIdxs : Idx of each node's parent. Array of length *nodeNo*.
% chOutIdxs : Idxs of each node children. Cell array of vectors of
% length *nodeNo*.
% ext : Type of the forward transform boundary handling.
%
% Output parameters:
% f : Reconstructed data in L*W array.
%
% Do non-expansve transform if ext=='per'
doPer = strcmp(ext,'per');
% For each node in tree in the BF order...
for jj=1:length(wtNodes)
% Node filters to a cell array
gCell = cellfun(@(gEl)conj(flipud(gEl.h(:))),wtNodes{jj}.g(:),'UniformOutput',0);
% Node filters subs. factors
a = wtNodes{jj}.a;
% Node filters initial skips
if(doPer)
offset = cellfun(@(gEl) 1-numel(gEl.h)-gEl.offset,wtNodes{jj}.g);
else
offset = -(a-1);
end
if(pOutIdxs(jj))
% Run filterbank and add to the existing subband.
ctmp = comp_ifilterbank_td(c(chOutIdxs{jj}),gCell,a,size(c{pOutIdxs(jj)},1),offset,ext);
c{pOutIdxs(jj)} = c{pOutIdxs(jj)}+ctmp;
if do_scale
c{pOutIdxs(jj)} = (1/sqrt(2))*c{pOutIdxs(jj)};
end
else
% We are at the root.
f = comp_ifilterbank_td(c(chOutIdxs{jj}),gCell,a,Ls,offset,ext);
end
end

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks