Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % 22.10.2020 r.
- % 171632 Marta Trzaska
- % Zad.1 Modulator/demodulator sygnału 16QAM
- beta=1;
- % 1. Generowanie wektora wejściowego:
- %Dane wejściowe
- N = 40;
- M = 100;
- %Wektor wejściowy
- wejsciowy=randi([0,1],[1,N]);
- % 2. Rozdzielenie wektora wejściowego na sekcje 4-bitowe
- wejsciowy4bit=reshape(wejsciowy,[4,10]);
- % 3. Podział na I oraz Q
- I=zeros(1,10);
- Q=zeros(1,10);
- for i=1:10
- if(wejsciowy4bit(1,i)==0 && wejsciowy4bit(2,i)==0)
- I(i)=-3;
- end
- if(wejsciowy4bit(1,i)==0 && wejsciowy4bit(2,i)==1)
- I(i)=-1;
- end
- if(wejsciowy4bit(1,i)==1 && wejsciowy4bit(2,i)==1)
- I(i)=1;
- end
- if(wejsciowy4bit(1,i)==1 && wejsciowy4bit(2,i)==0)
- I(i)=3;
- end
- if(wejsciowy4bit(3,i)==1 && wejsciowy4bit(4,i)==0)
- Q(i)=-3;
- end
- if(wejsciowy4bit(3,i)==1 && wejsciowy4bit(4,i)==1)
- Q(i)=-1;
- end
- if(wejsciowy4bit(3,i)==0 && wejsciowy4bit(4,i)==1)
- Q(i)=1;
- end
- if(wejsciowy4bit(3,i)==0 && wejsciowy4bit(4,i)==0)
- Q(i)=3;
- end
- end
- % 4. Nadpróbkowanie M-krotne
- wejsciowe_I=zeros(1,1000); % ls*M=10*1000
- wejsciowe_Q=zeros(1,1000); % ls*M=10*1000
- for i=1:10
- for k=1:M
- wejsciowe_I(1,i*M-M+k)=I(i);
- end
- end
- % 5. Odpowiedź impulsowa filtru typu podniesiony cosinus
- T=100; %czas trwania symbolu
- t=-100;
- for i=1:201 %odp impuls. filtru obejmuje 2 symbole (200 próbek)
- if((t==(T/(2*beta))) || (t==(-T/(2*beta))))
- h(i)=(pi/(4*T))*sinc(1/(2*beta));
- else
- h(i)=(1/T)*sinc(t/T)*cos(pi*beta*t/T)/(1-(2*beta*t/T)^2);
- end
- t=t+1;
- end
- % Modulator: 6. Filtracja (przy użyciu splotu)
- wyjsciowe_I=conv(wejsciowe_I,h);
- wyjsciowe_Q=conv(wejsciowe_Q,h);
- % Modulator: 7. Modulacja
- time=[0:100/1200:100-100/1200];
- sinus=sin(2*pi*time);
- cosinus=cos(2*pi*time);
- mod_I=wyjsciowe_I.*sinus;
- mod_Q=wyjsciowe_Q.*cosinus;
- mod_16QAM=mod_I+mod_Q;
- % Demodulator: 8. Rozdzielenie na tory I i Q
- odebrany_I = mod_16QAM.*sinus;
- odebrany_Q = mod_16QAM.*cosinus;
- % Demodulator: 9. Całkowanie
- suma_zdemod_I = zeros(1,10);
- suma_zdemod_Q = zeros(1,10);
- for i=1:10
- for j=1:100
- suma_zdemod_I(1,i)=suma_zdemod_I(1,i) + odebrany_I(1,(i-1)*100 +j+100);
- suma_zdemod_Q(1,i)=suma_zdemod_Q(1,i) + odebrany_Q(1,(i-1)*100 +j+100);
- end
- end
- % Demodulator: 10. Decyzja - progi
- I_det=zeros(1,10);
- Q_det=zeros(1,10);
- for i=1:10
- if suma_zdemod_I(i) >= 0
- if suma_zdemod_I(1, i) < 50 I_det(1,i) = 1;
- else I_det(1,i) = 3;
- end
- elseif suma_zdemod_I(1,i) < 0
- if suma_zdemod_I(1, i) < -50 I_det(1,i) = -3;
- else I_det(1,i) = -1;
- end
- end
- if suma_zdemod_Q(i) >= 0
- if suma_zdemod_Q(1, i) < 50 Q_det(1,i) = 1;
- else Q_det(1,i) = 3;
- end
- elseif suma_zdemod_Q(1,i) < 0
- if suma_zdemod_Q(1, i) < -50 Q_det(1,i) = -3;
- else Q_det(1,i) = -1;
- end
- end
- end
- % Demodulator: 11. Dane wyjściowe
- wyjscie=zeros(1,N);
- wyjscie4=zeros(4,10);
- for i=1:10
- if(I_det(1,i)==-3)
- wyjscie4(1,i) = 0;
- wyjscie4(2,i) = 0;
- elseif(I_det(1,i)==-1)
- wyjscie4(1,i) = 0;
- wyjscie4(2,i) = 1;
- elseif(I_det(1,i)==1)
- wyjscie4(1,i) = 1;
- wyjscie4(2,i) = 1;
- elseif(I_det(1,i)==3)
- wyjscie4(1,i) = 1;
- wyjscie4(2,i) = 0;
- end
- if(Q_det(1,i)==-3)
- wyjscie4(3,i) = 1;
- wyjscie4(4,i) = 0;
- elseif(Q_det(1,i)==-1)
- wyjscie4(3,i) = 1;
- wyjscie4(4,i) = 1;
- elseif(Q_det(1,i)==1)
- wyjscie4(3,i) = 0;
- wyjscie4(4,i) = 1;
- elseif(Q_det(1,i)==3)
- wyjscie4(3,i) = 0;
- wyjscie4(4,i) = 0;
- end
- end
- wyjscie=reshape(wyjscie4,[1 40]);
- %wyświetlanie wykresów
- hold on;
- x=[1:40];
- grid on;
- plot(x, wejsciowy,'ko'); %sekwencja bitów przed modulacją
- plot(x, wejsciowy,'ko'); %sygnał zmodulowany
- plot(x, wejsciowy,'ko'); %sekwencja bitów po demodulacji
- mod_16QAM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement