martaczaska

16QAM

Oct 22nd, 2020 (edited)
1,132
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. % 22.10.2020 r.
  2. % 171632 Marta Trzaska
  3. % Zad.1 Modulator/demodulator sygnału 16QAM
  4.  
  5. beta=1;
  6.  
  7.  
  8. % 1. Generowanie wektora wejściowego:
  9.     %Dane wejściowe
  10.     N = 40;
  11.     M = 100;
  12.     %Wektor wejściowy
  13.     wejsciowy=randi([0,1],[1,N]);
  14.    
  15. % 2. Rozdzielenie wektora wejściowego na sekcje 4-bitowe
  16.     wejsciowy4bit=reshape(wejsciowy,[4,10]);
  17.  
  18. % 3. Podział na I oraz Q
  19.     I=zeros(1,10);
  20.     Q=zeros(1,10);
  21.     for i=1:10
  22.         if(wejsciowy4bit(1,i)==0 && wejsciowy4bit(2,i)==0)
  23.             I(i)=-3;
  24.         end
  25.         if(wejsciowy4bit(1,i)==0 && wejsciowy4bit(2,i)==1)
  26.             I(i)=-1;
  27.         end
  28.         if(wejsciowy4bit(1,i)==1 && wejsciowy4bit(2,i)==1)
  29.             I(i)=1;
  30.         end
  31.         if(wejsciowy4bit(1,i)==1 && wejsciowy4bit(2,i)==0)
  32.             I(i)=3;
  33.         end
  34.        
  35.         if(wejsciowy4bit(3,i)==1 && wejsciowy4bit(4,i)==0)
  36.             Q(i)=-3;
  37.         end
  38.         if(wejsciowy4bit(3,i)==1 && wejsciowy4bit(4,i)==1)
  39.             Q(i)=-1;
  40.         end
  41.         if(wejsciowy4bit(3,i)==0 && wejsciowy4bit(4,i)==1)
  42.             Q(i)=1;
  43.         end
  44.         if(wejsciowy4bit(3,i)==0 && wejsciowy4bit(4,i)==0)
  45.             Q(i)=3;
  46.         end
  47.     end
  48.    
  49. % 4. Nadpróbkowanie M-krotne
  50.     wejsciowe_I=zeros(1,1000); % ls*M=10*1000
  51.     wejsciowe_Q=zeros(1,1000); % ls*M=10*1000
  52.    
  53.     for i=1:10
  54.         for k=1:M
  55.             wejsciowe_I(1,i*M-M+k)=I(i);
  56.         end
  57.     end
  58.    
  59. % 5. Odpowiedź impulsowa filtru typu podniesiony cosinus
  60.         T=100; %czas trwania symbolu
  61.         t=-100;
  62.         for i=1:201 %odp impuls. filtru obejmuje 2 symbole (200 próbek)
  63.             if((t==(T/(2*beta))) || (t==(-T/(2*beta))))
  64.                 h(i)=(pi/(4*T))*sinc(1/(2*beta));
  65.             else
  66.                 h(i)=(1/T)*sinc(t/T)*cos(pi*beta*t/T)/(1-(2*beta*t/T)^2);
  67.             end
  68.             t=t+1;
  69.         end
  70.    
  71. % Modulator: 6. Filtracja (przy użyciu splotu)
  72.     wyjsciowe_I=conv(wejsciowe_I,h);
  73.     wyjsciowe_Q=conv(wejsciowe_Q,h);
  74.  
  75. % Modulator: 7. Modulacja
  76.     time=[0:100/1200:100-100/1200];
  77.     sinus=sin(2*pi*time);
  78.     cosinus=cos(2*pi*time);
  79.    
  80.     mod_I=wyjsciowe_I.*sinus;
  81.     mod_Q=wyjsciowe_Q.*cosinus;
  82.    
  83.     mod_16QAM=mod_I+mod_Q;
  84.    
  85. % Demodulator: 8. Rozdzielenie na tory I i Q
  86.     odebrany_I = mod_16QAM.*sinus;
  87.     odebrany_Q = mod_16QAM.*cosinus;
  88.    
  89.    
  90. % Demodulator: 9. Całkowanie
  91.     suma_zdemod_I = zeros(1,10);
  92.     suma_zdemod_Q = zeros(1,10);
  93.     for i=1:10
  94.         for j=1:100
  95.             suma_zdemod_I(1,i)=suma_zdemod_I(1,i) + odebrany_I(1,(i-1)*100 +j+100);
  96.             suma_zdemod_Q(1,i)=suma_zdemod_Q(1,i) + odebrany_Q(1,(i-1)*100 +j+100);
  97.         end
  98.     end
  99.    
  100. % Demodulator: 10. Decyzja - progi
  101.     I_det=zeros(1,10);
  102.     Q_det=zeros(1,10);
  103.    
  104.     for i=1:10
  105.         if suma_zdemod_I(i) >= 0
  106.             if suma_zdemod_I(1, i) < 50      I_det(1,i) = 1;
  107.             else                               I_det(1,i) = 3;
  108.             end
  109.         elseif suma_zdemod_I(1,i) < 0    
  110.             if suma_zdemod_I(1, i) < -50      I_det(1,i) = -3;
  111.             else                               I_det(1,i) = -1;
  112.             end
  113.         end
  114.        
  115.         if suma_zdemod_Q(i) >= 0
  116.             if suma_zdemod_Q(1, i) < 50      Q_det(1,i) = 1;
  117.             else                               Q_det(1,i) = 3;
  118.             end
  119.         elseif suma_zdemod_Q(1,i) < 0    
  120.             if suma_zdemod_Q(1, i) < -50      Q_det(1,i) = -3;
  121.             else                               Q_det(1,i) = -1;
  122.             end
  123.         end
  124.     end
  125.  
  126. % Demodulator: 11. Dane wyjściowe
  127.     wyjscie=zeros(1,N);
  128.     wyjscie4=zeros(4,10);
  129.    
  130.     for i=1:10
  131.         if(I_det(1,i)==-3)
  132.             wyjscie4(1,i) = 0;
  133.             wyjscie4(2,i) = 0;
  134.         elseif(I_det(1,i)==-1)
  135.             wyjscie4(1,i) = 0;
  136.             wyjscie4(2,i) = 1;
  137.         elseif(I_det(1,i)==1)
  138.             wyjscie4(1,i) = 1;
  139.             wyjscie4(2,i) = 1;
  140.         elseif(I_det(1,i)==3)
  141.             wyjscie4(1,i) = 1;
  142.             wyjscie4(2,i) = 0;
  143.         end
  144.        
  145.         if(Q_det(1,i)==-3)
  146.             wyjscie4(3,i) = 1;
  147.             wyjscie4(4,i) = 0;
  148.         elseif(Q_det(1,i)==-1)
  149.             wyjscie4(3,i) = 1;
  150.             wyjscie4(4,i) = 1;
  151.         elseif(Q_det(1,i)==1)
  152.             wyjscie4(3,i) = 0;
  153.             wyjscie4(4,i) = 1;
  154.         elseif(Q_det(1,i)==3)
  155.             wyjscie4(3,i) = 0;
  156.             wyjscie4(4,i) = 0;
  157.         end  
  158.     end
  159.    
  160.     wyjscie=reshape(wyjscie4,[1 40]);
  161.  
  162. %wyświetlanie wykresów
  163.  
  164. hold on;
  165. x=[1:40];
  166. grid on;
  167.  
  168. plot(x, wejsciowy,'ko'); %sekwencja bitów przed modulacją
  169.  
  170. plot(x, wejsciowy,'ko'); %sygnał zmodulowany
  171.  
  172. plot(x, wejsciowy,'ko'); %sekwencja bitów po demodulacji
  173.    
  174. mod_16QAM
RAW Paste Data