gusucode.com > m4k20功率分配图 mimo功率优化,OFDM典型仿真程序,贪婪算法仿真程序 > code/test_16qam/qamdemod.m

    % Program 3-24
% qamdemod.m
%
% Function to decode 16QAM modulation
%
% programmed by R.Funada and H.Harada
%

function [demodata]=qamdemod(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)
% *****************************************************

k=sqrt(10);
idata=idata.*k;
qdata=qdata.*k;
demodata=zeros(para,ml*nd);

m2=ml/2;       
count2=0; 

for ii = 1:nd
      
   	a=1;
    b=1;
   	i_lngth=0;
    q_lngth=0;
      
    for jj= 1:m2
        
       if jj ~= 1           
         
          	if demodata((1:para),jj-1+count2)==1
               	a=-a;               
           	end
      
           	if demodata((1:para),m2+jj-1+count2)==1
               	b=-b;
           	end

            i_lngth=i_lngth+i_plrty.*2.^(m2-jj+1);
            q_lngth=q_lngth+q_plrty.*2.^(m2-jj+1);
        end
         
        if idata((1:para),ii) >= i_lngth
           demodata((1:para),jj+count2)=a>=0;
           i_plrty=1;
        else
       	   demodata((1:para),jj+count2)=a<=0;
           i_plrty=-1;
        end
         
        if qdata((1:para),ii) >= q_lngth
           demodata((1:para),m2+jj+count2)=b>=0;
           q_plrty=1;  
        else
 		   demodata((1:para),m2+jj+count2)=b<=0;
           q_plrty=-1;
        end
            
    end  % for jj= 1:m2
      
    count2=count2+ml;
             
 end  % for ii = 1:nd          

%******************** end of file ***************************