## [e2c226]: comp / comp_dgtreal_fb.m  Maximize  Restore  History

 ``` 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 89 90 91 92 93 94``` ```function [coef]=comp_dgtreal_fb(f,g,a,M) %COMP_DGTREAL_FB Filter bank DGT % Usage: c=comp_dgt_fb(f,g,a,M,boundary); % % 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 M2=floor(M/2)+1; % Conjugate the window here. g=conj(fftshift(g)); coef=zeros(M,N,W); % Replicate g when multiple columns should be transformed. gw=repmat(g,1,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=fpart.*gw; % 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=f(n*a-glh+1:n*a-glh+gl,:).*gw; % 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=fpart.*gw; % 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=fftreal(coef); coef=reshape(coef,M2,N,W); %c=c(1:M2,:); % 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; ```