1 Star2 Stars3 Stars4 Stars5 Stars (10 votes, average: 4.20 out of 5)
Print Print

Transmit beamforming

by Krishna Sankar on April 13, 2009

In this post lets discuss a closed-loop transmit diversity scheme, where the transmitter has the knowledge of the channel. As there is a feedback path required from the receiver, to communicate the channel seen by the receiver to the transmitter, the scheme is called closed-loop transmit diversity scheme. Recall that the transmit diversity using Space Time Coding (Alamouti STBC) does not require the knowledge of the channel. In this post, we will restrict our discussion to a 2 transmit, 1 receive case. We will assume that the channel is a flat fading Rayleigh multipath channel and the modulation is BPSK.

Channel Model

1. We have 1 receive antennas and two transmit antenna.

2. The channel is flat fading – In simple terms, it means that the multipath channel has only one tap. So, the convolution operation reduces to a simple multiplication. For a more rigorous discussion on flat fading and frequency selective fading, may I urge you to review Chapter 15.3 Signal Time-Spreading from [DIGITAL COMMUNICATIONS: SKLAR]

3. The channel experienced by each receive antenna is randomly varying in time. For the receive antenna, each transmitted symbol gets multiplied by a randomly varying complex number . As the channel under consideration is a Rayleigh channel, the real and imaginary parts of are Gaussian distributed having mean and variance .

4. The channel experience by each transmit antenna to receive antenna is independent from the channel experienced by other transmit antennas.

5. On each receive antenna, the noise has the Gaussian probability density function with

with and .

6. At each transmit antenna, the channel is known.

Figure: 2 transmit 1 receive beam steering

Transmit Beamforming

On the receive antenna, the received signal is,


is the received symbol,
is the channel on the transmit antenna,
is the transmitted symbol and
is the noise on the receive antenna.

When transmit beamforming is applied, we multiply the symbol from each transmit antenna with a complex number corresponding to the inverse of the phase of the channel so as to ensure that the signals add constructively at the receiver. In this scenario, the received signal is,





In this case, the signal at the receiver is,


For equalization, we need to divide the received symbol with the new effective channel, i.e,


BER Simulation Model

The Matlab/Octave script performs the following

(a) Generate random binary sequence of +1′s and -1′s.

(b) Multiply the symbols with the beam steering matrics – corresponding to the phase of the channel

(c) Perform equalization at the receiver

(d) Perform hard decision decoding and count the bit errors

(e) Repeat for multiple values of and plot the simulation and theoretical results.

Click here to download Matlab/Octave script for simulting BER for BPSK in flat fading Rayleigh channel with and without beamforming

Figure: BER plot for 2 transmit 1 receive beamforming for BPSK in Rayleigh channel


1. Sending the same information on multiple transmit antenna does not provide diversity gain. Intuituvely, this is due to the fact that the effective channel in a 2 transmit antenna case is again a Rayleigh channel; hence the BER performance is identical to 1 transmit 1 receive Rayleigh channel case.

2. If the transmit symbols are multiplied by a complex phase to ensure that the phases align at the receiver, there is diversity gain. However, the BER performance seems to be slighly poorer than the 1 transmit 2 receive MRC case. I guess, the noise is scaled by in the case of transmit beamforming, whereas the noise scaling is different in the case of Maximal Ratio Combining. I need to study bit more for a precise answer.


[DIG-COMM-BARRY-LEE-MESSERSCHMITT] Digital Communication: Third Edition, by John R. Barry, Edward A. Lee, David G. Messerschmitt

D id you like this article? Make sure that you do not miss a new article by subscribing to RSS feed OR subscribing to e-mail newsletter. Note: Subscribing via e-mail entitles you to download the free e-Book on BER of BPSK/QPSK/16QAM/16PSK in AWGN.

{ 68 comments… read them below or add one }

Jenkin Winston January 9, 2015 at 9:59 am


Need help in simulating MIMO channel in Angular form given in ” Fundamentals of Wireless Communication.” by David Tse and Pramod. (equation 7.46)


Shwetha January 7, 2015 at 12:05 pm

Hello sir,
can u please provide matlab code for MIMO-OFDM using co-operative diversity


Terence June 27, 2014 at 1:22 pm

I am regular visitor, Һow are уou everybody? This article posted at this wweb paage іs truly ɡood.


kiranmayi April 3, 2013 at 12:12 pm

i am trying to generate Grassmanian beam formingfor this.
can you suggest how to do this same procedure with grassmanian beam forming?


Krishna Sankar April 5, 2013 at 5:59 am

@kiranmayi: Sorry, am not familiar with Grassmanian beamforming


Ahmed October 19, 2012 at 3:46 pm


can you equally send me the script of the beamforming to my email (ahmedamate@yahoo.com). interested in seeing the flow.

thank you


Krishna Sankar October 20, 2012 at 6:08 am

@Ahmed: The link to the simulation model is provided in the post.


ahmad October 18, 2012 at 1:54 am

hi Krishna

i wanna simulated 2*2 channel matrix, i use this code:

correct? or i should use sqrt(2)?


Krishna Sankar October 18, 2012 at 5:31 am

@ahmad: i reckon 1/sqrt(2) suffice.


Tarun Jai April 24, 2012 at 11:59 pm

Hi Krishna,

I am trying to do Transmit Beamforming for a 2×2 case (2 transmit and 2 receive).

So how will the received signal be?? Will it be something like this

[y1 ;y2]=[h11 h12;21 h22]*[s1;s2]+noise ??


Krishna Sankar April 26, 2012 at 5:45 am

@Tarun: The system model remains the same. If we do SVD beamforming, typically premultiply the transmit signal to ensure that the two streams does not interfere with each other …


azhar January 16, 2013 at 8:50 pm

thanks a lot mate
i want your help. I want to select a dissertation” Implementing adaptive array processing in MATLAB” means simulation in matlab. it easy or difficult do u have any model in matlab about it


Krishna Sankar January 17, 2013 at 6:33 am

@azhar: sorry, i do not have a model for that


linkin8834 March 29, 2012 at 7:50 am

I’m wondering in practice how to cancel the phasor at the transmitter simultaneously even if we know the channel phase terms to all the receiver antennas. Obviously at any time instant, you’ve got only one data at the transmitter but you want to cancel each phasor out at each receiving link.


Krishna Sankar March 30, 2012 at 5:39 am

@linkin8834: we can multiply the same data with different phasors, dont we?


flz October 22, 2011 at 7:53 am

In “y1 = sum(h.*sr,1) + 10^(-Eb_N0_dB(ii)/20)*n; ” why use ” 10^(-Eb_N0_dB(ii)/20)*n; ” not “10^(-Eb_N0_dB(ii)/10)*n; ” ?


Krishna Sankar October 30, 2011 at 7:30 pm

@flz: the noise term n is a voltage term.


Osama April 4, 2010 at 11:24 pm

I just want to ask why the informed 2×1 coincides with the 1×2 system regarding the BER? As we know we have ‘Array Gain’ in the latter scenario and we don’t have it in the former one.
Does this have to do with Eb/No instead of SNR?


Krishna Sankar April 5, 2010 at 4:24 am

@Osama: We have an array in the transmitter and at the transmitter we know the channel, dont we? We can use that information to get the performance gains


Raja March 3, 2010 at 10:42 am

Hi krishna,
this is raja, i am doing research in the area of transmit beamforming by using SVD and i have use the rayleigh channel and MRC at the receiver…here mainly i concentrate on using different modulatin BPSK and 16-QAM and got the graph for BER vs SNR……i dont know how to derive the equations for BER calculation…..can u help me please…….i am waiting for ur reply plz…….


Krishna Sankar March 30, 2010 at 4:36 am

@Raja: Where you able to get the simulation models up?


seynabou diene February 25, 2010 at 7:55 am

will you please email me the matlab codes to simulate the average throughput for a multibeam system compared with a single beam system


Krishna Sankar March 31, 2010 at 5:10 am

@seynabou diene: Sorry, did not understand multi-beam vs single-beam. Is it multi-user vs single-user?


