[a,M,lt] = matrix2latticetype(L,V);
[a,M,lt]=matrix2latticetype(L,V) converts a \(2\times 2\) integer matrix description into the standard description of a lattice using the a, M and lt. The conversion is only valid for the specified transform length L.
The lattice type lt is a \(1 \times 2\) vector \([lt_1,lt_2]\) denoting an irreducible fraction \(lt_1/lt_2\). This fraction describes the distance in frequency (counted in frequency channels) that each coefficient is offset when moving in time by the time-shift of a. Some examples: lt=[0 1] defines a square lattice, lt=[1 2] defines the quinqux (almost hexagonal) lattice, lt=[1 3] describes a lattice with a \(1/3\) frequency offset for each time shift and so forth.
An example:
[a,M,lt] = matrix2latticetype(120,[10 0; 5 10])
The following code generates plots which show the coefficient layout and enumeration of the first 4 lattices in the time-frequecy plane:
a=6; M=6; L=36; b=L/M; N=L/a; cw=3; ftz=12; [x,y]=meshgrid(a*(0:N-1),b*(0:M-1)); lt1=[0 1 1 2]; lt2=[1 2 3 3]; for fignum=1:4 subplot(2,2,fignum); z=y; if lt2(fignum)>0 z=z+mod(lt1(fignum)*x/lt2(fignum),b); end; for ii=1:M*N text(x(ii)-cw/4,z(ii),sprintf('%2.0i',ii),'Fontsize',ftz); rectangle('Curvature',[1 1], 'Position',[x(ii)-cw/2,z(ii)-cw/2,cw,cw]); end; axis([-cw L -cw L]); axis('square'); title(sprintf('lt=[%i %i]',lt1(fignum),lt2(fignum)),'Fontsize',ftz); end;