www.pudn.com > space-timecodingBrankaVuceticJinhongYuan.rar > Q.m, change:2004-01-06,size:2564b


function [a]=Q(rx_symbol,modulation) 
%*********************************************************************** 
% This file carries out 'slicing' operation to the nearest constellation 
%*********************************************************************** 
 
if ~isempty(findstr(modulation, 'BPSK')) 
%BPSK 
a = real(rx_symbol);  
elseif ~isempty(findstr(modulation, 'QPSK')) 
% QPSK 
soft_bits = zeros(2*size(rx_symbol,1),size(rx_symbol,2)); 
 
bit0 = real(rx_symbol);  
bit1 = imag(rx_symbol); 
 
soft_bits(1:2:size(soft_bits, 1),:) = bit0; 
soft_bits(2:2:size(soft_bits, 1),:) = bit1; 
 
a=bit0+j*bit1; 
 
elseif ~isempty(findstr(modulation, '16QAM')) 
%16QAM 
soft_bits = zeros(4*size(rx_symbol,1), size(rx_symbol,2));  % Each symbol consists of 4 bits 
 
bit0 = real(rx_symbol); 
bit2 = imag(rx_symbol); 
 
bit1 = 2/sqrt(10)-(abs(real(rx_symbol))); 
bit3 = 2/sqrt(10)-(abs(imag(rx_symbol))); 
 
soft_bits(1:4:size(soft_bits,1),:) = bit0; 
soft_bits(2:4:size(soft_bits,1),:) = bit1; 
soft_bits(3:4:size(soft_bits,1),:) = bit2; 
soft_bits(4:4:size(soft_bits,1),:) = bit3; 
 
 
a=bit0+j*bit2; 
 
elseif ~isempty(findstr(modulation, '64QAM')) 
%64QAM 
soft_bits = zeros(6*size(rx_symbol,1), size(rx_symbol,2));  % Each symbol consists of 6 bits 
bit0 = real(rx_symbol); 
bit3 = imag(rx_symbol); 
 
bit1 = 4/sqrt(42)-abs(real(rx_symbol)); 
bit4 = 4/sqrt(42)-abs(imag(rx_symbol)); 
 
 
for m=1:size(rx_symbol,2) 
   for k=1:size(rx_symbol,1) 
      if abs(4/sqrt(42)-abs(real(rx_symbol(k,m)))) <= 2/sqrt(42)  % bit is one 
         bit2(k,m) = 2/sqrt(42) - abs(4/sqrt(42)-abs(real(rx_symbol(k,m)))); 
      elseif abs(real(rx_symbol(k,m))) <= 2/sqrt(42) % bit is zero, close to real axis 
         bit2(k,m) = -2/sqrt(42) + abs(real(rx_symbol(k,m))); 
      else 
         bit2(k,m) = 6/sqrt(42)-abs(real(rx_symbol(k,m))); % bit is zero  
      end; 
       
      if abs(4/sqrt(42)-abs(imag(rx_symbol(k,m)))) <= 2/sqrt(42)  % bit is one 
         bit5(k,m) = 2/sqrt(42) - abs(4/sqrt(42)-abs(imag(rx_symbol(k,m)))); 
      elseif abs(imag(rx_symbol(k,m))) <= 2/sqrt(42) % bit is zero, close to real axis 
         bit5(k,m) = -2/sqrt(42) + abs(imag(rx_symbol(k,m))); 
      else 
         bit5(k,m) = 6/sqrt(42)-abs(imag(rx_symbol(k,m))); 
      end; 
   end; 
end; 
 
soft_bits(1:6:size(soft_bits,1),:) = bit0; 
soft_bits(2:6:size(soft_bits,1),:) = bit1; 
soft_bits(3:6:size(soft_bits,1),:) = bit2; 
soft_bits(4:6:size(soft_bits,1),:) = bit3; 
soft_bits(5:6:size(soft_bits,1),:) = bit4; 
soft_bits(6:6:size(soft_bits,1),:) = bit5; 
 
 
a=bit0+j*bit3; 
 
end