This is where navigation should be.

MATRIX2LATTICETYPE - Convert matrix form to standard lattice description

Usage

[a,M,lt] = matrix2latticetype(L,V);

Description

[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])

Coefficient layout:

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;