Shakeel December 26, 2009 at 6:51 pm

Hi Raja

Can you email me the modified transmit beamforming code.

My email is shakeelj2k at yahoo dot com


saad December 23, 2009 at 11:24 pm

Hi Raja
will you please email me the script which you discussed in your post for beamforming my email sr2923 at gmail.com

grateful to you


Paresh December 7, 2009 at 1:04 am

Can anyone help me in knowing what is meant by transmit and receive chain in Matlab and what are the blocks involved in this ?


Krishna Sankar December 7, 2009 at 5:32 am

@Paresh: Well… transmit chain is the transmitter which sends out information which is unknown to the transmitter. The receiver chain tries to extract these bits based on what it observed. :)


victor October 19, 2009 at 5:50 pm

Hi, I love your blog very much, and i have learned a lot from it.

One question, for the beamforming, i was wondering when we need to multiply the steering vector?

is it the case of beamforming at both transmitter and reciever?



Krishna Sankar October 27, 2009 at 5:12 am

@victor: Typically, we multiply the beamsteering coefficients at the transmitter.


victor November 29, 2009 at 9:21 pm

Thanks for your reply.

The beamsteering coefficients in this case is w = exp(conj(h)), am i right?

Does it mean that when multiplying this coeffcient, we can cancel the effect due to Rayleigh Channel and extract the signal out directly without using any equilizer?



Krishna Sankar December 7, 2009 at 4:54 am

@victor: My replies
1) Yes
2) The multiplication ensures that there will be no phase reversals. However, you might want to use equalizers to take care of amplitude variations especially when QAM modulation is employed.


lee waen August 19, 2009 at 4:36 pm

i think the outage probability and BER will be equivalent of transmit beamforming and receive beamforming, when path loss and number of antennas are same at tranmit antennas in tranmit beamforing and receive antennas at receive beamforming. so final equations should be the same theoriticaly like MRC!


Krishna Sankar August 22, 2009 at 4:59 am

@lee waen: By receive beamforming, I think you meant Maximal Ratio Combining, correct?
Mathematically, there is a subtle difference between the transmit beamforming and receive MRC, though the end result is close. (as seen in the figure, BER with beamforming is very near to the performance obtained by MRC case).
Can you please point me to a reference for the statements which you have made.


lee waen August 25, 2009 at 6:22 pm

yes, receving beamforming meant MRC.
Actually i think MRC and transmit beamforming are equal in mathematically with the reference of this book, which is iam going to mail you on ur id, this have a proof too.


Krishna Sankar September 7, 2009 at 4:55 am

@lee waen: Thanks for the email.
May I point out a subtle difference between the beamforming mentioned in this paper,
compared to the discussion in this post.
In this paper, the pre-coding matrix at the transmitter is the conjugate of the channel i.e w = h^H.
In this post, I have assumed that the pre-coding matrix is the phase of the conjugate of the channel. i.e w = exp(conj(h))

Quite likely this is the reason for the difference in performance. Hope you agree. Please share your thoughts.


karanth August 18, 2009 at 11:47 pm

Hi, I think somehow only half the noise power gets added to the BPSK symbols in your code. If you do QPSK instead of BPSK the code would now hold good , since for both QPSK and BPSK the BER is the same. but in this code for BPSK , i guess the adding of noise is incorrect. what are your thoughts on this ?


Krishna Sankar August 19, 2009 at 5:52 am

@karanth: I think your statement is incorrect. Recall that for BPSK, the noise only on the real arm affects the reception. Hope the post on BER for BPSK in AWGN helps. http://www.dsplog.com/2007/08/05/bit-error-probability-for-bpsk-modulation/


karanth August 19, 2009 at 11:51 am

Hi thanks for the reply. I am suspecting the code for this reason: say we dont scale by sqrt(Nt) for each transmit chain, then the system is equivalent to the MRC case and the BER should be same as in MRC. I find that without power scaling in this code, the 2×1 MRT performs better than 1×2 …which cant be possible please check it.


Krishna Sankar August 22, 2009 at 4:55 am

