⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idgt2.m

📁 Matlab时频分析工具箱,希望能对大家有所帮助啊
💻 M
字号:
function [f]=idgt2(c,g1,p3,p4,p5)%IDGT2  2D Inverse discrete Gabor transform.%   Usage: f=idgt2(c,g,a);%          f=idgt2(c,g1,g2,a);%          f=idgt2(c,g1,g2,[a1 a2]);%          f=idgt2(c,g,a,Ls);%          f=idgt2(c,g1,g2,a,Ls);%          f=idgt2(c,g1,g2,[a1 a2],Ls);%%   Input parameters:%         c       : Array of coefficients.%         g,g1,g2 : Window function(s).%         a,a1,a2 : Length(s) of time shift.%         Ls      : Length(s) of reconstructed signal (optional).%   Output parameters:%         f     : Output data, matrix.%%   IDGT2(c,g,a,M) will calculate a separable two dimensional inverse%   discrete Gabor transformation of the input coefficients c using the%   window g and parameters a, along each dimension.  The number of channels%   is deduced from the size of the coefficients c.%%   IDGT2(c,g1,g2,a) will do the same using the window g1 along the first%   dimension, and window g2 the second dimension.%%   IDGT2(c,g,a,Ls) or IDGT2(c,g1,g2,a,Ls) will cut the signal to size Ls%   after the transformation is done.%%   The parameters a and Ls can also be vectors of length 2.%   In this case the first element will be used for the first dimension%   and the second element will be used for the second dimension. %%%%   SEE ALSO:  DGT2, CANDUAL% This program is free software: you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation, either version 3 of the License, or% (at your option) any later version.% % This program is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the% GNU General Public License for more details.% % You should have received a copy of the GNU General Public License% along with this program.  If not, see <http://www.gnu.org/licenses/>.%   Author : Peter Soendergaarderror(nargchk(3,5,nargin));if ndims(c)<4 || ndims(c)>5  error('c must be 4 or 5 dimensional.');end;doLs=0;switch nargin  case 3    g2=g1;  case 4    if prod(size(p3))>2      % Two windows was specified.      g2=p3;      a=p4;    else      g2=g1;      a=p3;      Ls=p4;      doLs=1;    end;  case 5    g2=p3;    a=p4;    Ls=p5;    doLs=1;end;if size(g1,2)>1  if size(g1,1)>1    error('g1 must be a vector');  else    % g1 was a row vector.    g1=g1(:);  end;end;if size(g2,2)>1  if size(g2,1)>1    error('g2 must be a vector');  else    % g2 was a row vector.    g2=g2(:);  end;end;if prod(size(a))>2 || prod(size(a))==0  error('a must be a scalar or 1x2 vector');end;if length(a)==2  a1=a(1);  a2=a(2);else  a1=a;  a2=a;end;Lwindow1=size(g1,1);Lwindow2=size(g2,1);M1=size(c,1);N1=size(c,2);M2=size(c,3);N2=size(c,4);W=size(c,5);L1=a1*N1;L2=a2*N2;% Length of window must be dividable by M.% We cannot automically zero-extend the window, as it can% possible break some symmetry properties of the window, and we don't% know which symmetries to preserve.if rem(Lwindow1,M1)~=0  error('Length of window no. 1 must be dividable by M1.')end;if rem(Lwindow2,M2)~=0  error('Length of window no. 2 must be dividable by M2.')end;    % --- first dimension% Change c to correct shape.c=reshape(c,M1,N1,M2*N2*W);c=comp_idgt(c,g1,a1,M1,L1);% Check if Ls was specified.if doLs  c=postpad(c,Ls(1));else  Ls(1)=L1;end;% Change to correct sizec=reshape(c,Ls(1),M2*N2,W);% Exchange first and second dimension.c=permute(c,[2,1,3]);% --- second dimension% Change c to correct shape.c=reshape(c,M2,N2,Ls(1)*W);c=comp_idgt(c,g2,a2,M2,L2);% Check if Ls was specified.if doLs  c=postpad(c,Ls(2));else  Ls(2)=L2;end;% Change to correct sizec=reshape(c,Ls(2),Ls(1),W);% Exchange first and second dimension.f=permute(c,[2,1,3]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -