forked from ltfat/ltfat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
comp_gdgt.m
53 lines (39 loc) · 1.22 KB
/
comp_gdgt.m
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
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.
%
% AUTHOR : Peter L. Søndergaard.
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;
c=comp_dgt(f,g,a,M,L,0);
if timeinv
c=phaselock(c,a);
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=reshape(repmat(exp(-2*pi*i*c_t*((0:M-1)+c_f).'/M),1,N*W),M,N,W);
c=c.*halfmod;
end;
c=reshape(c,M,N,W);