@karanth: The scaling by 1/sqrt(nTx) is to make the total power radiated from all the transmit antennas to one. If we do not do that, then its not a fair comparison with MRC case. Agree?
Additional comments:
“say we dont scale by sqrt(Nt) for each transmit chain, then the system is equivalent to the MRC case and the BER should be same as in MRC.”
[krishna] Incorrect. With the MRC case, the SNR on each receive chain is |h_i|^2Eb/N0. With beamforming case, the SNR is (|h1|+|h2|)^2*1/2*Eb/N0. Both are not mathematically equivalent.


karanth August 28, 2009 at 3:53 pm

If you work out the resulting average SNR gain (post processing gain) for both MRT and MRC, they are the same if there is no power/amplitude scaling. Therby the BERs should be same.

This should be quite intuitive since we have equal power transmitted or received in both cases for same number of antennas either at Tx end or Rx end.

However, in your case, if you limit transmit power for MRT then the gains differ.

Lakshmana Babu August 8, 2009 at 8:19 am

Hi krishna,
I am doing project based on paper “A New Beamforming Structure Based on Transmit-MRC for Closed-Loop MIMO Systems” by Seok-Hwan Park, Heunchul Lee, Sang-Rim Lee, and Inkyu Lee, Senior Member, IEEE,Can you please send me reference matlab code for svd beamforming.


Krishna Sankar August 11, 2009 at 4:40 am

@Lakshmana: Sorry, I have not yet posted articles on SVD based beamforming. Hope to do so in the near future.


iiuniveadds July 29, 2009 at 11:21 am

Hey! Your blog is very nice.
Visit my blog now..
I forward ur blog to all of my friendss…
My blog is about my creativity .
My hobbies are writing quotations of types Success,..
Include all my hobbies in my blog..
Visit now and enjoy my creativity . please leave a comment .
If u enter my blog you can see the web design sample,free downlaod,online money,..
How can activate ads in my blog? Please tell.


Marcus May 1, 2009 at 2:42 pm

Hi, Krishna

For 2×1 with no beamforming. What algorith did you use to feed the input in e.g. Alamouti, or Spatial multipexing or else?


Krishna Pillai May 12, 2009 at 4:55 am

@Marcus: I just send the same information on both the antenna, and that gives the same results as sending on only one antenna.


UP April 26, 2009 at 11:14 pm

Also, could you upload the modified script too, or is this script the modified one?


Krishna Pillai April 30, 2009 at 5:24 am

@UP: The script is the latest one.


UP April 26, 2009 at 11:12 pm

Hi. Could you please refer to to some basic tutorial on transmit beamforming ?


Krishna Pillai April 30, 2009 at 5:24 am

@UP: I was hoping that this post is indeed a basic introduction to transmit beamforming, aint it? ;)


susanti April 24, 2009 at 9:07 am

hi Krishna
can u tell me the formula to find weighting or beamforming vektor.

please send me the modified script.my email add is riris_novie@yahoo.com

thx a lot.


Krishna Pillai April 30, 2009 at 5:14 am

