martaczaska

s171632_2

Nov 1st, 2020 (edited)
2,239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.91 KB | None | 0 0
  1. % 1.11.2020 r.
  2. % 171632 Marta Trzaska
  3. % Zad.2 Modulator/demodulator sygnału GMSK
  4.  
  5. %Przyjęte wartości: N = 20, M = 100
  6.     N = 40;
  7.     M = 100;
  8.    
  9. % 1.Generowanie wektora zawierającego N wartości binarnych 0/1
  10.     wejsciowy=randi([0,1],[1,N]);
  11.  
  12. % 2. Konwersja 0/1 na -1/1
  13.  
  14.     for i=1:N
  15.         if(wejsciowy(i) == 0)
  16.             wejsciowy(i) = -1;
  17.         end
  18.     end
  19.  
  20. % 3. Nadpróbkowanie M-krotne
  21.     nadprobkowane=zeros(1,N*M);
  22.    
  23.     for i=1:N
  24.         for k=1:M
  25.             nadprobkowane(i*M-M+k)=wejsciowy(i);
  26.         end
  27.     end
  28.  
  29. % 4. Generowanie odpowiedzi umpulsowej filtru Gaussowskiego
  30.     BT=0.5;
  31.     T=100; %czas trwania symbolu, M
  32.     t=-2*T;
  33.     h=zeros(1,4*M+1);
  34.    
  35.     for i=1:401 %odp impuls. filtru obejmuje 4 symbole
  36.         delta=sqrt(log10(2)/(2*pi*BT));
  37.         h(i)=exp((-(t/T).^2)/(2*delta^2))/(sqrt(2*pi)*delta);
  38.         t=t+1;
  39.     end
  40.  
  41. % 5. Filtrowanie sygnału
  42.     po_filtrowaniu=conv(h,nadprobkowane);
  43.  
  44. % 6. Całkowanie
  45.     po_calkowaniu=cumsum(po_filtrowaniu);
  46.     po_calkowaniu = po_calkowaniu.*0.01;
  47.  
  48. % 7. Generowanie sin i cos
  49.     I_wej=cos(po_calkowaniu);
  50.     Q_wej=sin(po_calkowaniu);
  51.  
  52. % 8. Generowanie nośnej
  53.     l_okresow=5*N;
  54.     krok=l_okresow/(N*M+4*M);
  55.     czas=l_okresow-l_okresow/(N*M+4*M);
  56.    
  57.     for t=0:krok:czas
  58.         sinus=sin(2*pi*t);
  59.         cosinus=cos(2*pi*t);
  60.     end
  61.    
  62. % 9. Mnożenie sygnałów scałkowanych z nośną
  63.     I=I_wej.*cosinus;
  64.     Q=Q_wej.*sinus;
  65.    
  66. % 10. Sumowanie wyników
  67.     zmodulowany = I + Q;
  68.    
  69. %DEMODULATOR:
  70. % 11. Zmodulowany sygnał rozdzielamy na dwa tory (I i Q)    
  71.     GMSK_cos = zmodulowany.*cosinus;
  72.     GMSK_sin = zmodulowany.*sinus;
  73.  
  74. % 12. Idealny filtr dolnoprzepustowy
  75.     p=-M/2;
  76.     for i=1:(M+1)
  77.         osx(i) = p;
  78.         if p == 0
  79.             FDP(i) = 1;
  80.         else
  81.             FDP(i) = sin(p/2)/(p/2);
  82.         end
  83.         p=p+1;
  84.     end
  85.  
  86. % 13. Filtrowanie przez DP
  87.     po_filtracji_I = conv(FDP,GMSK_cos);
  88.     po_filtracji_Q = conv(FDP,GMSK_sin);
  89.  
  90. % 14. Różniczkowanie (tory I i Q osobno)
  91.     dIdt(1) = po_filtracji_I(1);
  92.     dQdt(1) = po_filtracji_Q(1);
  93.    
  94.     for i=2:(N*M + 4*M + M)    
  95.         dIdt(i) = po_filtracji_I(i) - po_filtracji_I(i-1);
  96.         dQdt(i) = po_filtracji_Q(i) - po_filtracji_Q(i-1);
  97.     end
  98.  
  99. % 15. Obliczenie sygnału różnicowego
  100.     syg_roz = po_filtracji_I.*dQdt - po_filtracji_Q.*dIdt;
  101.  
  102. % 16. Całkowanie w czasie trwania symbolu
  103.     calka=zeros(1,N*M);
  104.     for i=251:4250
  105.         calka(i)=calka(i) + syg_roz(i);
  106.     end
  107.  
  108.  
  109. % 17. Detekcja
  110.  
  111.  
  112.  
  113.  
  114. grid on;
  115. x=[0:39];
  116. y=[0:(N*M-1)];
  117. z=[0:N*M+4*M-1];
  118.  
  119. stem(x, wejsciowy); %sekwencja bitów przed modulacją
  120.  
  121. f2=figure;
  122. stem(y, nadprobkowane); %sekwencja bitów po nadpróbkowaniu
  123.  
  124. f3=figure;
  125. plot(z, I,'k-'); %GMSK_I
  126.  
  127. f4=figure;
  128. plot(z, Q,'k-'); %GMSK_Q
  129.  
  130. f5=figure;
  131. plot(z, zmodulowany,'k-'); %sygnał zmodulowany
  132.  
  133. f6=figure;
  134. plot(osx, FDP,'k-'); %filtr
Advertisement
Add Comment
Please, Sign In to add comment