Mean Removal Experiments
June 29, 2007
This post is a follow up of the text posted yesterday (I’m afraid this will often be the case
). It is related to radar, sonar and multi-channel signal processing, singular value decomposition, matched filtering, and more specifically to something that’s called clutter rejection.
Intro
There is another problem related to the one discussed yesterday. Consider again the function from example 3:
where
and
This gives a signal that can be decomposed into two singular vectors and
. Thus, one can write:
Suppose we know and
and we are trying to estimate
and
. Equation above implies that
is an estimate of
and
denotes matrix pseudo inverse. This solution is called Wiener filter. For vectors, we have
where denotes a conjugated transpose.
is the length of vector
. In the signal processing literature,
is called matched filter. Further, suppose that
. In that case,
. Clearly,
can then be calculated as:
This means simply a calculation of an average over columns of matrix .
Signal Separation
Now suppose that we have some other signals at unknown frequencies
but
. These signals will be added to the signal from our previous section:
One can then estimate signals like this:
Now, this leads to a least squares problem and that’s where the SVD comes into play; see the post from yesterday. I still need to figure this out…
Channel Mismatch
One can ask a question: “Why should I care about least squares if I know ?” The answer is: You should. The reason is that the solution demonstrated above works only for the cases when we know
(and therefore
) precisely. This, however, isn’t the case in practice. In practice, function
will be modulated by another function
, which is generally unknown. In radar, sonar and other multi-sensor applications, this function often models so-called channel mismatch. How does SVD help in this case? Well, what we know about the result
is that it is still a function of
only and thus it is orthogonal to function
. So, under the conditions discussed yesterday, we can still estimate functions
and
using SVD without really knowing them…
Da Code
Again, some code to play with. Here it is…
clear cj=sqrt(-1);m=16;n=16; x=linspace(-1,1,m)'*%pi; y=linspace(-1,1,n)'*%pi; s=zeros(m,n); f=0; Kx=7;ky=.1; kx=linspace(-Kx,Kx,100); h=exp(-cj*y'*ky); for i=1:100, g=exp(-cj*x*kx(i)); f=f+10*rand(1,1)*g; end s=f*h; s1=zeros(m,n); kx=-2;ky=2; w=.1*exp(-cj*x*kx); z=exp(-cj*y'*ky); s1=s1+w*z; kx=3;ky=-5; w=.5*exp(-cj*x*kx); z=exp(-cj*y'*ky); s1=s1+w*z; s=s+s1; //f_=sum(s,2)/n; f_=s*h'/n; s=s-f_*h; //try commenting this out //to see all signals pad=96; S=fftshift(fft2(fftshift([s,... zeros(m,pad-n);zeros(pad-m,pad)]))); fig1=scf(1); map=jetcolormap(256); xset("colormap",map) Matplot(log10(abs(S)+1e-12)*50) |