Show
Ignore:
Timestamp:
08/22/09 22:18:16 (5 years ago)
Author:
hvolos
Message:

added MRC, needs debuging

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • ossiedev/branches/hvolos/components/MIMODec/MIMODec.cpp

    r9492 r9519  
    1818    Mr=1; 
    1919    Nt=1; 
    20     MIMOmethod="STBC"; 
     20    MIMOmethod=0; 
    2121    Modmethod="BPSK"; 
    2222 
     
    9999        if (strcmp(props[i].id, "DCE:74a38a7c-3b3e-11de-b7e0-0000e80014f9") == 0) { 
    100100            const char * prop_str; 
     101            //string prop_str; 
    101102            props[i].value >>= prop_str; 
    102             MIMOmethod=prop_str; 
     103            //prop_str=prop_char; 
     104 
     105            if (strcmp(prop_str,"MRC")) { 
     106                MIMOmethod=0; 
     107 
     108            } else if (strcmp(prop_str,"STBC")) { 
     109                MIMOmethod=1; 
     110 
     111            } else if (strcmp(prop_str,"VBLAST")) { 
     112                MIMOmethod=2; 
     113            }; 
    103114        } 
    104115 
     
    128139 
    129140    while (1) { 
    130         Mr=4; 
    131         Nt=2; 
     141        //Mr=4; 
     142        //Nt=2; 
     143 
    132144        NH=Mr*Nt; 
    133145        dataIn->getData(I_in, Q_in); 
     
    143155 
    144156        cx_mat H(Mr,Nt); 
     157        MIMOmethod=0; 
     158        std::cout<<Mr<<"X"<<Nt<<" M:"<< MIMOmethod<<" DL:"<<Data_length<<std::endl; 
    145159        for (int i=0;i<Mr;i++) { 
    146160            for (int j=0;j<Nt;j++) { 
    147161                H(i,j)=cx_double((*I_in)[i*Mr+j],(*Q_in)[i*Mr+j])/10000.0; 
    148                 //std::cout<<"Iin:"<<(*I_in)[i*2+j]; 
     162                //std::cout<<"Iin:"<<(*I_in)[i*2+j]<<"  "; 
     163                std::cout<<"H("<<i<<","<<j<<")="<<H(i,j)<<"  "; 
    149164            } 
    150165        } 
    151         //std::cout<<std::endl; 
    152  
    153         /*Alamouti 
    154         for i=1:2:length(RX_symbols1), 
    155           r1=RX_symbols1(i); 
    156           r2=RX_symbols1(i+1); 
    157           RX_symbols(i)=r1*conj(H(1,1))+conj(r2)*H(1,2); 
    158           RX_symbols(i+1)=r1*conj(H(1,2))-conj(r2)*H(1,1); 
    159         end; 
    160         */ 
     166        std::cout<<std::endl; 
    161167 
    162168        cx_double r1; 
    163169        cx_double r2; 
    164170        cx_mat rx_symbols(((Data_length-NH)/Mr),1); 
    165         short int j=0; 
    166         //std::cout<<"Decode"<<std::endl; 
    167         //std::cout<<"Hdec="<<H; 
    168  
    169         for (short int i=NH; i<Data_length;i+=2*Mr) { 
    170             rx_symbols(j,0)=0; 
    171             rx_symbols(j+1,0)=0; 
    172  
    173             for (short int k=0;k<Mr;k++) { 
    174                 r1=cx_double((*I_in)[i+k],(*Q_in)[i+k]); 
    175                 r2=cx_double((*I_in)[i+Mr+k],(*Q_in)[i+Mr+k]); 
    176                 rx_symbols(j,0)+=r1*conj(H(k,0))+conj(r2)*H(k,1); 
    177                 rx_symbols(j+1,0)+=r1*conj(H(k,1))-conj(r2)*H(k,0); 
    178  
     171         short int j=0; 
     172 
     173        switch (MIMOmethod) { 
     174        case 0: 
     175            j=0; 
     176 
     177            for (short int i=NH; i<Data_length;i+=Mr) { 
     178                rx_symbols(j,0)=0; 
     179 
     180                for (short int k=0;k<Mr;k++) { 
     181                    r1=cx_double((*I_in)[i+k],(*Q_in)[i+k]); 
     182                    rx_symbols(j,0)+=r1*conj(H(k,0)); 
     183                    std::cout<<i<<","<<j<<","<<k<<std::endl; 
     184                } 
     185 
     186                j+=1; 
    179187            } 
    180188 
    181             j+=2; 
    182         } 
     189            break; 
     190        case 1: 
     191            //std::cout<<std::endl; 
     192 
     193            /*Alamouti 
     194            for i=1:2:length(RX_symbols1), 
     195              r1=RX_symbols1(i); 
     196              r2=RX_symbols1(i+1); 
     197              RX_symbols(i)=r1*conj(H(1,1))+conj(r2)*H(1,2); 
     198              RX_symbols(i+1)=r1*conj(H(1,2))-conj(r2)*H(1,1); 
     199            end; 
     200            */ 
     201 
     202 
     203 
     204            j=0; 
     205            //std::cout<<"Decode"<<std::endl; 
     206            //std::cout<<"Hdec="<<H; 
     207 
     208            for (short int i=NH; i<Data_length;i+=2*Mr) { 
     209                rx_symbols(j,0)=0; 
     210                rx_symbols(j+1,0)=0; 
     211 
     212                for (short int k=0;k<Mr;k++) { 
     213                    r1=cx_double((*I_in)[i+k],(*Q_in)[i+k]); 
     214                    r2=cx_double((*I_in)[i+Mr+k],(*Q_in)[i+Mr+k]); 
     215                    rx_symbols(j,0)+=r1*conj(H(k,0))+conj(r2)*H(k,1); 
     216                    rx_symbols(j+1,0)+=r1*conj(H(k,1))-conj(r2)*H(k,0); 
     217 
     218                } 
     219 
     220                j+=2; 
     221            } 
     222 
     223            break; 
     224        case 2: 
     225            break; 
     226        } 
     227 
    183228        double scale=1; 
    184229        for (short int i=0; i<((Data_length-NH)/Mr);i++) {