📄 ser_13_final.m
字号:
%% THis prog is working
N = 10000; % nb. of symbols for AWGN simulation
E_s=1;
N_0=10.^(0:-.2:-5);
rho_v = E_s./N_0;
N_d = 1000; % number of data symbols sent over each channel
N_ch = 1000; % number of channel simulations
E_s = 1; % symbol energy
d_min = sqrt(2); % min distance for dominant error event
rho_v = E_s./N_0; % average SISO SNR
N_e_av=2;
%*********** theoretical BER over AWGN channel*****************************
SER_AWGN = 0.5*erfc(sqrt(rho_v*d_min^2/2)/sqrt(2));
semilogy(10*log10(rho_v),SER_AWGN)
axis([0 15 1e-20 1])
xlabel 'E_s/N_0 [dB]'
ylabel 'symbol error rate (SER)'
hold on
%%%%%%%%%%%%%%% simulation of BER over AWGN channel
s = sqrt(E_s/2) * (sign(randn(1,N)) );
% loop over SNR
SER_AWGN_sim = [];
for sig_n2 = N_0 % vector of noise powers
rho = E_s/sig_n2;
% noise vector at variance sig_n2
n = sqrt(sig_n2/2)*(randn(1,N) + j*randn(1,N));
% received signal
r = s + n;
% determine SER
SER = 1- mean((sign(real(r)) == sign(real(s))));
BER=mean((sign(real(r)) -sign(real(s))))
SER_AWGN_sim = [SER_AWGN_sim SER];
end
semilogy(10*log10(rho_v),SER_AWGN_sim,'o')
drawnow;
disp 'simulated SER for AWGN channel'
hold on;
pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% for SISO Rayleigh channel
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%% theoretical SER over Rayleigh channel
% exact equation for BER (see Proakis, (14-3-7))
BER_Rayl = 0.5*(1-sqrt(rho_v./(1+rho_v)));
% convert to approx. eqn. for SER
SER_Rayl = 0.5*(1-sqrt(rho_v*d_min^2/4./(1+rho_v*d_min^2/4)));
semilogy(10*log10(rho_v),SER_Rayl,'r-')
axis([0 30 1e-5 1])
disp 'analytical SER for Rayleigh channel'
hold on;
%%%%%%%%%%%%%%% simulation of SER over Rayleigh channel
% transmitted BPSK symbols
s = sqrt(E_s/2) * (sign(randn(1,N_d)));
% loop over SNR
SER_Rayl_sim = [];
for sig_n2 = N_0
rho = E_s/sig_n2; % average SISO SNR
% noise vector at variance sig_n2
n = sqrt(sig_n2/2)*(randn(1,N_d) + j*randn(1,N_d));
%loop over channel realizations
SER = 0;
for i=1:N_ch;
% channel transfer coefficient (complex Gaussian)
h = sqrt(1/2)*(randn(1) + j*randn(1));
% received signal
y = h*s + n;
% channel "equalization":
z = y/h;
% determine SER
S_err = ((sign(real(z)) ~= sign(real(s))));
SER = SER + mean(S_err);
end
SER_Rayl_sim = [SER_Rayl_sim SER/N_ch];
end
semilogy(10*log10(rho_v),SER_Rayl_sim,'ro');
axis([0 30 1e-5 1]);
hold on;
disp 'simulated SER for Rayleigh channel'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% for SIMO Rayleigh channel; M = 2 diversity branches
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%% analytical SER over M = 2 diversity branches Rayleigh channel
M = 2; % number of diversity branches
% Chernoff bound
%SER_M2_cb = N_e_av*(rho_v*d_min^2/4/M).^(-M);
%semilogy(10*log10(rho_v),SER_M2_cb,'g--')
disp 'upper bound on SER computed by Chernoff-bound for Rayleigh channel; M = 2 diversity branches'
% convert to approx. eqn. for SER
SER_Ray2 = 0.25*(1-sqrt(rho_v*d_min^2/8./(1+rho_v*d_min^2/8)));
semilogy(10*log10(rho_v),SER_Ray2,'g--')
%%%%%%%%%%%%%%% simulation of SER over M = 2 diversity branches Rayleigh channel
% transmitted QPSK symbols
s = sqrt(E_s/2) * (sign(randn(1,N_d)));
% loop over SNR
SER_M2_sim = [];
for sig_n2 = N_0
rho = E_s/sig_n2; % average SISO SNR
% noise vector at variance sig_n2
n = sqrt(sig_n2/2)*(randn(M,N_d) + j*randn(M,N_d));
%loop over channel realizations
SER = 0;
for i=1:N_ch;
% channel transfer coefficient (complex Gaussian)
h = sqrt(1/2)*(randn(M,1) + j*randn(M,1));
% received signal
y = h*s + n;
% maximum ratio combining
z = h'*y;
% determine SER
S_err = ((sign(real(z)) ~= sign(real(s))));
SER = SER + mean(S_err);
end
SER_M2_sim = [SER_M2_sim SER/N_ch];
end
semilogy(10*log10(rho_v),SER_M2_sim,'go')
axis([0 30 1e-5 1])
disp 'simulated SER for Rayleigh channel with diversity; M = 2'
pause
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -