www.gusucode.com > DS-cdma仿真matlab程序 > code8/cdma/final21_extra.m

    %*********************************************************************
%        This program simulates a predetection selective combining
%			receiver for a Rayleigh fading channel 
%        
%        AUTHOR: Wenbin Luo
%        DATE  : 04/28/01
%
%			final21_extra.m
% 
%********************************************************************

clear all;
%close all;

format long;
%set up the threshold Vt 
Vt = 0;

Plot_Pe = [];

N = 16;
x_num = 10000;
plot_EbNo = -30:2:20; %-20:2:10;
for EbNo = -30:2:20,
   
%convert back from dB
Eb_No = EbNo; %dB
Eb_No = 10.^(Eb_No/10);
%assume No = 2;
No = 2;
Eb = No * Eb_No;
%calculate power p
Tc = 1;
Ts = N * Tc;
p = Eb / Ts;

%generate BPSK symbols randomly with value +1 or -1
x = bingen(x_num);
x_original = x;
x = sqrt(p)*x;

%generate Rayleigh fading
[env1,env2] = fade_diversity(length(x),0.5);

%generate faded sequence
x_fad1 = env1.*x';
x_fad1 = x_fad1';

x_fad2 = env2.*x';
x_fad2 = x_fad2';

%DS-SS modulate symbols with user code
c = bingen(N);
y_fad1 = ds_mod(c(:),x_fad1);
y_fad2 = ds_mod(c(:),x_fad2);

%scale by appropriate power factor
%y = sqrt(p)*y;

%add AWGN to signal
y_fad1 = awgn(y_fad1,1);
y_fad2 = awgn(y_fad2,1);

%DS-SS demodulate symbols with user code
x_de1 = ds_demod(c(:),y_fad1);
x_de2 = ds_demod(c(:),y_fad2);

%choose branch with larger BENR
ind1 = find(abs(x_de1) >= abs(x_de2));
ind2 = find(abs(x_de1) <  abs(x_de2));

x_de(ind1) = x_de1(ind1);
x_de(ind2) = x_de2(ind2);

%decision
x_de(find(x_de < 0)) = -1;
x_de(find(x_de >=0)) =  1;

Pe = length(find(x_original - x_de))/x_num;
Plot_Pe = [Plot_Pe Pe];
end %end for EbNo

%display the calculated Pd and Pfa
Plot_Pe

%plot Pe versus Eb/No
%subplot(2,1,1)
semilogy(plot_EbNo,Plot_Pe,'ro-')
xlabel('Eb/No (dB)')
ylabel('BER')
s=sprintf('BER versus Eb/No in Rayleigh fading and AWGN');
title(s);
grid on;