In this video, we'll discuss the capacity of multiple input, multiple output channel. We'll assume that the channel state information is known at the transmitter. Therefore, we can use one important algorithm known as water filling. To start with, let us look into the capacity of fixed MIMO channel with transmit CSI. With transmit CSI, we use the singular value decomposition technique to maximize the MIMO channel capacity. SVD can be used to decompose any matrix of size N_R x N_T. N_R and N_T need not be equal. In our case, let us write the channel matrix H, which is of dimension N_R x N_T, as U summation V, where U is of dimension N_R x N_R, summation is of dimension N_R x N_T, and V, which is of dimension N_T x N_T. If you have this diagonal matrix, we call it Sigma, let's say, Sigma contains ordered singular values as follows. Sigma_1 square is always greater or equal to Sigma_2 square, and it is always greater than sum Sigma_n min square greater than or equal to 0. Where n_min is nothing but the minimum of the N_T, N_R. At the transmitter, what we're doing is, we're multiplying the transmit signal X tilde to a beamforming vector V. So, we have transmit symbol X tilde, we're doing a transmit beamforming by multiplying it with V vector, and therefore we are getting a final transmit vector, that actual transmit signal from the antennas given by X. Now at the receiver, what we are going to do is, we're going to do a receive beamforming by multiplying with W^Hermitian, where W, in this case is equal to U. Now after substituting the value
of y from the earlier expression, what we are doing to get is because we know U^Hermitian, U and V^Hermitian, V's identity, this is coming from the SVD, singular value decomposition. After substituting value of this as identity matrix, this is also identity matrix, what we're left with only is the Sigma matrix, which is a diagonal matrix, if you remember. Now we also substitute the value of U^Hermitian NH and tilde. If you want to calculate the covariance matrix of n tilde, we can use the formula as, R_n is equal to expectation n into n Hermitian n tilde into n tilde Hermitian. After substituting the value of n tilde as U^Hermitian n, what we're getting is Sigma n square into I_N_R. Therefore, what we are left with, if you see we have received signal R, if I just want to write in a form of vector R into N_R. This is a diagonal matrix with elements Sigma_1, Sigma_2, Sigma n_min square, and rest all are zero. We have x_1 tilde to x_N_T tilde. Plus n_1 tilde to n tilde N_R. This is our expression that we have. What important thing we want to see here is, we can see R_1 is equal to Sigma_1 square x_1 tilde plus n_1 tilde. R_2 is equal to Sigma_2 square x_2 tilde plus N_2 tilde. All the expressions are transferred in parallel, right. If you see, they're all decoupled. If I can say, this is the first channel, similarly the second channel, third channel, so all are decoupled. There's no coupling between the different channels. I can say that now I'm able to transmit n_min number of symbols in parallel. If we can transmit n_min Number of symbols in parallel. Now, the capacity of each single output channel is given by C_i which is the log base 2, 1 plus, we are transmitting with each channel, Sigma_i square upon Sigma_n square noise power. P_i is the transmit power. Therefore, overall capacity will be i equal to 1 to n_min log base 2 1 plus P_i Sigma_n square upon Sigma_n square. Therefore, the overall capacity that we're achieving using the SVD technique is given by this expression. Now, this is the overall capacity. Now we need to calculate what is the value of P_i that should be allocated to different subchannels? We have n_min number of subchannels and we need to allocate total power to this different n_min number of subchannels. Let us assume one criteria where we're controlling the transmit power according to the channel. That is, if the channel is bad, assign more power and vice versa. Overall, this will remain kind of constant. Because if suppose, Sigma_n square is smaller, I'm assigning P_i as higher, and vice versa. This is nothing but we call this literature as channel inversion. Instead of assigning more power to the poor channel and vice versa, we're now going to assign the power based on something called water-filling algorithm. For that, the aim is to maximize the object to which is the overall capacity. This is objective function, which is overall capacity subject to the power constraint that we have. We know the sum of all the powers will always be less than sum total power, let's say, P_T, this is a constraint. Now, we need to solve this power allocation problem using something called Lagrangian technique. What exactly Lagrangian technique tells us is, we can write the function Lagrangian function as, the objective minus Lagrangian multiplier. This Lambda is a Lagrangian multiplier into the constraint. This taken to the LHS and we are getting P just. Sum objective minus Lambda into the constraint. Now simplifying, what we can do is, this is the expression that we had here what I'm going to do is, I'm just rewriting this expression as follows, with P_i and j not equal to i. I've just substituted j equal to 1 to N_T as, j not equal to i and j equal to i. This J equal to i is this, j not equal to this, and this is a second term that we have here. Now, I want to differentiate it with respect to P_i and equate it to 0. I do it, what I'm getting is, now after differentiating, the expression of P_i is coming out to be 1 upon Lambda minus Sigma_n square upon Sigma_i square. Using this formula, I'm going to assign now the powers to different subchannels. So what I'm saying is if this value, this vector is positive because I know power cannot be negative. That's why I'm adding a new constraint here. Additional constraint, that if this value is greater than 0, then I'm assigning this power, P_i to the i channel. This is negative, and I'm assigning a power 0 because power cannot be 0. Suppose, let's say, it so happens that this term is greater than this term, then P_i is coming out to be negative. In that case, if P_i is coming out to negative, in that case I'm assigning it to be 0. Negative is replaced with 0. If you consider plus means x, if it is minus, it is 0. Let us look into this once, using this example. Let's say we have this. We also call this as water filling algorithm. If you see this, let us have this expression given by Sigma_n square upon Sigma_n square, Sigma_n square upon Sigma_2 square. This is Sigma_n square by Sigma_3 square, and Sigma_n square, Sigma_N_T square. We have taken an ordered singular value representation, where I said Sigma_1 square is always greater than Sigma_2 square, and so on. Therefore, because Sigma_1 square is greater, Sigma_n square upon Sigma_1 square will be smaller than this Sigma_n square upon Sigma_N_T, and they'll be following this order for this example. If I have this value and if I represent this dotted line, then what I'm having is this dotted line is 1 upon Lambda. Let's say this red line is 1 upon Lambda, then the remaining, water we have is nothing but 1 minus Sigma_n square by Sigma_1 square. This one is 1 by Lambda minus Sigma_n square upon Sigma_2 square. This is 1 by Lambda minus Sigma_n square upon Sigma_3 square. Let's say for some case, this is coming out to be negative because we can see 1 by Lambda is this, but Sigma_n square upon Sigma_N_T square is this. What is happening? This term is coming out to be minus. To here, we are not assigning any power, but we're assigning power of this level. That's why we can say this is nothing but the water level or power level for these subchannels. I can say this is the water level of this channel. Water level of this subchannel so that site is called water filling algorithm. Here, because my block is any way higher than the water level, I'm not assigning any power there. Whenever I have my block, this block is lower than the water level. In that case, I can assign power there. Therefore, this is known as water filling algorithm or solution. How is it working? What exactly is happening? How it works, it assigns higher power to the channel having higher value of Sigma_i. Power is proportional to Sigma_i. This is opposite to the case when we are taking channel inversion scenario, where we are assigning lower power to better channel, and vice versa. So water filling is transmitting more power when channel is good and vice versa. We had these kind of multiple subchannels. Our aim is to maximize the capacity of all this, like we say, which is nothing more than sum of the capacity achieved from all the subchannels. Now, let us look into some extreme cases when we have low SNR. When we have low SNR means Sigma_n square is very, very greater than 1. In that case, what will happen? We'll assign all the power only to one subchannel. P_1 is assigned P, and rest all will be going to 0. Therefore, if we can see the power allocation is very important in the low SNR regime than in the high SNR regime. High SNR is fine. In high SNR, we can always do equal power. When we say equal power, just assign equal power to all the antennas. This gives me near optimal result. But at low SNR, we need to intelligently apply power allocation formula so as to maximize their overall capacity of the system. Therefore, we say at low SNR, we need to use something called water filling algorithm, that will only assign this kind of thing. That will tell us in case of low SNR, we need to assign higher power to one of the channel. Because if you're assigning all the power to all the channels, then it may happen that none of the channel is key leading us to any data transfers. All the channels are having high probability of error. With water filling algorithm, it tells us that how many streams should be transmitted and with how much powers. It is not like all on when parallel channels we can transmit. No, it depends on the water filling reserve that whenever 1 by Lambda is greater than Sigma_n square upon Sigma_i square, then only we are transmitting, otherwise we're not transmitting. It also tells us how much power with which we can transmit in that particular subchannels. If we see the overall diagram, what we're doing is at the transmitter, we are doing some kind of water filling operation on the symbols, rest all anyway, we have 0. Then we're doing a transmit beamforming. Then we are transmitting x. Then we have our channel H. Noise is getting added at the receiver. This is the receiver part. Then at the receiver we are doing receive beamforming. Then we're getting these kind of symbols. Some of them will directly be 0, some of them will be having some positive results. In this video, we saw that when telling information is available at the transmitter, we use SVD to be informed at the transmitter and receiver. Power is assigned to different subchannels based on the water filling algorithm. In water filling algorithm, we assign more power to the subchannel with high channel gain. We saw that at high SNR, equal power is optimal, whereas at low SNR, water filling should always be used.