Advertisement
Taha_404

Untitled

Dec 27th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.74 KB | None | 0 0
  1. order = 5;
  2.  
  3. poly1 = [1 0 0 0 0 1]; % X6+X5+X2+X+1
  4.  
  5. poly2 = [1 1 0 1 1 1]; %X6 + X + 1
  6.  
  7. poly3 = [1 1 1 1 0 1 ]; %X6+X5+X4+X+1
  8.  
  9. poly4 = [1 0 0 1 0 1];
  10.  
  11. %Generating Sequences
  12.  
  13. polyF = fliplr(poly1); % Flipped version of polynomial
  14.  
  15. register1 = [1 zeros(1,order-1)];
  16.  
  17. for i=1:(2^order -1)
  18.    
  19.     Seq1(i) = register1(1);
  20.    
  21.     register1 = [register1(2:order) polyF(order+1)* rem(sum(polyF(1:order).*register1(1:order)),2)];
  22.    
  23. end
  24.  
  25. register2 = [1 zeros(1,order-1)];
  26.  
  27. polyF = fliplr(poly2);
  28.  
  29. for i=1:(2^order -1)
  30.    
  31.     Seq2(i) = register2(1);
  32.    
  33.     register2 = [register2(2:order) polyF(order+1)* rem(sum(polyF(1:order).*register2(1:order)),2)];
  34.    
  35. end
  36.  
  37. register3 = [1 zeros(1,order-1)];
  38.  
  39. polyF = fliplr(poly3);
  40.  
  41. for i=1:(2^order -1)
  42.    
  43.     Seq3(i) = register3(1);
  44.    
  45.     register3 = [register3(2:order) polyF(order+1)* rem(sum(polyF(1:order).*register3(1:order)),2)];
  46.    
  47. end
  48.  
  49. register4 = [1 zeros(1,order-1)];
  50.  
  51. polyF = fliplr(poly4);
  52.  
  53. for i=1:(2^order -1)
  54.    
  55.     Seq4(i) = register4(1);
  56.    
  57.     register4 = [register4(2:order) polyF(order+1)* rem(sum(polyF(1:order).*register4(1:order)),2)];
  58.    
  59. end
  60.  
  61. %mapping sequences to -1 and 1
  62.  
  63. x1 = transpose(2*Seq1 -1);
  64.  
  65. x2 = transpose(2*Seq2 -1);
  66.  
  67. x3 = transpose(2*Seq3 -1);
  68.  
  69. x4 = transpose(2*Seq4-2);
  70.  
  71. GPN =[x1 x2 x3 x4]
  72.  
  73. N = 256000; % Number of bits
  74. N_Users = 4;
  75. ip_bits = randi([0 1],N,1) ; % Bits Generation
  76. ip_bits = reshape(ip_bits,[(N/N_Users),4]);
  77. BPSK = (ip_bits.*2)-1; %Reshaping to have 4 separate in BPSK
  78. Tx_Data = kron(BPSK(:,1),GPN(:,1)) + kron(BPSK(:,2),GPN(:,2)) + kron(BPSK(:,3),GPN(:,3)) + kron(BPSK(:,4),GPN(:,4));
  79.  
  80. %% Adding AWGN Noise %%
  81. Eb_BPSK = 1;
  82. BER_BPSK = zeros(4,9);
  83. RAND_VAR  = (randn(size(Tx_Data,1),size(Tx_Data,2)));
  84. BER1= [ ] ;
  85. BER2 = [ ] ;
  86. BER3 = [ ] ;
  87. BER4 = [ ] ;
  88. BER_Th = [ ];
  89. for SNR= 1:9
  90.     No_BPSK = size(GPN,1) / (10^(SNR/10));
  91.     Variance_BPSK = sqrt(No_BPSK/2);
  92.     Noise_BPSK = Variance_BPSK * (randn(size(Tx_Data,1),size(Tx_Data,2)));
  93.     Tx_Data_Noisy = Tx_Data + Noise_BPSK;
  94.     Rx_Data_RS = reshape(Tx_Data_Noisy,31,(N/N_Users));
  95.  
  96.     Rx_Data_RS = Rx_Data_RS' * GPN ;
  97.  
  98.     Demapping = sign(Rx_Data_RS);
  99.     BER1 = [BER1 sum((BPSK(:,1)) ~= (Demapping(:,1)))/(N/N_Users)];
  100.     BER2 = [BER2 sum((BPSK(:,2)) ~= (Demapping(:,2)))/(N/N_Users)];
  101.     BER3 = [BER3 sum((BPSK(:,3)) ~= (Demapping(:,3)))/(N/N_Users)];
  102.     BER4 = [BER4 sum((BPSK(:,4)) ~= (Demapping(:,4)))/(N/N_Users)];
  103.     BER_Th = [BER_Th 0.5*erfc(sqrt((10^(SNR/10))))];
  104. end
  105. %% P1otting %%
  106. %figure (1)
  107. semilogy(1:9,BER1,'-rx',1:9,BER2,'-bx',1:9,BER3,'-kx',1:9,BER4,'-gx','LineWidth',1.5);
  108. title ('Users BER');
  109. legend ('User 1','User 2','User 3', 'User 4', 'Classical BPSK');
  110. xlabel ('SNR (dB)');
  111. ylabel ('BER');
  112. grid on;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement