[e2c226]: comp / comp_dgt_fb.m Maximize Restore History

Download this file

comp_dgt_fb.m    93 lines (62 with data), 2.1 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
function [coef]=comp_dgt_fb(f,g,a,M)
%COMP_DGT_FB Filter bank DGT
% Usage: c=comp_dgt_fb(f,g,a,M);
%
% This is a computational routine. Do not call it directly.
%
% See help on DGT.
% AUTHOR : Peter L. Søndergaard.
% Calculate the parameters that was not specified.
L=size(f,1);
N=L/a;
gl=length(g);
W=size(f,2); % Number of columns to apply the transform to.
glh=floor(gl/2); % gl-half
% Conjugate the window here.
g=conj(fftshift(g));
coef=zeros(M,N,W);
% ----- Handle the first boundary using periodic boundary conditions. ---
for n=0:ceil(glh/a)-1
% Periodic boundary condition.
fpart=[f(L-(glh-n*a)+1:L,:);...
f(1:gl-(glh-n*a),:)];
fg=bsxfun(@times,fpart,g);
% Do the sum (decimation in frequency, Poisson summation)
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2);
end;
% ----- Handle the middle case. ---------------------
for n=ceil(glh/a):floor((L-ceil(gl/2))/a)
fg=bsxfun(@times,f(n*a-glh+1:n*a-glh+gl,:),g);
% Do the sum (decimation in frequency, Poisson summation)
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2);
end;
% ----- Handle the last boundary using periodic boundary conditions. ---
for n=floor((L-ceil(gl/2))/a)+1:N-1
% Periodic boundary condition.
fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh elements
f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements
fg=bsxfun(@times,fpart,g);
% Do the sum (decimation in frequency, Poisson summation)
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2);
end;
% --- Shift back again to make it a frequency-invariant system. ---
for n=0:N-1
coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh);
end;
coef=fft(coef);
% Simple code using a lot of circshifts.
% Move f initially so it lines up with the initial fftshift of the
% window
%f=circshift(f,glh);
%for n=0:N-1
% Do the inner product.
%fg=circshift(f,-n*a)(1:gl,:).*gw;
% Periodize it.
%fpp=zeros(M,W);
%for ii=0:gl/M-1
% fpp=fpp+fg(ii*M+1:(ii+1)*M,:);
%end;
% fpp=sum(reshape(fg,M,gl/M,W),2);
% Shift back again.
% coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W);
%end;