I still have some difficulties understanding sampling lattices in the 4D position-frequency space of images. Here’s a flow of thoughts on this:
A 1D-signal of length N can be interpreted as an element of CN. (This was always confusing me: an N-dimensional vector is only a 1D-signal!) But in TFA it is actually considered as an infinite periodic vector with period N. Therefore the index set is not just {1,...,N} but rather ZN:=Z/NZ. This set is a finite group under addition modulo N. The TF-domain of that 1D-signal space is ZN×ZN and therefore 2D; it still has the group structure (by components). A sampling subset Λ of this TF-plane takes out certain time-locations and frequencies. If one has a fixed window function g with same signal length, the Gabor family with regard to that sampling subset is the set of those shifts and modulations of the Gabor atom g where the time-locations and frequencies are given by Λ. If Λ has enough elements, namely |Λ|>N, then...??? No, the redundancy doesn’t tell anything about whether the Gabor family is a frame! It is automatically a frame (in the finite setting) as soon as it spans the whole signal space. So what does that redundancy tell us? And why is it automatically large enough as soon as the Gabor family is a frame? Or what?
Another open question is why or when one should have a subgroup as sampling subset. What advances does one get when the sampling is done on a subgroup? If Λ is a subgroup, then there is a dual? Is there no dual when Λ is no subgroup? Or does it just depend on the redundancy then? It might have something to do with the fact that the Gabor frame operator commutes with TF-shifts along that subgroup.
The things get even trickier for 2D-signals. An image of size p×q is also considered as an infinite periodic signal with periods p in one direction and q in the other. The signal space has N=pq dimensions. The index set is Zp×Zq. The TF-domain (actually position-frequency domain) becomes (Zp×Zq)×(Zp×Zq) and is therefore 4D. What’s unclear here is the term of separability with regard to the sampling subset. In the 1D-case (TF-plane is 2D) one names the sampling subset a separable lattice when the shifts and modulations are defined by the multiples of a divisor of N. I.e., one gets a rectangular grid (lattice) in the TF-plane in this case: For every time-shift there is the same set of modulations. A non-separable case could be given by a set of random sampling points. But these don’t form a subgroup in general. A non-separable subgroup could look like a rotated version of a separable lattice. For a rotation by 45° (π/4) one gets the special case of a quincunx lattice (if the correct distances are taken). And now to separabililty of a 4D-lattice: What does a 4D quincunx look like? Or another 4D non-separable lattice? Does this mean that whenever I can split into two 2D-lattices, one talks about separable lattices, independently from the question whether these two are separable again? I think separable means here that one either has a position-lattice ((x1,x2)-lattice) and a frequency lattice ((ω1,ω2)-lattice) or an (x1,ω1)- and an (x2,ω2)-lattice, independently from whether these are separable themselves or not. But how does one construct a 4D-set out of two 2D-sets with MATLAB/Octave?
Just for playing around, I wrote a script that “groupifies” a given
subset of the TF-plane: It calculates all subsequent sums of the given
points and adds them to the subset. If two points are placed in such an
unlucky way such that their subsequent sums span up the whole TF-plane
(This is the case of a constructor in the previously described image-to-vector isomorphism), a warning is raised. I don’t know if I can use that for 4D lattices, or if I even need that anyway.
function LS=groupify
(L
)% Usage: LS = groupify(L)% L ... p x q sized 0/1-matrix representing a sampling subset of Zp x Zq% LS .. A subgroup of Zp x Zq created from the sampling subset L% If it is equal to Zp x Zq, a warning is raised[p q
]=
size(L
);
N=p*q;
ix=
find(L==
1);
numpts=
length(ix
);
if numpts<=
1 LS=L;
returnendLSf=
zeros(1,N
);
for a=
1:numpts
for b=a:numpts
start=ix
(a
);
step=ix
(b
)-ix
(a
);
idx =
mod( (start:step:N*step
)-
1, N
)+
1;
if length(find(idx==start
))==
1 %we never came back again warning(’The subgroup equals the whole group!’);
LS=
ones(p,q
);
return end LSf
(idx
)=
1;
endendLS=
reshape(LSf,p,q
);
endfunction