Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

MIMO interference cancellation using matrices projection

Status
Not open for further replies.

ismail bsa

Newbie level 5
Newbie level 5
Joined
Oct 21, 2014
Messages
10
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Visit site
Activity points
100
Hello,


suppose I have a 2x2 MIMO system and that the received signal is:


Y=H*X+H2*I+BBG Where H1 is my Rayleigh channel Matrices (H1(ij) are complexes random variables)

X is my original transmitted signal
H2 is an other Matrices channel totally different from H1
I is a very height Noise that I consider as an interference
BBG is a wight Gaussian Noise

the dimensions are Y(2,1), X(2,1);H1(2,2), H2(2,2), I(2,1) and BBG(2,1).

My goal is to cancel the interference matrices (I) at the receiver.

I am thinking of using matrices projection in some vector subspace like this:

I want to find a Q matrices that verify : Q*H2=0; So the receiver will do as follow:

Y_rec= Q*Y= Q*(H1*X+H2*I+BBG)
= Q*H1*X+ Q*H2*I+Q*BBG

knowing that Q*H=0; the Q*H2*I=0 and the interference will be cancelled !
then I will do an other multiplication with Q^-1 (=inv(Q))

Y_rec2= Q^-1*Y_rec= H1*X+BBG , Or if there is an other way that Q*Q'=I(identity) I will use Q'.

Then I will do a Zero Forcing receiver such:

Y_est=inv(H)*Y_rec2= X+ inv(H)*BBG.

So My question is how to find a Q matrices from an H2 matrices that verifies Q*H2=0 ?

any help will be appreciated.
 

So, your question is how to find a Q such that:

\[QH_2=0_N\]

where 0N is an NxN matrix of zeros (and N=2 in your case).

As you said, the usual way to do this is with a projection. Assuming the columns of H2 are independent, the projection onto the subspace spanned by the columns of H2 is:

\[P = H_2(H_2^HH_2)^{-1}H_2^H\]

where (.)H denotes conjugate transpose. Then, Q is the projection onto the conjugate (orthogonal) subspace:

\[Q = (I_N - P)\]

where IN is an NxN identity matrix. We can check this works by putting it back into the first equation:

\[(I_N - P)H_2=(I - H_2(H_2^HH_2)^{-1}H_2^H)H_2\]
\[=H_2 - H_2(H_2^HH_2)^{-1}(H_2^HH_2)\]
\[=H_2 - H_2\]
\[=0_N\]

However, if H2 really is a 2x2 matrix and its columns are independent, then it spans the full 2-dimensional subspace and it is impossible to remove the interference this way (i.e. Q = IN).

Therefore, you need to provide some more information in order to cancel the interference. For example, if you know there is exactly one signal and exactly one interference, it may be possible to make this work. Otherwise, you need to design the transmitter more specifically, or preferably use more receive antennas (since this will increase the dimension of your observation space).

Your second idea (i.e. using Q-1) is not possible because Q-1 generally will not exist. A good short explanation for this is given here: [link].
 
Last edited:
Thanks for your respond!
I just figured out that I made a mistake describing the problem;
Actually, the H2 Matrix should be 2x1 Matrix. I made a draw that may give a better representation of my problem:
Systeme de transmission.JPG

and the system should be:
Equation.JPG

can we still do the subspace projection even if the H2 Matrix is 2X1 ?

thanks
 

Ah yes, then this will work. As long as H2 is a "tall" matrix (i.e. more rows than columns), then we have a chance to use a projection.

However, it is still true that Q-1 will not generally exist. This doesn't really matter because you will be able to achieve what you're trying to achieve anyway.
 
Hello,

I tried to do the subspace projection and to use Q=I-P but the resulting matrix Q is always a null matrix!
I tried to use more receivers to increase the dimensions of the H matrix but the result is always the same (Q is null all the time).

Do you know any other ideas that I can use to cancel the impulsive noise matrix ?

I am really trapped and desperate for help!
 

Are you simulating this in Matlab? (Or any other programming language?) If you upload your code, I'll see if I can modify it for you.
 

Actually I am using Matlab.

The (.)H denotes the conjugate transpose (Hermitian ) matrix of H is H'

Here is my matlab code:


Code:
H=  [randn(2,1 ) + j*randn(2,1 )]

H =

  -0.5288 + 1.4203i
  -0.0406 + 1.2239i

P=H*(H'*H)^-1*H'

P =

   0.6050 + 0.0000i   0.4635 + 0.1553i
   0.4635 - 0.1553i   0.3950 - 0.0000i

I=[1,0;0,1]

I =

     1     0
     0     1
Q=I-P


 0.3950 + 0.0000i  -0.4635 - 0.1553i
  -0.4635 + 0.1553i   0.6050 + 0.0000i

Z=Q*H
 1.0e-15 *

  -0.1110 + 0.2984i
   0.0256 + 0.0971i
So the result is always different from zero!

Do you know why ?
 

I believe it may be some thing related to eps , realmax and realmin values that Matlab uses.

i Just found out that It may give very bad results . For example try to type

x=0.1+0.1+0.1
c=0.3-x
the result is -5.5511e-17 But it is obvious that 0.3-x should be equal to Zero.

But I don't know yet how to change those minimum values after which matlab should consider the variable as zero.
 

The numbers you are worrying about are less than 1e-15. That's less than 0.000000000000001. This is an extremely small number. Please bear in mind that your entire signal model is only an approximation of what will happen in the real world. Tiny rounding errors like this are completely insignificant in this context. However, in case you are interested, I have a few comments:

You are right that this is related to machine epsilon. If you want, you can read more about representable floating point numbers here: [link] and machine epsilon here: [link]. These can be very important considerations, but not for your simple example.

That being said, matrix inverses are particularly bad for numerical accuracy (and execution time). Therefore, people often try very hard to avoid using explicit matrix inverses (and there are many discussions about this online, for example here: [link]).

In Matlab, this generally means you should avoid using (.)-1 (or the equivalent inv() function) for matrices. Instead, you can use the matrix right divide (mrdivide(), a.k.a. "/") or matrix left divide (mldivide(), a.k.a. "\") operators:


Code Matlab M - [expand]
1
2
P = H/(H'*H)*H';   % Right divide
P = H*((H'*H)\H'); % Left divide



However, a more correct way to construct your projection matrix is to use the Moore-Penrose pseudoinverse, using Matlab's pinv() function. This uses an SVD (Singular Value Decompostion) which is very numerically stable, but quite slow:


Code Matlab M - [expand]
1
2
3
4
H = randn(2,1) + 1j*randn(2,1);
P = H*pinv(H);
Q = eye(2) - P;
Z = Q*H;

 
Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top