Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % 1.11.2020 r.
- % 171632 Marta Trzaska
- % Zad.2 Modulator/demodulator sygnału GMSK
- %Przyjęte wartości: N = 20, M = 100
- N = 40;
- M = 100;
- % 1.Generowanie wektora zawierającego N wartości binarnych 0/1
- wejsciowy=randi([0,1],[1,N]);
- % 2. Konwersja 0/1 na -1/1
- for i=1:N
- if(wejsciowy(i) == 0)
- wejsciowy(i) = -1;
- end
- end
- % 3. Nadpróbkowanie M-krotne
- nadprobkowane=zeros(1,N*M);
- for i=1:N
- for k=1:M
- nadprobkowane(i*M-M+k)=wejsciowy(i);
- end
- end
- % 4. Generowanie odpowiedzi umpulsowej filtru Gaussowskiego
- BT=0.5;
- T=100; %czas trwania symbolu, M
- t=-2*T;
- h=zeros(1,4*M+1);
- for i=1:401 %odp impuls. filtru obejmuje 4 symbole
- delta=sqrt(log10(2)/(2*pi*BT));
- h(i)=exp((-(t/T).^2)/(2*delta^2))/(sqrt(2*pi)*delta);
- t=t+1;
- end
- % 5. Filtrowanie sygnału
- po_filtrowaniu=conv(h,nadprobkowane);
- % 6. Całkowanie
- po_calkowaniu=cumsum(po_filtrowaniu);
- po_calkowaniu = po_calkowaniu.*0.01;
- % 7. Generowanie sin i cos
- I_wej=cos(po_calkowaniu);
- Q_wej=sin(po_calkowaniu);
- % 8. Generowanie nośnej
- l_okresow=5*N;
- krok=l_okresow/(N*M+4*M);
- czas=l_okresow-l_okresow/(N*M+4*M);
- for t=0:krok:czas
- sinus=sin(2*pi*t);
- cosinus=cos(2*pi*t);
- end
- % 9. Mnożenie sygnałów scałkowanych z nośną
- I=I_wej.*cosinus;
- Q=Q_wej.*sinus;
- % 10. Sumowanie wyników
- zmodulowany = I + Q;
- %DEMODULATOR:
- % 11. Zmodulowany sygnał rozdzielamy na dwa tory (I i Q)
- GMSK_cos = zmodulowany.*cosinus;
- GMSK_sin = zmodulowany.*sinus;
- % 12. Idealny filtr dolnoprzepustowy
- p=-M/2;
- for i=1:(M+1)
- osx(i) = p;
- if p == 0
- FDP(i) = 1;
- else
- FDP(i) = sin(p/2)/(p/2);
- end
- p=p+1;
- end
- % 13. Filtrowanie przez DP
- po_filtracji_I = conv(FDP,GMSK_cos);
- po_filtracji_Q = conv(FDP,GMSK_sin);
- % 14. Różniczkowanie (tory I i Q osobno)
- dIdt(1) = po_filtracji_I(1);
- dQdt(1) = po_filtracji_Q(1);
- for i=2:(N*M + 4*M + M)
- dIdt(i) = po_filtracji_I(i) - po_filtracji_I(i-1);
- dQdt(i) = po_filtracji_Q(i) - po_filtracji_Q(i-1);
- end
- % 15. Obliczenie sygnału różnicowego
- syg_roz = po_filtracji_I.*dQdt - po_filtracji_Q.*dIdt;
- % 16. Całkowanie w czasie trwania symbolu
- calka=zeros(1,N*M);
- for i=251:4250
- calka(i)=calka(i) + syg_roz(i);
- end
- % 17. Detekcja
- grid on;
- x=[0:39];
- y=[0:(N*M-1)];
- z=[0:N*M+4*M-1];
- stem(x, wejsciowy); %sekwencja bitów przed modulacją
- f2=figure;
- stem(y, nadprobkowane); %sekwencja bitów po nadpróbkowaniu
- f3=figure;
- plot(z, I,'k-'); %GMSK_I
- f4=figure;
- plot(z, Q,'k-'); %GMSK_Q
- f5=figure;
- plot(z, zmodulowany,'k-'); %sygnał zmodulowany
- f6=figure;
- plot(osx, FDP,'k-'); %filtr
Advertisement
Add Comment
Please, Sign In to add comment