@susanti: Given that we know the channel at the transmitter, the weighting factor just computes the conjugate of the phase of the channel. For eg, if the channel is [h1, h2] the weighting factor used at the transmitter is [conj(angle(h1) angle(h2)].

The script present in the code is the latest one. There is only minor modifications for clarity. Good luck.


susanti May 8, 2009 at 12:37 pm

thank khrisna,.

if the weighting factor just compute the conjugate of the phase of the channel, how about other method to get weighting factor such a LMS,RLS,Eigen-beam?

would you explain the difference use?


Krishna Pillai May 12, 2009 at 5:26 am

@susanti: Well, amo not familiar with the schemes which you were proposing. Can you please provide me a reference.


Raja April 14, 2009 at 7:47 pm

Hi Krishna,

Tx beamforming should be better than MRC. The manner you apply the beamforming vector is not right. If you give me your email address I can mail you the modified script.




Alvina April 15, 2009 at 6:18 pm

can u plz send me the modified script as well.
my email add is alvina_23@yahoo.co.uk
thnx a lot.


Krishna Pillai April 18, 2009 at 8:16 am

@Alvina: As you may have seen from the discussion with Mr. Raja, there is no modification required in the script. The plots and the script are correct. However, as Raja has suggested, for clarity, I have defined a variable called hEff in the script.


Paul April 16, 2009 at 12:01 am

Could you please send the modified script to me as well. I need to work on this area too.

My email is mazdaspring@hotmail.com


Krishna Pillai April 18, 2009 at 7:52 am

@Paul: As you may have seen from the discussion with Mr. Raja, there is no modification required in the script. The plots and the script are correct. However, as Raja has suggested, for clarity, I have defined a variable called hEff in the script.


Krishna Pillai April 16, 2009 at 5:56 am

@Raja: Can you please explain the correct way of applying beamforming. To benefit other readers of this post, may I request you to reply to this comment itself. In anycase, you wish to contact me over email, please find my details in http://www.dsplog.com/contact-us/


Raja April 16, 2009 at 11:24 am

Hi Krishna,

I will send you the modified script to your email. The script might be a bit slow.

The major things to look for ar the following:

1. y = h*w*s = heff*s
—> w is the beam forming vector
—> s are symbols to be transmitted
—> heff is the effective channel
after beamforming

2. During Equalization
s = y./heff




Alvina April 16, 2009 at 7:56 pm

hi Raja
can u plz send me the script as well.my email add is alvina_23@yahoo.co.uk
thhx a lot.


Krishna Pillai April 17, 2009 at 5:45 am

@Raja: Thanks for mailing the code. I looked at the code and ran the simulations. My observation is that, you are seeing a better performance for 2×1 beamforming case – because the scaling of transmit power by 1/sqrt(nTx) is not performed for the beamforming case.

Further, scaling by 1/sqrt(nTx) is required, as we are sending the same information multiplied by the phase on both the antennas.

I mailed you the script with minor updations for your review. Please share your feedback.

Thanks again.


Raja April 17, 2009 at 12:50 pm

Hi Krishna,

You are right regarding the scaling and the result. I would also like to point out that heff is a 1×1 matrix not a 1×2 matrix.It does not change the result but i wanted to point it to you for correctness.

I guess beamforming with 1 rx-antenna provides the same performance with MRC-rx diversity if not poorer. A good comparison would be to compare between beamforming and alamouti(both with or without rx diversity).



Senay April 13, 2009 at 11:26 pm

Hello Krishna,

First off let me thank you for posting relevant topics on signal processing for wireless comm, I visit this website quite often and I find the info useful.

I believe MRC outperforms Tx beamforming because there is a 3 dB penalty for Tx beamforming. For 2×1 transmit beamforming the signal energy is halved at the transmitter in order to constrain the output Tx power to be the same as in the MRC case for comparison.



Krishna Pillai April 16, 2009 at 5:51 am

@Senay: Well, in this simulations, I do not think its the 3dB penality in transmit power which is coming into play. However, am unable to pinpoint the cause too.


Krishna Pillai April 18, 2009 at 8:05 am

@Raja: Thanks for confirming the result. For notational clarity, I just modified the script to define the variable hEff. However, as we agree, the results still remain the same.

Yes, 2tx-1rx beamforming seems to be almost comparable (slightly poorer) than 1tx-2rx MRC.

As we had seen from the results with 2transmit-1receive Alamouti STBC, http://www.dsplog.com/2008/10/16/alamouti-stbc/, the Alamouti STBC performance is around 3dB poorer than the 1transmit-2receive MRC. So the 2transmit-1receive beamforming is better than the 2transmit-1receive alamouti by around 2.7dB. Agree?


Raja April 21, 2009 at 2:01 pm

Hi Krishna,

You are right regarding the performance between beamforming(with Channel Knowledge) and Alamouti.

Best Regards,



Krishna Sankar September 7, 2009 at 5:16 am

@karanth: To have a fair comparison, shouldn’t we have similar average transmit power in both the cases?


Leave a Comment

Previous post:

Next post: