Está en la página 1de 7

Lab #3

N = 10^6; % # de bits y simbolos


Eb_N0_dB = [0:20];
ip=randint(1,N); %donde los bits se generan
s = 2*ip-1; % BPSK

h= [0.2, 0.9, 0.3]; %respuesta de impulsion del canal de propagación


h1=0.9; %factor atenuante y su canal en frecuencia
L= length(h);

n = 1/sqrt(2)*[randn(1,N+L-1) + j*randn(1,N+L-1)]; % ruido AWGN


n1 = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % ruido para canal plano y
AWGN

K=1;
hM = toeplitz([h([2:end]) zeros(1,2*K+1-L+1)], [ h([2:-1:1])
zeros(1,2*K+1-L+1) ]);
P = zeros(1,2*K+1);
P(K+1) = 1;
c = [inv(hM)*P.'].';

for ii = 1:length(Eb_N0_dB)

y = s + 10^(-Eb_N0_dB(ii)/20)*n1; % AWGN
y1 = h1.*s + 10^(-Eb_N0_dB(ii)/20)*n1; %plano en la frecuencia
y2= conv(s,h)+ 10^(-Eb_N0_dB(ii)/20)*n; %plano selectivo en la
frecuencia

yHat = y1./h1; %canal plano ecualizado en la fecuencia

yFilt_zf = conv(y2,c); %ecualización de canal frecuencia ZF


ySamp_zf = yFilt_zf(K+2:N+2);

ipHat = real(y)>0; % BPSK y AWGN


ipHat1 = real(yHat)>0;%demodulacion BPSK
ipHat2 = real(ySamp_zf)>0; % frecuencia ZF

nErr(ii) = size(find([ip- ipHat]),2);


nErr1(ii) = size(find([ip- ipHat1]),2);
nErr1(ii) = size(find([ip- ipHat1]),2);
end

simBer = nErr/N; % BER


simBer1 = nErr1/N; %simulacion del canal en frecuencia en BER
simBer2 = nErr2/N; simulacion del BER en frecuencia selectiva
theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); %BER teorico
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_ray = 0.5.*(1-sqrt(EbN0Lin./(EbN0Lin+1)));

figure
semilogy(Eb_N0_dB,theoryBer ,'rs-','Linewidth',2); %BER teorico
hold on
semilogy(Eb_N0_dB,simBer1(1,:) ,'md-','Linewidth',2); %BER simulado en
frecuencia
hold on
semilogy(Eb_N0_dB,simBer2(1,:) ,'kv-','Linewidth',2); %BER simulado
selectivo en frecuencia
grid on
title('Gráfico del BER');
Lab #4
N = 10^6; % # de bits de simbolo
Eb_N0_dB = [0:20];
ip=randint(1,N); %bits generados
s = 2*ip-1; % BPSK

h= [0.2, 0.9, 0.3]; %respuesta de impuls del canal


h1=0.9;
L= length(h);

n = 1/sqrt(2)*[randn(1,N+L-1) + j*randn(1,N+L-1)];
n1 = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)];

%zero forcing
K=1;
hM1 = toeplitz([h([2:end]) zeros(1,2*K+1-L+1)], [ h([2:-1:1])
zeros(1,2*K+1-L+1) ]);
P = zeros(1,2*K+1);
P(K+1) = 1;
c = [inv(hM1)*P.'].';

t2=0;

for ii = 1:length(Eb_N0_dB)

y = s + 10^(-Eb_N0_dB(ii)/20)*n1;
y1 = h1.*s + 10^(-Eb_N0_dB(ii)/20)*n1;
y2= conv(s,h)+ 10^(-Eb_N0_dB(ii)/20)*n;

yHat = y1./h1;

yFilt_zf = conv(y2,c);
ySamp_zf = yFilt_zf(K+2:N+1+K);
t1=clock;

% MMSE
hAutoCorr = conv(h,fliplr(h));

hM2=hM1*hM1';
hM = hM2 + 1/2*10^(-Eb_N0_dB(ii)/10)*eye(2*K+1);

d = zeros(1,2*K+1);
d([-1:1]+K+1) = fliplr(h);

c_mmse = [inv(hM)*d.']';

yFilt_mmse = conv(y2,c_mmse);
ySamp_mmse = yFilt_mmse(K+2:N+1+K);

t2=t2+etime(clock,t1);
ipHat = real(y)>0;
ipHat1 = real(yHat)>0;
ipHat2 = real(ySamp_zf)>0;
ipHat3 = real(ySamp_mmse)>0;

nErr(ii) = size(find([ip- ipHat]),2);


nErr1(ii) = size(find([ip- ipHat1]),2);
nErr2(ii) = size(find([ip- ipHat2]),2);
nErr3(ii) = size(find([ip- ipHat3]),2);
end

simBer = nErr/N; % BER simulado AWGN


simBer1 = nErr1/N; %BER simulado canal plano en frecuencia
simBer2 = nErr2/N; %BER simulado selectivo en frecuencia ZF
simBer3 = nErr3/N; %BER simulado selectivo en frecuencia MMSE
theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); %BER teorico
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_ray = 0.5.*(1-sqrt(EbN0Lin./(EbN0Lin+1)));

figure

semilogy(Eb_N0_dB,theoryBer ,'rs-','Linewidth',2); %BER teorico


hold on
semilogy(Eb_N0_dB,simBer1(1,:) ,'md-','Linewidth',2); %BER simulado canal
plano en frecuencia
hold on
semilogy(Eb_N0_dB,simBer2(1,:) ,'kv-','Linewidth',2); %BER simulado
selectivo en frecuencia ZF
hold on
semilogy(Eb_N0_dB,simBer3(1,:) ,'bd-','Linewidth',2); %BER simulado
selectivo en frecuencia MMSE
hold on
semilogy(Eb_N0_dB,theoryBer_ray(1,:) ,'k-','Linewidth',2); %BER teorico
Rayleigh
grid on
Lab #5
ipBit=randint(1,nBitPerSym*nSym);
ipMod = 2*ipBit-1; % BPSK
xF = reshape(ipMod,nBitPerSym,nSym).';
xt = nFFT /sqrt(nFFT )*ifft(xF.').';
xtcp = [xt(:,[49:64]) xt];

nTap = 10;
ht = 1/sqrt(2)*1/sqrt(nTap)*(randn(1,nTap) + j*randn(1,nTap));
hF = fft(ht,nFFT);% Respuesta en frecuencia del canal de propagación

%Generación del AWGN


nt = 1/sqrt(2)*[randn(1,nSym*(80+nTap-1)) + j*randn(1,nSym*(80+nTap-1))];

simBer = nErr/N; % BER simulado AWGN


simBer1 = nErr1/N; %BER simulado canal plano en frecuencia
simBer2 = nErr2/N; %BER simulado selectivo en frecuencia ZF
simBer3 = nErr3/N; %BER simulado selectivo en frecuencia MMSE
theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); %BER teorico
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_ray = 0.5.*(1-sqrt(EbN0Lin./(EbN0Lin+1)));

end

simBer = nErr/(nSym*nBitPerSym);
EbN0Lin = 10.^(EbN0dB/10);
theoryBer = 0.5.*(1-sqrt(EbN0Lin./(EbN0Lin+1)));

figure
semilogy(EbN0dB,theoryBer,'bs-','LineWidth',2);
hold on
semilogy(EbN0dB,simBer,'mx-','LineWidth',2);
axis([0 10 10^-5 1])

También podría gustarte