Informe Tarea N°1 Neil

download Informe Tarea N°1 Neil

of 10

description

Articulo

Transcript of Informe Tarea N°1 Neil

  • INFORME TAREA N1

    SISTEMAS DE COMUNICACIONES PTICAS

    POR:

    JOHN JAIRO ARANGO QUINTERO

    ID 000015263

    PRESENTADO A:

    NEIL GUERRERO

    MAESTRA EN INGENIERA DE TELECOMUNICACIONES

    UNIVERSIDAD PONTIFICIA BOLIVARIANA

    MEDELLN

    SEPTIEMBRE 24 DE 2010

  • ANLISIS DEL CDIGO EN MATLAB DE LA SIMULACIN N2 En las lneas 8 a 15 se realiza la definicin de variables.

    8. Fs = 40e9; % sampling frequency

    9. Fb = 1e9; % Bit rate

    10. Fc = 5e9; % Carrier frequency

    11. Fc1 = 10e9; % Carrier frequency

    12. Fc2 = 15e9; % Carrier frequency

    13. N_of_sym = 20000;

    14. phase_Base = 0;%46*pi/180;

    15. Noise_level = 8;

    En las lneas 18 a 22 se lleva cabo la generacin de 3 mensajes aleatorios. 18. M = 8; % Alphabet size

    19. x = randint(N_of_sym,1,M); %First PRBS

    20. x1 = randint(N_of_sym,1,M); %Second PRBS

    21. x2 = randint(N_of_sym,1,M); %Third PRBS

    22. Nsamp = Fs/Fb;

    En las lneas 26 a 29 se realiza la modulacin 8PSK. 26. %y=modulate(modem.qammod(M),x);

    27. y = modulate(modem.pskmod(M),x);

    28. y1 = modulate(modem.pskmod(M),x1);

    29. y2 = modulate(modem.pskmod(M),x2);

    En las lneas 33 a 35 se genera el pulso rectangular con sobre muestreo. 33. ypulse = rectpulse(y,Nsamp);

    34. ypulse1 = rectpulse(y1,Nsamp);

    35. ypulse2 = rectpulse(y2,Nsamp);

    En las lneas 39 a 46 se implementa un filtro Gaussiano. Tambien se puede observar el diagrama de ojo de la seal transmitida 39. BT = .4; % 3-dB bandwidth-symbol time

    40. OF = Nsamp/2; % Oversampling factor (i.e., number of samples

    per symbol)

    41. NT = 1; % 2 symbol periods to the filters peak.

    42. h = gaussfir(BT,NT,OF);

    43. %hfvt = fvtool(h,'impulse');

    44. y_up = upsample(y,Nsamp);

    45. ypulse_g = filter(h,1,y_up);

    46. eyediagram(ypulse_g(1:2000),Nsamp*2); title('Transmission');

  • Diagrama de ojo creado en la lnea 46

    En las lneas 50 a 52 se introduce ruido AWGN en el pulso Gaussiano. Tambin se puede apreciar el diagrama de ojo de la seal con ruido 50. ynoisy = awgn(ypulse,Noise_level,'measured');

    51. ynoisy_g = awgn(ypulse_g,Noise_level,'measured');

    52. eyediagram(ynoisy_g(1:2000),Nsamp*2); title('Noisy Signal');

    Diagrama de ojo creado en la lnea 52

    -0.5 0 0.5-0.1

    -0.05

    0

    0.05

    0.1

    Time

    Am

    plit

    ude

    Eye Diagram for In-Phase Signal

    -0.5 0 0.5-0.1

    -0.05

    0

    0.05

    0.1

    Time

    Am

    plit

    ude

    Transmission

    -0.5 0 0.5-0.1

    -0.05

    0

    0.05

    0.1

    Time

    Am

    plit

    ude

    Eye Diagram for In-Phase Signal

    -0.5 0 0.5-0.1

    -0.05

    0

    0.05

    0.1

    Time

    Am

    plit

    ude

    Noisy Signal

  • En las lneas 56 a 60 se le implementa a la seal un filtro de acoplamiento en el receptor. Se puede apreciar tambin el diagrama de ojo de la seal en el receptor. 56. ypulse_rec_g = filter(h,1,ynoisy_g); 57. ypulse_rec_g = ypulse_rec_g(Nsamp/2+1:end-Nsamp/2); 58. eyediagram(ypulse_rec_g(1:2000),Nsamp*2); title('Receiver'); 59. % figure, stem(real(ynoisy_g(1:1000))); hold on; 60. % stem(real(ypulse_rec_g(1:1000)),'r'); hold off;

    Diagrama de Ojo creado en la lnea 58

    En las lneas 65 a 69 se hace muestreo en el receptor con el fin de sacar la constelacin de la seal en el receptor. 65. ydownsamp = intdump(ynoisy,Nsamp);

    66. ydownsamp_g = intdump(ynoisy_g,Nsamp);

    67. ydownsamp_rec_g = intdump(ypulse_rec_g,Nsamp);

    68. scatterplot(ydownsamp); title('Constellation Diagram

    Rectangular Pulse');

    69. scatterplot(ydownsamp_rec_g,1,0,'r.'); title('Constellation

    Diagram Rise Cosine Pulse with filter');

    -0.5 0 0.5-0.05

    0

    0.05

    Time

    Am

    plit

    ude

    Eye Diagram for In-Phase Signal

    -0.5 0 0.5-0.05

    0

    0.05

    Time

    Am

    plit

    ude

    Receiver

  • Diagrama de constelacin creado en la lnea 68

    Diagrama de constelacin creado en la lnea 69

    En las lneas 73 a 75 se hace la modulacin de la seal 8PSK con ruido. 73. z=demodulate(modem.pskdemod(M),ydownsamp);

    74. z1=demodulate(modem.pskdemod(M),ydownsamp_rec_g);

    75. z2=demodulate(modem.pskdemod(M),ydownsamp_g);

    En las lneas 79 a 96 se calcula y se muestra en pantalla la rata de error de smbolo. 79. [num_rec,rt_rec]= symerr(x,z);

    80. rt_rec = -1*log10(rt_rec);

    81. [num_g_w,rt_g_w]= symerr(x(1:end-1),z1);

    82. rt_g_w = -1*log10(rt_g_w);

    83. [num_g_wo,rt_g_wo]= symerr(x,z2);

    84. rt_g_wo = -1*log10(rt_g_wo);

    87.disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')

    88. disp(['Error Rate Rectangular: ' num2str(rt_rec)])

    89. disp(['Error Rate Gaussian with Filter: ' num2str(rt_g_w)])

    90. disp(['Error Rate Gaussian withot Filter: ' num2str(rt_g_wo)])

    -1 -0.5 0 0.5 1

    -1

    -0.5

    0

    0.5

    1

    Quadra

    ture

    In-Phase

    Constellation Diagram Rectangular Pulse

    -0.03 -0.02 -0.01 0 0.01 0.02 0.03

    -0.03

    -0.02

    -0.01

    0

    0.01

    0.02

    0.03

    Quadra

    ture

    In-Phase

    Constellation Diagram Rise Cosine Pulse with filter

  • 91.disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Error Rate Rectangular: Inf Error Rate Gaussian with Filter: Inf Error Rate Gaussian withot Filter: Inf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    Visualizacin en pantalla del error

    En las lneas 96 a 135 se hace la modulacin IQ a las tres seales generadas. 96. %1. Primera RF

    97. F = Fc/Fs;

    98. t_c = 0:1:length(real(ypulse))-1;

    99. In_phase = cos(2*pi*F.*t_c + phase_Base);

    100. Quadrature = sin(2*pi*F.*t_c + phase_Base);

    101. In_phase_np = cos(2*pi*F.*t_c);

    102. Quadrature_np = sin(2*pi*F.*t_c);

    103. % figure, plot(In_phase(1:100)); hold on;

    104. % plot(real(ypulse(1:100)),'r');

    105. IP_c = real(ypulse)'.*In_phase;

    106. Q_c = imag(ypulse)'.*Quadrature;

    107. RF_signal = IP_c + Q_c;

    108. %figure, stem(RF_signal(1:100));

    110. %1. Segunda RF

    111. F1 = Fc1/Fs;

    112. t_c = 0:1:length(real(ypulse))-1;

    113. In_phase1 = cos(2*pi*F1.*t_c + phase_Base);

    114. Quadrature1 = sin(2*pi*F1.*t_c + phase_Base);

    115. In_phase1_np = cos(2*pi*F1.*t_c);

    116. Quadrature1_np = sin(2*pi*F1.*t_c);

    117. % figure, plot(In_phase1(1:100)); hold on;

    118. % plot(real(ypulse(1:100)),'r');

    110. IP_c1 = real(ypulse1)'.*In_phase1;

    120. Q_c1 = imag(ypulse1)'.*Quadrature1;

    121. RF_signal1 = IP_c1 + Q_c1;

    122. %figure, stem(RF_signal(1:100));

    124. %1. Tercera RF

    125. F2 = Fc2/Fs;

    126. t_c = 0:1:length(real(ypulse))-1;

    127. In_phase2 = cos(2*pi*F2.*t_c + phase_Base);

    128. Quadrature2 = sin(2*pi*F2.*t_c + phase_Base);

    129. In_phase2_np = cos(2*pi*F2.*t_c);

    130. Quadrature2_np = sin(2*pi*F2.*t_c);

    131. % figure, plot(In_phase2(1:100)); hold on;

    132. % plot(real(ypulse(1:100)),'r');

    133. IP_c2 = real(ypulse2)'.*In_phase2;

  • 134. Q_c2 = imag(ypulse2)'.*Quadrature2;

    135. RF_signal2 = IP_c2 + Q_c2;

    136. %figure, stem(RF_signal(1:100));

    En las lneas 140 a 150 se saca el espectro de las tres seales generadas. 140. Fd=1;

    141. Ei_u = RF_signal + RF_signal1 + RF_signal2; %% RF SIGNAL

    142. Npoints_1 = length(RF_signal);

    143. Ei_F = fftshift(fft(Ei_u));

    144. Ei_Fa = abs(Ei_F)./length(Ei_F);

    145. Frek_1 = ((-(Npoints_1)/2:((Npoints_1/2)-1))).*Fs/Npoints_1;

    146. figure

    147. plot(Frek_1/1e6,20*log10(Ei_Fa),'r');

    148. xlabel('Frequency [MHz]')

    149. ylabel('Power [dB]')

    150. title('Power spectrum of RF received signal')

    Espectro de potencia de la seal de RF en el receptor creado en la lnea 147

    En la lnea 154 se introduce ruido AWGN a la seal generada en las lneas 140 a 150. 154. Ei_u = awgn(Ei_u,Noise_level,'measured');

    En las lneas 159 a 161 se implementa en el receptor el oscilador local para poder hacer la demodulacin IQ. 159. %1 Local Oscillator 160. E_demod_BB = Ei_u.*In_phase_np; 161. E_demod_BB2 = Ei_u.*Quadrature_np;

    En las lneas 163 a 169 se implementa un filtro pasa bajo para quitarle ruido a la seal. 163. %2 Low pass filter

    -2 -1.5 -1 -0.5 0 0.5 1 1.5 2

    x 104

    -300

    -250

    -200

    -150

    -100

    -50

    0

    Frequency [MHz]

    Pow

    er

    [dB

    ]

    Power spectrum of RF received signal

  • 164. Wp = (Fb + 100e6)/(Fs/2); Ws = (Fb + 250e6)/(Fs/2); 165. Rp = 3; Rs = 35; 166. [n,Ws] = cheb2ord(Wp,Ws,Rp,Rs); 167. [bRec,aRec] = cheby2(n,Rs,Ws); 168. % figure, freqz(bRec,aRec,2048,Fs); 169. % title('Pasa bajos');

    En las lneas 171 a 175 se implementa otro filtro para separar las seales generadas. 171. %3 Filtering 172. EBB1 = filter(bRec,aRec,E_demod_BB); 173. EBB2 = filter(bRec,aRec,E_demod_BB2); 174. EBB1 = EBB1 - mean(EBB1); 175. EBB2 = EBB2 - mean(EBB2);

    En las lneas 177 a 188 se observa el espectro despus de hacer la modulacin IQ. 177. %4 Power Spectrum 178. Fd=1; 179. Ei_u = EBB1; 180. Npoints_1 = length(RF_signal); 181. Ei_F = fftshift(fft(Ei_u)); 182. Ei_Fa = abs(Ei_F)./length(Ei_F); 183. Frek_1 = ((-(Npoints_1)/2:((Npoints_1/2)-1))).*Fs/Npoints_1; 184. figure 185. plot(Frek_1/1e6,20*log10(Ei_Fa),'r'); 186. xlabel('Frequency [MHz]') 187. ylabel('Power [dB]') 188. title('Power spectrum of RF received signal after quadrature

    demodulator').

    Espectro de potencia de la seal de RF en el receptor luego de la demodulacin en cuadratura, creado en la lnea 185

    -2 -1.5 -1 -0.5 0 0.5 1 1.5 2

    x 104

    -350

    -300

    -250

    -200

    -150

    -100

    -50

    0

    Frequency [MHz]

    Pow

    er

    [dB

    ]

    Power spectrum of RF received signal after quadrature demodulator

  • En las lneas 190 a 192 se ajusta el retardo de la seal demodulada. 190. %5 Adjusting the delay 191. EBB1 = EBB1(n+floor(n/2):end); 192. EBB2 = EBB2(n+floor(n/2):end);

    En las lneas 194 a 198 se lleva a cabo el sobre muestreo. 194. %6 Downsampling 195. EBB1_downsamp = intdump(EBB1(1:5000*Nsamp),Nsamp); 196. EBB2_downsamp = intdump(EBB2(1:5000*Nsamp),Nsamp); 197. RF_signal_recovered = EBB1_downsamp + i.*EBB2_downsamp; 198. scatterplot(RF_signal_recovered); title('Constellation after

    demodulation');

    Diagrama de constelacin luego de la demodulacin, creado en la lnea 198

    En las lneas 201 a 223 se realiza la demodulacin de cada una de las subportadoras empleando el formato PSK. 201. %%%% Demodulation first RF subcarrier 202. %RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 203. RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 204. xm = x(1:length(RF_signal_received_dem))'; 205. %Bits_rec = n_MSK_signal_regeneration(x); 206. [num_RF_received,rt_RF_received]= symerr(xm,RF_signal_received_dem); 207. %[num_RF_received_Bits,rt_RF_received_Bits]= symerr(Bits,Bits_rec); 208. rt_RF_received = -1*log10(rt_RF_received); 209. %rt_RF_received_Bits = -1*log10(rt_RF_received_Bits); 211. %%%% Demodulation second RF subcarrier 212. %RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 213. RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 214. xm1 = x1(1:length(RF_signal_received_dem))';

    -0.6 -0.4 -0.2 0 0.2 0.4 0.6

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    Quadra

    ture

    In-Phase

    Constellation after demodulation

  • 215. [num_RF_received1,rt_RF_received1]=

    symerr(xm1,RF_signal_received_dem); 216. rt_RF_received1 = -1*log10(rt_RF_received1); 218. %%%% Demodulation third RF subcarrier 219. %RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 220. RF_signal_received_dem =

    demodulate(modem.pskdemod(M),RF_signal_recovered); 221. xm2 = x2(1:length(RF_signal_received_dem))'; 222. [num_RF_received2,rt_RF_received2]=

    symerr(xm2,RF_signal_received_dem); 223. rt_RF_received2 = -1*log10(rt_RF_received2); 224. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    225.

    226. disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')

    227. disp(['Error Rate first RF detected without phase recovery: '

    num2str(rt_RF_received)])

    228. disp(['Error Rate second RF detected without phase recovery: '

    num2str(rt_RF_received1)])

    229. disp(['Error Rate third RF detected without phase recovery: '

    num2str(rt_RF_received2)])

    230. disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Error Rate first RF detected without phase recovery: 2.4437 Error Rate second RF detected without phase recovery: 0.053057 Error Rate third RF detected without phase recovery: 0.057793 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    Visualizacin en pantalla del error