comp_gdgt.m

来自「Matlab时频分析工具箱,希望能对大家有所帮助啊」· M 代码 · 共 85 行

M
85
字号
function [c,Ls]=comp_gdgt(f,g,a,M,L,c_t,c_f,c_w,timeinv)%COMP_GDGT  Compute generalized DGT%   Usage:  c=comp_gdgt(f,g,a,M,L,c_t,c_f,c_w,timeinv);%%   Input parameters:%         f       : Input data%         g       : Window function.%         a       : Length of time shift.%         M       : Number of modulations.%         L       : Length of transform to do.%         c_t     : Centering in time of modulation.%         c_f     : Centering in frequency of modulation.%         c_w     : Centering in time of window.%         timeinv : Should we compute a time invariant Gabor system.%   Output parameters:%         c       : M*N array of coefficients.%         Ls      : Length of input signal.%% 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 Soendergaard.Lwindow=size(g,1);W=size(f,2);N=L/a;% Preprocess to handle c_f different from 0.if (c_f~=0)  halfmod=exp(-2*pi*i*c_f*(0:L-1).'/M);  f=f.*repmat(halfmod,1,W);end;if Lwindow<L  % Do the filter bank algorithm  c=comp_dgt_fb(f,g,a,M,0);else  % Do the factorization algorithm    b=L/M;  N=L/a;  W=size(f,2);  % Get the factorization of the window.  gf=comp_wfac(g,a,M);    % Compute the window application and the DFT modulation.  c=fft(comp_dgt_fac(f,gf,a,M))/sqrt(M);  end;if timeinv  c=reshape(c,M,N,W);  c=phaselock(c,a);  c=reshape(c,M,N*W);end;% Post-process if c_t is different from 0.if (c_t~=0)  % The following is necessary because REPMAT does not work for  % 3D arrays.  halfmod=repmat(exp(-2*pi*i*c_t*((0:M-1)+c_f).'/M),1,N*W);    c=c.*halfmod;end;c=reshape(c,M,N,W);

⌨️ 快捷键说明

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