function d=qpsk(data)
%
% SUMMARY
% d=qpsk(b)
%
% Map the bits to be transmitted into QPSK symbols using Gray coding. The
% resulting QPSK symbol is complex-valued, where one of the two bits in
% each QPSK symbol affects the real part (I channel) of the symbol and the
% other bit the imaginary part (Q channel). Each part is subsequently PAM
% modulated to form the complex-valued QPSK symbol. The energy per QPSK
% symbol is normalized to unity.
%
% The mapping resulting from the two PAM branches are:
%
% complex part (Q channel)
%
% ^
% |
% 10x | x01 (odd bit, even bit)
% |
% ------+---------> real part (I channel)
% |
% 11x|x01
% |
%
% INPUT
% b=bits {0,1} to be mapped into QPSK symbols
%
% OUTPUT
% d=complex-valued QPSSK symbols
% -------------------------------------------------------------------------
% aux variables
bit_len=length(data);
%
% -------------------------------------------------------------------------
% Odd and Even bits
I_data=data(1:2:bit_len);
Q_data=data(2:2:bit_len);
% max=length(Q_data);
%
% -------------------------------------------------------------------------
for k=1:length(I_data);
% if k<=max
if I_data(k)==0 & Q_data(k)==0
phase=pi/4;
elseif I_data(k)==0 & Q_data(k)==1
phase=7*pi/4;
elseif I_data(k)==1 & Q_data(k)==0
phase=3*pi/4;
elseif I_data(k)==1 & Q_data(k)==1
phase=5*pi/4;
end
% complex valued QPSK symbols
d(k)=exp(j*phase);
% else
% break
% end
end