In the recent past, we have discussed three receive diversity schemes – Selection combining, Equal Gain Combining and Maximal Ratio Combining. All the three approaches used the antenna array at the receiver to improve the demodulation performance, albeit with different levels of complexity. Time to move on to a transmit diversity scheme where the information is spread across multiple antennas at the transmitter. In this post, lets discuss a popular transmit diversity scheme called Alamouti Space Time Block Coding (STBC). For the discussion, we will assume that the channel is a flat fading Rayleigh multipath channel and the modulation is BPSK.
Alamouti STBC
A simple Space Time Code, suggested by Mr. Siavash M Alamouti in his landmark October 1998 paper – A Simple Transmit Diversity Technique for Wireless Communication, offers a simple method for achieving spatial diversity with two transmit antennas. The scheme is as follows:
1. Consider that we have a transmission sequence, for example
2. In normal transmission, we will be sending in the first time slot,
in the second time slot,
and so on.
3. However, Alamouti suggested that we group the symbols into groups of two. In the first time slot, send and
from the first and second antenna. In second time slot send
and
from the first and second antenna. In the third time slot send
and
from the first and second antenna.In fourth time slot, send
and
from the first and second antenna and so on.
4. Notice that though we are grouping two symbols, we still need two time slots to send two symbols. Hence, there is no change in the data rate.
5. This forms the simple explanation of the transmission scheme with Alamouti Space Time Block coding.

Figure: 2-Transmit, 1-Receive Alamouti STBC coding
Other Assumptions
1. 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]
2. The channel experience by each transmit antenna is independent from the channel experienced by other transmit antennas.
3. For the transmit 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 experienced between each transmit to the receive antenna is randomly varying in time. However, the channel is assumed to remain constant over two time slots.
5. On the receive antenna, the noise has the Gaussian probability density function with
with
and
.
7. The channel is known at the receiver.
Receiver with Alamouti STBC
In the first time slot, the received signal is,
.
In the second time slot, the received signal is,
.
where
,
is the received symbol on the first and second time slot respectively,
is the channel from
transmit antenna to receive antenna,
is the channel from
transmit antenna to receive antenna,
,
are the transmitted symbols and
is the noise on
time slots.
Since the two noise terms are independent and identically distributed,
.
For convenience, the above equation can be represented in matrix notation as follows:
.
Let us define . To solve for
, we know that we need to find the inverse of
.
We know, for a general m x n matrix, the pseudo inverse is defined as,
.
The term,
. Since this is a digonal matrix, the inverse is just the inverse of the diagonal elements, i.e
.
The estimate of the transmitted symbol is,
.
If you compare the above equation with the estimated symbol following equalization in Maximal Ratio Combining, you can see that the equations are identical.
BER with Almouti STBC
Since the estimate of the transmitted symbol with the Alamouti STBC scheme is identical to that obtained from MRC, the BER with above described Alamouti scheme should be same as that for MRC. However, there is a small catch.
With Alamouti STBC, we are transmitting from two antenna’s. Hence the total transmit power in the Alamouti scheme is twice that of that used in MRC. To make the comparison fair, we need to make the total trannsmit power from two antennas in STBC case to be equal to that of power transmitted from a single antenna in the MRC case. With this scaling, we can see that BER performance of 2Tx, 1Rx Alamouti STBC case has a roughly 3dB poorer performance that 1Tx, 2Rx MRC case.
From the post on Maximal Ratio Combining, the bit error rate for BPSK modulation in Rayleigh channel with 1 transmit, 2 receive case is,
, where
.
With Alamouti 2 transmit antenna, 1 receive antenna STBC case,
and Bit Error Rate is
.
Key points
The fact that is a diagonal matrix ensured the following:
1. There is no cross talk between ,
after the equalizer.
2. The noise term is still white.
.
Simulation Model
The Matlab/Octave script performs the following
(a) Generate random binary sequence of +1’s and -1’s.
(b) Group them into pair of two symbols
(c) Code it per the Alamouti Space Time code, multiply the symbols with the channel and then add white Gaussian noise.
(d) Equalize the received symbols
(e) Perform hard decision decoding and count the bit errors
(f) Repeat for multiple values of and plot the simulation and theoretical results.
Click here to download Matlab/Octave script for simulating BER for 2 transmit, 1 receive Alamouti STBC coding for BPSK modulation in Rayleigh fading channel

Figure: BER plot for BPSK in Rayleigh channel with 2 Transmit and 1 Receive Alamouti STBC
Observations
Compared to the BER plot for nTx=1, nRx=2 Maximal ratio combining, we can see the Alamouti Space Time Block Coding has around 3dB poorer performance.
Reference
[DIG-COMM-BARRY-LEE-MESSERSCHMITT] Digital Communication: Third Edition, by John R. Barry, Edward A. Lee, David G. Messerschmitt
A Simple Transmit Diversity Technique for Wireless Communication Siavash M Alamouti, IEEE Journal on selected areas in Communication, Vol 16, No, 8, October 1998
Related posts
- Alamouti STBC with 2 receive antenna
- MIMO with Zero Forcing equalizer
- Transmit beamforming
- MIMO with Zero Forcing Successive Interference Cancellation equalizer
- Equal Gain Combining (EGC)
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.

(11 votes, average: 4.45 out of 5)
{ 1 trackback }
{ 130 comments… read them below or add one }
well explained.
@Avlina: Thanks, glad it helped.
Excellent! Hope you can put more posts on MIMO.
thanks for t heinfo… I cant for posts on MIMO.
thanks for the info…. It has been quite helpful. I would like information pertaining to MIMO and associated channel capacity
@Honghai , @Mercy: Hope the recent post on 2×2 MIMO with Zero forcing equalisation (for BPSK in Rayleigh channel) helps.
URI: http://www.dsplog.com/2008/10/24/mimo-zero-forcing/
hi krishna,
need help to explain:
hEq(:,[2:2:end]) = kron(ones(1,N/2),[1;-1]).*flipud(reshape(h,2,N/2)); % [h1 h2 ... ; h2 -h1 ...]
hEq(1,:) = conj(hEq(1,:)); % [h1* h2* ... ; h2 -h1 .... ]
why is it not the same as in the derivation??
H= [h1 h2; h2* -h1*]
hi krishna.
sorry. pls ignore my earlier question. i think there is typo mistake in the notes:
should be:
H* = [h1* h2* ... ; h2 -h1* .... ]
in notes written:
H* = [h1* h2 ...; h2* -h1]
btw, i tried to implement this for QPSK (modify from your entry on BER QPSK in Rayleigh – but seems the curve is very weird.. forever error rate ~0.5). is there a different equalization method?
btw, thanks for all the update! they’re all very helpful. without this, i dont think i can start with my assignment at all
@ila: Can you please point to the line in the code where the error in the note is present?
Also, kindly do note that in the simulation model, to speed up simulation time, I have tried to use matrix operations as far as possible. For doing so, I may have played around with matrix dimensions (which might not be very intuitive). Hopefully the comments help.
Similar equalization should hold good for QPSK too. Try for a no-noise case, see whether you can recover the QPSK symbols accurately.
Hi krishna
can u tell plz why you h
hi Krishna
can you plz tell me why you have taken the conjugate of estimated received signal X. (after this sentences)
The estimate of the transmitted symbol is,
Hi
can u plz tell me why you have taken tne conjugate (* sign) over noise symbol n2 and n1 (after the sentences)
Since the two noise terms are independent and identically distributed,
@alvina: If you look at the system model equation, we took the conjugate of the second equation to enable us conveniently represent both the equation in matrix form.
So, when we solve for that equation, what we estimate is the conjugate of what we have transmitted.
For the noise term, we are finding the average noise power, which is the the E{n*n^H}.
hey Krishna
Do you have Alamouti 2×1, 2×2 STBC in 4QAM and 16QAM codes? I am having problems in combining the modulated 4qam and 16qam signals with channels.
@farie: No, I do not. However, may I suggest that debugging 4QAM, 16QAM cases should be reasonably easy. I think as a first step, you can try with
(a) Make all the channel coefficients unity
(b) No noise.
Once you are able to receive perfectly what was transmitted, then move on to add channel and noise.
Hope this helps.
Hi Krishna,
Could you explain what E{.} expectation operater for me please. What is it for? why do we have to find E{.}
Thank you
@Paul: The E{.} operator find the mean of a set of observations. The E{.} operator is used to show that mean of |n1}^2 corresponds to noise variance. The mean of n1*n2 = 0 as the noise is uncorrelated.
Thank you so much Krishna
hi,
i was informed that equalization like ZF and MMSE is only used when you expect the received signal is not orthogonal.
so, in the case of for Alamouti 2×2 MIMO (orthogonal), how do I modify the equalization matrix into 2 receiver for BPSK?
what’s the method to expand this to QPSK&QAM?
e.g. in the given Matlab code:
rx_Mod = kron(reshape(rx,2,N/2),ones(1,2));
rx_Mod(2,:) = conj(rx_Mod(2,:));
% forming the equalization matrix
hEq = zeros(2,N);
hEq(:,[1:2:end])=reshape(h,2,N/2);
hEq(:,[2:2:end]) = kron(ones(1,N/2),[1;-1]).*flipud(reshape(h,2,N/2));
hEq(1,:) = conj(hEq(1,:)); hEqPower = sum(hEq.*conj(hEq),1);
please help
@lia: Yes, when there is cross-coupling ZF and MMSE wont be optimal.
However, in the presence of Alamouti coding, the coding structure ensures that there is no cross-coupling. So ZF is optimal even in 2Tx 1Rx Alamouti case.
I would think that, to extend to 2Tx, 2Rx case one needs to write the received symbol equations for the second antenna in addition. The information from multiple rx antennas can be combined the MRC way (i think). I need to write the equations to confirm. Can you please try that. Please share your results.
Good luck.
Hello Krishna,
your explanation is very clear and really helped me a lot.
Thank you
@Rocco: Thanks
Can you explain what is IRC. In LTE there is mention of IRC.
@giri: Sorry. Studying LTE spec is in my to-do list for a while. Hope to do it soon.
hi krishna…
please suggest me code for Alamouti with OFDM…
@Suchitra: Please refer to the post on
http://www.dsplog.com/2008/10/16/alamouti-stbc/
@Suchitra: Please refer to the post on
http://www.dsplog.com/2008/10/16/alamouti-stbc/
Hi Krishna & others,
I’m afraid I’m still struggling with Alamouti 2×2.
Can someone pls help to show/point where I’m doing wrong in my current simulation (getting extremely high BER):
1) input data modified to Alamouti scheme
2) generate 4 paths (divided into 2 sets to ensure the channel remain constant for 2 timeslot at least at each antenna)
3) 2 independent AWGN
4a) combine path1&2 with signal & add noise 1.
4b) combine path 3&4 with signal & add noise2.
5) perform 2 separate channel equalization
to get 2 estimated transmitted data
6) perform MRC based on original channel in (2)
7) count error
please help.. running out of ideas
First you should try to duplicate the process (2×1) of equalization for the second receiving antenna and retrieving data using only the second antenna, you should obtain the same BER.
Then you can use MRC to obtain BER of 2×2 correctly, note that as stated before the equations for MRC and Alamouti equalization are the same so when after equalizating Alamouti at the second (or duplicated process) antenna applying MRC is reduced to add both of “yHat”
hi..can we combine OFDM with Alamouti forming STF code..i am not getting pls can u suggest code if possible
@Yes we can. However, I have not written posts on it. Just picked up a URL from googling
http://www.mk.tu-berlin.de/mitarbeiter/tub/lehrbeauftragte/intro_stc-sfc-coding
Hai..i am doing my M.Tech project on COSTBC can u send matlab code for flat rayleigh fading channel with QPSK modulation or suggest some useful sites regarding my project
@Murali: Hmm… I have not worked on COSTBC.
For BPSK modulation in flat Rayleigh channel, you may look up @
http://www.dsplog.com/2008/08/10/ber-bpsk-rayleigh-channel/
For QPSK in AWGN, you may look up @
http://www.dsplog.com/2007/11/06/symbol-error-rate-for-4-qam/
Hope this helps.
Hai krishna sir can u please send matlab programm for QOSTBC based on flat rayleigh fading channel with QPSK modulation
@Murali: Sorry, I have not worked on QOSTBC
Krishna: At first, good post.
Now, few questions: You wrote “For convineance, the above equation can be represented in matrix notation as follows:”..and this is followed by a matrix notation of the system response. I find that in such a matrix, the functionality of X* has been moved to H*. Although we are allowed to do such operations freely, in practise it seems to suggest that the channel reposnse during the second time slot is the complext conjugate of its own response in the first time slot – right? Don’t you think over a short interval of time such a generalization is rather too extreme?
In my view, transmitting X* during second time slot is going to be totally independant of channel reposnse during its transmission. So, convertibility between X* to H* is not going to be simple over such short time periods. May be over the long it’s possible…
Please feel free to critiqe my understanding
Thanks for you time,
DRAM
@DRAM: For STBC, we assume that the channel is same over two time slots. Given that we make the assumption, its just for mathematical notional convineance, we formulate the channel in matrix form by using H*. So, the fact that we are using H* in matrix notation does not mean that the channel H in first time slot became H* in the second time slot. Hope this helps.
great job krishna i hope you continue you’r
devolopment of alamouti……..
@SHMAA: Thanks. I wrote a follow up post on 2 transmit 2 receive alamouti STBC @
http://www.dsplog.com/2009/03/15/alamouti-stbc-2-receive-antenna/
hi krishna,
Thanks for your excellent work.
I am doing a work on MIMO-OFDM with Alamouti 2×1 code.Would you like to send me a matlab code for flat rayleigh fading channel with QPSK modulation?Furthermore,would you model it using the simulink toolbox and send me a *.mdl file?
Hoping your replay.
Thanks very much.
@hannah: The Matlab model provided in this post can be easily adapted to QPSK case. Good luck in your project.
hi krishna..do we need to divide the snr by 2 in the equation of bpsk to get qpsk curve in theoretical case or is it the same..or is it like only for high snr case only..im bit confused abot that can u pls explain it
@abubaker: Well, the symbol error rate for QPSK is around 3dB poorer than that for BPSK. However the BER performance is the same. Please refer to the following post for bit more details
http://www.dsplog.com/2008/07/08/compare-bpsk-qpsk-4pam-16qam-16psk-64qam-32psk/
hi..can u tel me what is the equation for probablity of error for correlated raylegh flat fading channel (with correlation factor )for mrc (1*2) and alamouti (2*1) using qpsk ..
@abubaker: Sorry, I have not studied the effect of channel correlation in MRC and alamouti. From a quick googling, found that the link http://www.comm.utoronto.ca/~rsadve/Notes/DiversityReceive.pdf discuss about correlation for MRC.
Please also do reply to the comment, if you find more pertinent literature.
hi krishna thanks for your reply..this is link..http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04109656..ieee paper with title “Symbol Error Probability for Space–Time Block Codes over Spatially Correlated Rayleigh Fading Channels” thsis gives the equations for alamouti scheme for all psks annd qams…
@abubaker: Thanks
one more thing the equation u have given the above link its wrong..they have small printing mistake so its better to look in this text book .R. Janaswamy, Radiowave Propagation and Smart Antennas for Wireless Communications.
Kluwer Academic Publishers, 2000.
Hi,Krishna Pillai,
would you help me Model the STBC-OFDM or DSTBC-OFDM system using the simulink toobox? Email:115473189@qq.com
Thank you!
@gly: Sorry, I do not have Simulink
Hi, Instead of hard decision coding, can u actually implement a Maximum likehood decoder for M-PSK encoding ? How do you think could that be implemented ?
@UP: Well, the brute force ML method is to find the minimum of error between received transmit constellation and receieved constellation. However, I think there is no advantge in doing the brute force ML as the hard decision decoding is also optimal, agree?
I was implementing the code with QPSK. Would everything other than the encoding (given below) be the same ?
ip = (2*(rand(1,N)>0.5)-1) + j*(2*(rand(1,N)>0.5)-1);
The decoder would also be modified accordingly.
I am not getting any gain over 1TX using QPSK. Pl. help! Thanks!
Hi ,
I’m here with one more doubt. I have a project on transmitter diversity. Can the alamouti scheme be applied to the UPLINK for CDMA systems– (where noise interference would be due to multiple users) ? Or it has to be at the base station ? I am having this conceptual doubt …
Sorry to have asked so many questions at one go..
Would be really grateful if you could help! Thanks!
@UP: Well, theoretically there is nothing stopping us from using Alamouti STBC in either uplink or downlink. In the past, I recall reading that Alamouti coding is done at the Base station (which has more computational power and more transmit atennas) and the subcriber stations (have the capability for doing demodulation).
@UP: Well, thats surprising. Are you scaling the transmit power accordingly?
Hi , Could you please tell me by what factor should I scale the transmit power ?
@UP: If you have two transmit antennas, it should be ensured that the sum power of the signals coming from both antennas should be equal to transmit power in the case of single antenna.
hi krishna..do we need to divide the snr by 2 in the equation of bpsk to get qpsk curve in theoretical case or is it the same..or is it like only for high snr case only..for finding the probablity of error for diversity schemes ..im bit confused about that can u pls tel that
hi krishna!!
i am working on cooperative communication systems…… can u help me in this regard???? if u have simulated cooperative mimo enviornment kindly info me.
the point that confuses me is that how we decide at the destination node to use which type of equalizer i-e LMS, DFE etc etc.
secondly do we combine signals before equalization or after that
regards
@sara: Sorry, I have not worked on co-operative communications. Anyhow, trying to answer the queries:
1/. Typically, the type of equalizer which is selected depends on the complexity considerations and the performance gain
2/, I think equalizer takes care of the job to effectively combine the signal resulting in minimal BER.
I already read the receive diversity blog, and I need to simulate alamouti 2X1 with channel correlation, how can I implement in the code because I only find the theoretical formula, I hope you can help me with this issue.
Regards
@R@juelo: Sorry, I have not tried modeling the channel correlation case.
@ Krishna and @Abubaker.
Can u please tell me how to modify alamouti to QPSK. I am gettin simulated BER 6 db higher than BPSK case. and also confused about theoritical values. Pl help!!!
@UP: Recalling the results from QPSK results in AWGN, the BER vs Eb/N0 curve is identical for both QPSK and BPSK. So, I do not see the reason for 6dB difference.
Hi,Krishna,would you help me coding a program about Maximum Likelihood Detection for Alamouti-STBC system? Under QPSK modulation condition,My program didn’t get perfect result,So I’d like to see your help.Thanks!
@gly: Sorry, due to time considerations, I would not have time to help you in the coding for QPSK systems. However you may use the post on Symbol Error Rate for QPSK in AWGN as a reference
http://www.dsplog.com/2007/11/06/symbol-error-rate-for-4-qam/
I would think that the Zero forcing equalizer discussed in this post is optimal (and gives the same performance as ML) for Alamouti STBC system. Hence, I think it should be reasonably simple to extend this post to QPSK systems.
plz krishna;
give me another one matlab code to find ber/snr for 1tx-1rx & 2tx-1rx(alamouti)
@SAEED: The 1 transmit 1 receive case is discussed in the post
http://www.dsplog.com/2008/08/10/ber-bpsk-rayleigh-channel/
plz help me…..i need a code mor alamouti stbc for BPSK (likelihood detection)
using only for loops or while loops…..without using reshape,rand functions……so can you help me please??
thannx alot…
can you help me where’s my error??
N = 10^6; % number of bits or symbols
Eb_N0_dB = [0:25]; % multiple Eb/N0 values
for ii = 1:length(Eb_N0_dB)
% Transmitter
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 0
h = 1/sqrt(2)*[randn(1,2) + j*randn(1,2)]; % Rayleigh channel
n = 1/sqrt(2)*[randn(1,2) + j*randn(1,2)]; % white gaussian noise, 0dB variance
S_c = [s(1) -conj(s(2)); s(2) conj(s(1))];
% Channel and noise Noise addition
y = sum(hMod.*S_c,1) + 10^(-Eb_N0_dB(ii)/20)*n;
S_S(1) = conj(h(1))*y(1)+h(2)*conj(y(2));
S_S(2) =conj(h(2))*y1-h(1)*conj(y(2));
%Reciever
mpower=h*conj(h); %equalization
H1 = S_S(1)/mpower;
H2 = S_S(2)/mpower;
decoded_S=real(y)>0;
% counting the errors
nErr(ii) = size(find([ip- decoded_S]),2);
PER=nErr(ii)/Eb_N0_dB;
plot(PER,N);
hold
end
simBer = nErr/N; % simulated ber
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
p = 1/2 – 1/2*(1+1./EbN0Lin).^(-1/2);
theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));
pAlamouti = 1/2 – 1/2*(1+2./EbN0Lin).^(-1/2);
theoryBerAlamouti_nTx2_nRx1 = pAlamouti.^2.*(1+2*(1-pAlamouti));
@fof: Sorry. But, what is the error which you are observing?
y = sum(hMod.*S_c,1) + 10^(-Eb_N0_dB(ii)/20)*n;
i also tried…
y=h*s+10^(-Eb_N0_dB);
but there’s also error….
Hi Krishna Pillai
first of all thank you for your post. it’s clearly and understandable
I’ve just studied a bit about transmit diversity scheme of Mr Alamouti. I just have some general questions.
1. Can you tell me why Alamouti scheme is introduced? in fact it is 3dB poorer than MRC.
2. If we use this scheme we’ll need double power in order to get the similiar BER curve like MRC. I just wonder why?
3. Could you suggest me a recevier which is with lower complexity than the MLSE
I know that i don’t have much time but hope you enjoy answering and discussing some questions. thanks in advance
Phan
@Phan Minh Hoang: My replies
1. Though it is 3dB poorer than MRC, Alamouti scheme provided a way where we can put the complexity of two transmit antennas at the base station side. If you recall, when Alamouti scheme came about circa 1998, there were not too many takers where a mobile device can have multiple receive antennas
2. Thats because the math plays out that way.
3. For MIMO communications, we can use equalizers like ZF, MMSE, successive interference cancellation etc. Please check http://www.dsplog.com/tag/mimo
Hope this helps.
dear
We haveMultiple InputMultiple Output (MIMO) digital communication system consisting of two transmit
antennas (NT = 2) and one receive antenna (NR = 1).
Alamouti space-time (ST) block code is defined by folowing NT × L code matrix
X = x1 −x
2
x2 x
1
where L is a codeword length.
• implement a digital modulator involving Alamouti STBC
• modulated signal passes frequency-flatMIMO fading channel with AWGN
• construct a decoder for given communication system
• compare the performance of given system with the reference (scalar, SISO) system — display BER
(or SER) curves in the same figure
thanks, chadi_lb@hotmail.com
@chadi: Good luck for your assignment.
but why do we use alamoutis STBC? what ist actually the advantage of if?
Exellent theory and simulation i found kit useful.
@Khattak: Glad to hear.
Hi krishna
I have seen your code and it was great. But I want to ask u about the simulation of MIMO channel in three dimensions …. The vertical coordinate is the fading envelope, and the two horizontal coordinates are the time and distance…. I have simulated the fading with the time by using jakes mode but I don’t know how i can simulate the fading with distance for 2*2 real world MIMO channel. At least give me an equation of fading with distance.
Thank u in advance…
This is my fading simulation with time:-
clear
t_sample = 0.001;
t = (0:8/t_sample)*t_sample;
fc = 220.5625*10^6;
N = 100;
c = 2.998*10^8;
v = 45*1000/3600;
lambda = c/fc;
fd = v/lambda;
f = linspace(-1/t_sample*1/2,1/t_sample*1/2,16000);
Eo = 1;
sigma = 1;
Cn = 1/(2*pi);
alpha = rand(1,N).*2*pi;
phi = rand(1,N).*2*pi;
Tc = zeros(1,length(t));
Ts = zeros(1,length(t));
for n = 1:N; % loop to superimpose the N signals
Tc_n = Cn*cos(fd*2*pi*t*cos(alpha(n))+phi(n));
Ts_n = Cn*sin(fd*2*pi*t*cos(alpha(n))+phi(n));
Tc = Tc+Tc_n;
Ts = Ts+Ts_n;
end
Env = (Tc.^2 + Ts.^2).^0.5;
plot(t(1:4/t_sample),10*log10(Env(1:4/t_sample)))
title(’Received Signal Envelope’);
xlabel(’time (s)’)
ylabel(’Magnitude of E Field (dB)’)
@mohanad: Am not sure, I fully understood your question nor the code which you have posted. Typically, more the distance, higher will be the RMS delay spread of the channel.
One good reference for MIMO channel model is defined by the High Throughput study group for 802.11n standards development –
Tgn Channel Models, Vinko Erceg et al. The document provides a good overview of MIMO channel modeling – including the effect of antenna correlation (based on antenna spacing). effect of fluorescent lights, doppler, indoor multipath characteristics.
Hope this helps.
Thank u krishna for your help…..
If my viewpoint didn’t clear, can u please read the pages (6-7) of this book (MIMO Wireless Communications.2007) in this web site :-www.4shared.com/file/112621705/f9ab90f6/MIMO_Wireless_Communications2007.html
It will give u a clear overview of what I had pointed to
Thank u again dear Krishna
@mohanad: I looked at Fig 1.3 in the reference which you pointed. As you said,
a) the vertical co-ordinate ‘dB’ corresponds to attenuation of the channel.
b) the horizontal co-ordinate ‘tones’ corresponds to frequency i.e attenuation vs frequency and
c) the horizontal co-ordinate ’samples’ corresponds to many realization of the channel i.e attenuations vs time
Dear Krishna
Good work…
Execuse me , I have a one question …is there a Threshold in Alamouti scheme in detection side ?
thank you
@Mahdi: Did you mean threshold for determining whether the received symbol corresponds to 1 or 0? Yes, there is.
A very useful post which dispelled my misconception – that when STBC is used , the minimum number of receive antennas should be 2. Thanks
@umesh: Glad to help
Are you sure about that?
please tell me when simulating the almouti scheme….
one matlab keyword using is “kron” that leads to kronecker tensor product. but in the literature it is mentioned that kronecker algebra is being used for almouti scheme.
please tell me what is significance of using “kron” when coding for STBC.
@surbhi: In the Matlab code, I used kron() to do all the operations as matrix operations and to avoid for-loops. Using kron() does not have any theoretical significance in understanding Alamouti STBC coding.
can you help me please,
i am doing project based on MIMO-OFDM for reduction of peak to average power ratio. in this case i am using CI-OFDM with SFBC instead of STBC.
can you suggest any better technique than CI-OFDM, and how to write matlab code for CI-OFDM with SFBC.
thank you sir.
@sreenu: what is CI-OFDM?
Carrier Interferometry Orthogonal Frequency Division Multiplexing
(in CI OFDM , puts each bit/symbol on all carriers simultaneously)
@sreenu: Whats the advantage in having such a scheme? and where is this used?
this CI-OFDM scheme provide frequency diversity benefit and also reduces the peak to average power ratio(for preventing non linear distortion of High Power Amplifier).
First this(CI) scheme used at MC-CDMA. Now this(CI) used at OFDM.
this block used between SFBC encoder and OFDM block.
hi Krishna
My theses in MIMO in WIMMAX ,plz give me an idea for simulation.
Best regards.
@mohammad: Which blocks are you planning to simulate? Good luck.
thanks very for providing a very gud understanding of AL.STBC
krishna can u plz tel me ..
can u use the matlab builtin command: rayleighchan(ts,fd)
same for bpsk modulation command :psk.modem..will it work correctly becoz in ur all codes u have made ur own qpsk n bpsk modulators…plz help me ..n one more thing to ask if m using mimo ofdm then can i considered channel as flat fading channel as u did in it..bcoz of ofdm each subcarrier will suffer flat fading instead of frequency selective fading..plz do comment whether m right or wrong
many thanks in advance
waiting for ur reply
@mak_m: My replies:
1/ Sorry, I do not have the function rayleshchan, psk.modem etc. Hence I built my own.
2/ In most cases, you can consider it as flat fading for each subcarrier.
hello sir,
Till now u have worked on ALMOUTI full rate schemes(2 tx* 2 rx). will u extend this work on fractional rate(e.g. 3 tx – 4 rx or any other combination like e.g 4 tx * 3rx). if u have any idea of implementing STBC with antenna selection{ a technique which is used to select specific antenna’s (let 2& 4) out of given four antenna’s at receiver end }. if u have any matlab program for antenna selection plz send to me
@sam: I have discussed 2 transmit – 1 receive alamouti and 2 transmit – 2 receive alamouti codes. In future, I might consider discussing other structures which you have proposed.
I have one post on Selection diversity @
http://www.dsplog.com/2008/09/06/receiver-diversity-selection-diversity/
Hi sir,
I wanted to use your alamouti BPSK to change it to QPSK to verify that the results will be the same. However, i couldnt get the correct curve.
Do i need to change any of the codes in the alamouti calculation portion?
Or do i leave it as it is, and change only the ip and s variable?
Which is…..
% Alamouti STBC
sCode = zeros(2,N);
sCode(:,1:2:end) = (1/sqrt(2))*reshape(s,2,N/2); % [x1 x2 ...]
sCode(:,2:2:end) = (1/sqrt(2))*(kron(ones(1,N/2),[-1;1]).*flipud(reshape(conj(s),2,N/2))); % [-x2* x1* ....]
h = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % Rayleigh channel
hMod = kron(reshape(h,2,N/2),ones(1,2)); % repeating the same channel for two symbols
n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white gaussian noise, 0dB variance
% Channel and noise Noise addition
y = sum(hMod.*sCode,1) + 10^(-Eb_N0_dB(ii)/20)*n;
% Receiver
yMod = kron(reshape(y,2,N/2),ones(1,2)); % [y1 y1 ... ; y2 y2 ...]
yMod(2,:) = conj(yMod(2,:)); % [y1 y1 ... ; y2* y2*...]
% forming the equalization matrix
hEq = zeros(2,N);
hEq(:,[1:2:end]) = reshape(h,2,N/2); % [h1 0 ... ; h2 0...]
hEq(:,[2:2:end]) = kron(ones(1,N/2),[1;-1]).*flipud(reshape(h,2,N/2)); % [h1 h2 ... ; h2 -h1 ...]
hEq(1,:) = conj(hEq(1,:)); % [h1* h2* ... ; h2 -h1 .... ]
hEqPower = sum(hEq.*conj(hEq),1);
yHat = sum(hEq.*yMod,1)./hEqPower; % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
yHat(2:2:end) = conj(yHat(2:2:end));
@Sivam: I guess changing only the variable s and the receiver ipHat should suffice.
How do we explain this?
pAlamouti = 1/2 – 1/2*(1+2./EbN0Lin).^(-1/2);
theoryBerAlamouti_nTx2_nRx1 = pAlamouti.^2.*(1+2*(1-pAlamouti));
Why in theory we can model alamouti using this formula??
How is it being done?
Thanks so much!
@Sivam: The equation is same as the theoretical equation for BER for Maximal Ratio Combining, but poorer by 3dB. You can find the post on Maximal Ratio Combining @
http://www.dsplog.com/2008/09/28/maximal-ratio-combining/
you had done this alamouti stbc under BPSK modulation……..Is it possible to implement it with 16QAM modulation…….If so how to proceed along with this model.Plz help me on this…………….
@surender: I have discussed couple of posts on 16QAM modulation
http://www.dsplog.com/2007/12/09/symbol-error-rate-for-16-qam/
http://www.dsplog.com/2008/06/05/16qam-bit-error-gray-mapping/
Hope you will be able to adapt those to Alamouti case.
Hi Krishna,
Thanks for sharing the information. The website and all its articles are very informative….
@Aditya: Thanks
hi krishna,
do u have matlab code for qrd-m algorithm in mimo-ofdm systems , if so plz help me.
thank u.
@balu: Sorry, no.
The prob. dens. function of your flat fading channel looks strange. I used dfittool with the data input abs(h) to create the PDF. It looks like a rayleigh pdf with sigma = 1 but multiplied by sqrt(2). Is there any particular reason for this? I’m using jakes model for flat fading and the pdf i get is the same as;
x = 0:0.1:3;
p = raylpdf(x,1);
plot(x,p)
Thanks for the code, it’s a great help with checking my own.
@Rory: I have created the Rayleigh channel with gaussian distributed real and imaginary parts. Both real and imaginary parts are divided by 1/sqrt(2) such that the total variance is unity. Agree?
Hello Krishna,
After the sentence “The estimate of the transmitted symbol is,” you multiplicate the the channel matrix inverse and the [y1 y2*] . The typo mistake in my opinion is that y2* depends on x2 and not x2* as you have written. So the estimation vector is [x1 x2] and not [x1 x2*]. Agree ? Apart from that you have forgotten the conjugation for x1 in the formula after the sentence “In the second time slot, the received signal is,”
The rest is a good work, thank you !
@joel: Thanks for the close review. I corrected both the typos.
hi krishna,
ur code is excllent for BPSK for 2X1 .
i have modified it for MPSK and MQAM to calculate BER.
its working for 4,8 psk but doesnt give proper curve for 16psk.
is it necessary to demodulate signa at receiver side??
i have used c=modem.pskdemod(M,(360/M)) for demodulation after ML decoding.
is it correct or not???
@nikunj: Well, as I do not have pskdemod() function, I cannot comment. You might want to have a look @
http://www.dsplog.com/2008/03/18/symbol-error-rate-for-16psk/
Dear krishna, lots of engineers are ask for the MIMO 2×1 with QPSK. And I changed your source, but the result failed. Can you help me to check the source? Thansk.
clear
Eb_N0_dB = [0:25]; % multiple Eb/N0 values
nd = 6; % number of symbols
ml = 2; % modulation levels
para=256; % Number of parallel channel to transmit (points)
N=para*nd; % number of bits or symbols
for ii = 1:length(Eb_N0_dB)
% Transmitter
% ip = rand(1,N)>0.5; % generating 0,1 with equal probability
ip = rand(1,para*nd*ml)>0.5; % generating 0,1 with equal probability
% s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 1
% QPSK modulation**********************************************************
paradata = reshape(ip,para,nd*ml);
[ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2);
s=(ich+qch.*i).*kmod;
s = reshape(s,1,para*nd);
% IFFT*********************************************************************
% s=ifft(s);
% Alamouti STBC
sCode = zeros(2,N);
sCode(:,1:2:end) = (1/sqrt(2))*reshape(s,2,N/2); % [x1 x2 ...]
sCode(:,2:2:end) = (1/sqrt(2))*(kron(ones(1,N/2),[-1;1]).*flipud(reshape(conj(s),2,N/2))); % [-x2* x1* ....]
% IFFT*********************************************************************
% sCode=ifft(sCode);
h = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % Rayleigh channel
hMod = kron(reshape(h,2,N/2),ones(1,2)); % repeating the same channel for two symbols
n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white gaussian noise, 0dB variance
% Channel and noise Noise addition
y = sum(hMod.*sCode,1) + 10^(-Eb_N0_dB(ii)/20)*n;
% Receiver
yMod = kron(reshape(y,2,N/2),ones(1,2)); % [y1 y1 ... ; y2 y2 ...]
yMod(2,:) = conj(yMod(2,:)); % [y1 y1 ... ; y2* y2*...]
% FFT**********************************************************************
% yMod = fft(yMod);
% forming the equalization matrix
hEq = zeros(2,N);
hEq(:,[1:2:end]) = reshape(h,2,N/2); % [h1 0 ... ; h2 0...]
hEq(:,[2:2:end]) = kron(ones(1,N/2),[1;-1]).*flipud(reshape(h,2,N/2)); % [h1 h2 ... ; h2 -h1 ...]
hEq(1,:) = conj(hEq(1,:)); % [h1* h2* ... ; h2 -h1 .... ]
hEqPower = sum(hEq.*conj(hEq),1);
yHat = sum(hEq.*yMod,1)./hEqPower; % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
yHat(2:2:end) = conj(yHat(2:2:end));
% receiver – hard decision decoding
% ipHat = real(yHat)>0;
% Hard decision decoding***************************************************
yHat = reshape(yHat,para,nd);
S_re = real(yHat)/kmod;
S_im = imag(yHat)/kmod;
[demodata]=qpskdemod(S_re,S_im,para,nd,ml);
ipHat = reshape(demodata,1,ml*N);
% FFT**********************************************************************
% ipHat = fft(ipHat);
% counting the errors
nErr(ii) = size(find([ip- ipHat]),2);
end
simBer = nErr/(ml*N); % simulated ber
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
p = 1/2 – 1/2*(1+1./EbN0Lin).^(-1/2);
theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));
pAlamouti = 1/2 – 1/2*(1+2./EbN0Lin).^(-1/2);
theoryBerAlamouti_nTx2_nRx1 = pAlamouti.^2.*(1+2*(1-pAlamouti));
close all
figure
semilogy(Eb_N0_dB,theoryBer_nRx1,’bp-’,'LineWidth’,2);
hold on
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,’kd-’,'LineWidth’,2);
semilogy(Eb_N0_dB,theoryBerAlamouti_nTx2_nRx1,’c+-’,'LineWidth’,2);
semilogy(Eb_N0_dB,simBer,’mo-’,'LineWidth’,2);
axis([0 25 10^-5 0.5])
grid on
legend(’theory (nTx=1,nRx=1)’, ‘theory (nTx=1,nRx=2, MRC)’, ‘theory (nTx=2, nRx=1, Alamouti)’, ’sim (nTx=2, nRx=1, Alamouti)’);
xlabel(’Eb/No, dB’);
ylabel(’Bit Error Rate’);
title(’BER for BPSK modulation with Alamouti STBC (Rayleigh channel)’);
===============================================
qpskmod.m
% Program 3-9
% qpskmod.m
%
% Function to perform QPSK modulation
%
% Programmed by H.Harada
%
function [iout,qout]=qpskmod(paradata,para,nd,ml)
%****************** variables *************************
utput Ich data
utput Qch data
% paradata : input data (para-by-nd matrix)
% iout
% qout
% para : Number of paralell channels
% nd : Number of data
% ml : Number of modulation levels
% (QPSK ->2 16QAM -> 4)
% *****************************************************
m2=ml./2;
paradata2=paradata.*2-1;
count2=0;
for jj=1:nd
isi = zeros(para,1);
isq = zeros(para,1);
for ii = 1 : m2
isi = isi + 2.^( m2 – ii ) .* paradata2((1:para),ii+count2);
isq = isq + 2.^( m2 – ii ) .* paradata2((1:para),m2+ii+count2);
end
iout((1:para),jj)=isi;
qout((1:para),jj)=isq;
count2=count2+ml;
end
%******************** end of file ***************************
qpskdemod.m
% Program 3-10
% qpskdemod.m
%
% Function to perform QPSK demodulation
%
% programmed by H.Harada
%
function [demodata]=qpskdemod(idata,qdata,para,nd,ml)
%****************** variables *************************
% idata :input Ich data
% qdata :input Qch data
% demodata: demodulated data (para-by-nd matrix)
% para : Number of paralell channels
% nd : Number of data
% ml : Number of modulation levels
% (QPSK ->2 16QAM -> 4)
% *****************************************************
demodata=zeros(para,ml*nd);
demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0;
demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;
%******************** end of file ***************************
@KimMyungsong: For QPSK demod, instead of qpskdemod(), you can try something as simple as
ipHat1 = real(yHat)>0
ipHat2 = imag(yHat)>0
Make sure that we do the ungrouping of each constellation symbol into two bits correctly.
I already solved, thanks a lot.
Just need to delete below line.
%yHat(2:2:end) = conj(yHat(2:2:end));
@KimMyungsong: Glad to hear
Hi
My question is that if we compare MIMO system with single antenna system, how we make fair comparison by setting same power for both case.
for example, consider two antenna at transmitter like 2 X 1 alamouti scheme, if power=1 is used for single antenna system, so it will be half poer for each antenna to make fair comparison. Am I wright.
Thnaks
@Abrar: Yes, you are right
hi sir………..
hi krishna…………..
im try youre source programs……….if i use stbc with 4,6,or 8 tx n tx (tx,rx > 2) where must change in the source??
can you help me please, i read a lot of your articles, that helped me a lot.
Hi, i have to finish my thesis by comparing some Ber curves. I am not so good in matlab, can you please show me how to modify your matlab file without rayleigh channel. (MISO channel without OFDM and only with AWGN channel, ) My modulation is QPSK but i think the ber curver are the same as for BPSK.
I have to be ready for 12 genn
If it helps, here are other Ber graphics: (with/without Rayleigh, MIMO)
http://zdarova.it/tesi/7genn/differenza%20tra%208%20curve.fig
hi
i am working on channel estimation.problem i am facing is how to write a code for higher order modulations at ofdm transmitter i.e.8 qam and above.how to write a code for a matrix relaed to received signal data pl guide
@abubaker: Can you please point to the error in the equation. If there is indeed an error, I will correct it.
I referred Digital Communications by Barry, Lee, Messerchmit.
i need it to be with Maximum Likelihood Detection for Alamouti-STBC system Under QPSK modulation condition….not with hard decision….so can you help me please…
@sreenu: Thanks. Can you plz point me to articles on the net or in print.