📄 comp_idgt_fb.m
字号:
function [f]=comp_idgt_fb(coef,g,a,M)%COMP_IDGT_FB Filter bank IDGT.% Usage: f=comp_idgt_fb(c,g,a,M);% % This is a computational routine. Do not call it directly.%% SEE ALSO: IDGT% Author : Peter Soenderagaard.% Compute the real length of the transform.N=size(coef,2);W=size(coef,3);L=N*a;b=L/M;gl=length(g);coef=ifft(coef);coef=reshape(coef,M*N,W);gl=length(g);% The fftshift actually makes some things easier.g=fftshift(g);f=zeros(L,W);% Values used to calculate correct splitting.no_split_s=ceil((gl/2/a));no_split_e=floor((L-gl/2)/a);nrange=(0:N-1)';spr=rem(nrange*a-gl/2+L,L)+1; % Starting pointepr=rem(nrange*a-gl/2+gl-1+L,L)+1; % ending point.nsplitr=L+1-spr;% Make multicolumn g by replication.gw=repmat(g,1,W);% This covers the the cases when splitting is necessary:Nsplit=[0:no_split_s-1,no_split_e+1:N-1];% This n is one-indexed, to avoid to many +1for n=Nsplit+1 % Rotate the coefficients, duplicate them until they have same % length as g, and multiply by g. ff=repmat(circshift(coef((n-1)*M+1:n*M,:),-(n-1)*a+gl/2),gl/M,1).*gw; % Add the ff vector to f at position sp. f(spr(n):L,:)=f(spr(n):L,:)+ff(1:nsplitr(n),:); f(1:epr(n),:)=f(1:epr(n),:)+ff(nsplitr(n)+1:gl,:); end;% This cover the cases when splitting is not necessary:% This n is one-indexed, to avoid to many +1for n=no_split_s+1:no_split_e+1 % Rotate the coefficients, duplicate them until they have same % length as g, and multiply by g. ff=repmat(circshift(coef((n-1)*M+1:n*M,:),-(n-1)*a+gl/2),gl/M,1).*gw; % Add the ff vector to f at position sp. f(spr(n):epr(n),:)=f(spr(n):epr(n),:)+ff; end;% Scale correctly.f=M*f;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -