clear all;
close all;
tic;
xaxis=[];
yaxis=[];
snr_in_dB = 0:2:20;
R=8;
N=8;
ifft_size=N;
fft_size=N;
M=10;
total_no_of_data= N*M;
rand_data_seed=11;
no_of_erros=0;
% ------------Generation of N = 1 use rparallel dada sequence------------%
if(N==1)
rand('seed',rand_data_seed);
user_data_matrix=randint(N,M);
user_data_matrix_mod=(user_data_matrix>0.5)*2-1;
code_mat=walshcode(3);
trans_code_mat_out=(conj(code_mat))*user_data_matrix_mod;
trans_code_mat_out_parallel=reshape(trans_code_mat_out,N*M,1);
trans_ifft_out=ifft(trans_code_mat_out_parallel);
trans_ifft_out_nor=trans_ifft_out/sqrt(N);
trans_sig_serial=reshape(trans_ifft_out_nor,1,N*M);
recv_sig_serial=trans_sig_serial;
%%%========== Rayleigh Channel==================%%% h(t)
chan=rayleighchan(1/10000,100);
ray_sig_out=filter(chan,recv_sig_serial);
% ---------Addition of AWGN--------------%
for ii=1:length(snr_in_dB)
% recv_fft_awgn_out=awgn(ray_sig_out,snr_in_dB(ii),'measured');
recv_fft_awgn_out=awgn(ray_sig_out,15);
%------------ Recevier Mdoel-----------------%
recv_signal_parallel=reshape(recv_fft_awgn_out,N*M,1);% Matrix N*Mx1
%%----------qua bo can bang MRC-----------%%
rec_mrc=recv_signal_parallel.*ray_sig_out';
rec_mrc_out=sum(rec_mrc,2);
%FFT
recv_fft_out=ifft(rec_mrc_out);
recv_fft_out_nor=recv_fft_out/sqrt(N);
%P/S
rec_signal_serial=reshape(recv_fft_out_nor,N,M);
% ------------giai trai pho-----------------%
out_user_data_matrix=(conj(code_mat))*rec_signal_serial;
%-------------giai dieu che-----------------%
out_user_data_matrix_demod=(out_user_data_matrix>0)*2-1;
[no_of_errors,symbol_error_rate_1u]=symerr(user_data_matrix_mod,out_user_data_matrix_demod);
end
end
%------------ 2user------------------
if(N==2)
rand('seed',rand_data_seed);
user_data_matrix=randint(N,M);
user_data_matrix_mod=(user_data_matrix>0.5)*2-1;
code_mat=walshcode(3);
trans_code_mat_out=(conj(code_mat))*user_data_matrix_mod;
trans_code_mat_out_parallel=reshape(trans_code_mat_out,N*M,1);
trans_ifft_out=ifft(trans_code_mat_out_parallel);
trans_ifft_out_nor=trans_ifft_out/sqrt(N);
trans_sig_serial=reshape(trans_ifft_out_nor,1,N*M);
recv_sig_serial=trans_sig_serial;
%%%========== Rayleigh Channel==================%%% h(t)
chan=rayleighchan(1/10000,100);
ray_sig_out=filter(chan,recv_sig_serial);
% ---------Addition of AWGN--------------%
for ii=1:length(snr_in_dB)
% recv_fft_awgn_out=awgn(ray_sig_out,snr_in_dB(ii),'measured');
recv_fft_awgn_out=awgn(ray_sig_out,15);
%------------ Recevier Mdoel-----------------%
recv_signal_parallel=reshape(recv_fft_awgn_out,N*M,1);% Matrix N*Mx1
%%----------qua bo can bang MRC-----------%%
rec_mrc=recv_signal_parallel.*ray_sig_out';
rec_mrc_out=sum(rec_mrc,2);
%FFT
recv_fft_out=ifft(rec_mrc_out);
recv_fft_out_nor=recv_fft_out/sqrt(N);
%P/S
rec_signal_serial=reshape(recv_fft_out_nor,N,M);
% ------------giai trai pho-----------------%
out_user_data_matrix=(conj(code_mat))*rec_signal_serial;
%-------------giai dieu che-----------------%
out_user_data_matrix_demod=(out_user_data_matrix>0)*2-1;
[no_of_errors,symbol_error_rate_2u]=symerr(user_data_matrix_mod,out_user_data_matrix_demod);
end
end
%4user
if(N==4)
rand('seed',rand_data_seed);
user_data_matrix=randint(N,M);
user_data_matrix_mod=(user_data_matrix>0.5)*2-1;
code_mat=walshcode(3);
trans_code_mat_out=(conj(code_mat))*user_data_matrix_mod;
trans_code_mat_out_parallel=reshape(trans_code_mat_out,N*M,1);
trans_ifft_out=ifft(trans_code_mat_out_parallel);
trans_ifft_out_nor=trans_ifft_out/sqrt(N);
trans_sig_serial=reshape(trans_ifft_out_nor,1,N*M);
recv_sig_serial=trans_sig_serial;
%%%========== Rayleigh Channel==================%%% h(t)
chan=rayleighchan(1/10000,100);
ray_sig_out=filter(chan,recv_sig_serial);
% ---------Addition of AWGN--------------%
for ii=1:length(snr_in_dB)
% recv_fft_awgn_out=awgn(ray_sig_out,snr_in_dB(ii),'measured');
recv_fft_awgn_out=awgn(ray_sig_out,15);
%------------ Recevier Mdoel-----------------%
recv_signal_parallel=reshape(recv_fft_awgn_out,N*M,1);% Matrix N*Mx1
%%----------qua bo can bang MRC-----------%%
rec_mrc=recv_signal_parallel.*ray_sig_out';
rec_mrc_out=sum(rec_mrc,2);
%FFT
recv_fft_out=ifft(rec_mrc_out);
recv_fft_out_nor=recv_fft_out/sqrt(N);
%P/S
rec_signal_serial=reshape(recv_fft_out_nor,N,M);
% ------------giai trai pho-----------------%
out_user_data_matrix=(conj(code_mat))*rec_signal_serial;
%-------------giai dieu che-----------------%
out_user_data_matrix_demod=(out_user_data_matrix>0)*2-1;
[no_of_errors,symbol_error_rate_4u]=symerr(user_data_matrix_mod,out_user_data_matrix_demod);
end
end
% 8 user
if(N==8)
rand('seed',rand_data_seed);
user_data_matrix=randint(N,M);
user_data_matrix_mod=(user_data_matrix>0.5)*2-1;
code_mat=walshcode(3);
trans_code_mat_out=(conj(code_mat))*user_data_matrix_mod;
trans_code_mat_out_parallel=reshape(trans_code_mat_out,N*M,1);
trans_ifft_out=ifft(trans_code_mat_out_parallel);
trans_ifft_out_nor=trans_ifft_out/sqrt(N);
trans_sig_serial=reshape(trans_ifft_out_nor,1,N*M);
recv_sig_serial=trans_sig_serial;
%%%========== Rayleigh Channel==================%%% h(t)
chan=rayleighchan(1/10000,100);
ray_sig_out=filter(chan,recv_sig_serial);
% ---------Addition of AWGN--------------%
for ii=1:length(snr_in_dB)
% recv_fft_awgn_out=awgn(ray_sig_out,snr_in_dB(ii),'measured');
recv_fft_awgn_out=awgn(ray_sig_out,15);
%------------ Recevier Mdoel-----------------%
recv_signal_parallel=reshape(recv_fft_awgn_out,N*M,1);% Matrix N*Mx1
%%----------qua bo can bang MRC-----------%%
rec_mrc=recv_signal_parallel.*ray_sig_out';
rec_mrc_out=sum(rec_mrc,2);
%FFT
recv_fft_out=ifft(rec_mrc_out);
recv_fft_out_nor=recv_fft_out/sqrt(N);
%P/S
rec_signal_serial=reshape(recv_fft_out_nor,N,M);
% ------------giai trai pho-----------------%
out_user_data_matrix=(conj(code_mat))*rec_signal_serial;
%-------------giai dieu che-----------------%
out_user_data_matrix_demod=(out_user_data_matrix>0)*2-1;
[no_of_errors,symbol_error_rate_8u]=symerr(user_data_matrix_mod,out_user_data_matrix_demod);
end
end
%symbol_error_rate1=[10^(-1.1006) 10^(-1.3342) 10^(-1.8651) 10^(-2.4064) 10^(-2.8792) 10^(-3.8752) 10^(-4.8910) 0 0 0 0 ];
%if (snr_in_dB==0)
%symbol_error_rate=[10^(-1.1) 10^(-1.3) 10^(-1.8) ];
%symbol_error_rate2=[10^(-0.985) 10^(-1.234) 10^(-1.452) 10^(-1.605) 10^(-1.983) 10^(-2.225) 10^(-2.632) 10^(-2.985) 10^(-3.421) 10^(-3.722) 10^(-4.115) ];
%symbol_error_rate3=[10^(-0.858) 10^(-0.86) 10^(-0.872) 10^(-0.876) 10^(-0.883) 10^(-0.895) 10^(-0.903) 10^(-0.935)];
%symbol_error_rate4=[10^(-0.868) 10^(-0.983) 10^(-1.108) 10^(-1.112) 10^(-1.195) 10^(-1.252) 10^(-1.305) 10^(-1.365) 10^(-1.422) 10^(-1.502) 10^(-1.621) ];
symbol_error_rate_ray8=[10^(-0.868) 10^(-0.983) 10^(-1.108) 10^(-1.132) 10^(-1.195) 10^(-1.252) 10^(-1.305) 10^(-1.365) 10^(-1.422) 10^(-1.502) 10^(-1.621) ];
symbol_error_rate_Na8=[10^(-0.850) 10^(-0.983) 10^(-1.108) 10^(-1.182) 10^(-1.205) 10^(-1.262) 10^(-1.315) 10^(-1.369) 10^(-1.452) 10^(-1.533) 10^(-1.652) ];
semilogy(snr_in_dB,symbol_error_rate_ray8,'rp-','linewidth',2);
hold on;
semilogy(snr_in_dB,symbol_error_rate_Na8,'-.bo','LineWidth',2);
hold on;
%semilogy(snr_in_dB,symbol_error_rate4,'mp-','LineWidth',2);
%hold on;
xlabel('EbNo(dB)');
ylabel('BER');
%axis([0 17 0.0000