Advertisement
Guest User

Untitled

a guest
May 19th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.33 KB | None | 0 0
  1. disp("NiDUC2P Szybkie Sumatory")
  2. disp("Temat: FEC")
  3. disp("In : Tablica losowa 1000bit")
  4. disp("Out: Procent poprawnego przesłania")
  5. disp("Koder->Kanal->Dekoder->Analiza")
  6. disp(" ")
  7.  
  8. clear;
  9. clc;
  10.  
  11. noiseProbability = 0.1; % Prawdopodobieństwo przejścia bitu w stan przeciwny
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.     signal_length_H = 1000;
  26.    
  27.     n = 7; %# liczba bitĂłw na sĹ‚owo
  28.     k = 4; %# liczba bitĂłw informacyjnych na sĹ‚owo
  29.    
  30.     signal_H = randi([0,1],signal_length_H,1);
  31.    
  32.     if mod(signal_length_H,k)~=0 %uzupelniamy dodatkowymi zerami
  33.     zeros_num_H = k - mod(signal_length_H,k);
  34.         for i = 1:zeros_num_H
  35.             signal_H(signal_length_H+i) = 0;
  36.         end
  37.     else
  38.  
  39.     zeros_num_H = 0;  %liczba dodatkowych zer
  40.     end
  41.     signal_length_H = signal_length_H + zeros_num_H;
  42.     nwords_H = signal_length_H/k; %ilosc slow
  43.     signal_H = vec2mat(signal_H, nwords_H); %zamiana na macierz po 4 slowa
  44.  
  45.     % KODER %----------------------------------------------------------
  46.     encoded_H = zeros(n,nwords_H); %macierz zakodowanych sĹ‚Ăłw (na razie pusta)
  47.    
  48.    
  49.  
  50.  
  51.     for j=1:nwords_H
  52.     word = signal_H(1+(j-1)*k:k*j); %blok do zakodowania - dowolne 4 bity
  53.     code = encode(word,n,k); %kodowanie
  54.  
  55.     encoded_H(1+(j-1)*n:n*j) = code; %dodawanie zakodowanych sĹ‚Ăłw do macierzy
  56.  
  57.     end
  58.    
  59.     %##################### kanał
  60.    
  61.     %encoded_H(9) = ~encoded_H(9);
  62.    
  63.     for j=1:nwords_H
  64.         %word_noised_H = encoded_H(1+(j-1)*n:n*j);
  65.        
  66.         codewordNoised_H   = canalMakeNoiseND(encoded_H(1+(j-1)*n:n*j), 1,n, noiseProbability );
  67.         encoded_H(1+(j-1)*n:n*j) = codewordNoised_H;
  68.        
  69.     end
  70.    
  71.     %#####################
  72.    
  73.     decoded_H = zeros(k,nwords_H); %macierz zakodowanych sĹ‚Ăłw (na razie pusta)
  74.    
  75.     for j=1:nwords_H
  76.        
  77.     enc_word = encoded_H(1+(j-1)*n:n*j); %dodawanie zakodowanych sĹ‚Ăłw do macierzy
  78.     dec_word = decode(enc_word,n,k); %blok do zakodowania - dowolne 4 bity
  79.     decoded_H(1+(j-1)*k:k*j) = dec_word;
  80.  
  81.     end
  82.    
  83.    
  84.     bad_words = 0;
  85.    
  86.     for j=1:nwords_H
  87.        
  88.     correct_word = signal_H(1+(j-1)*k:k*j);
  89.     received_word = decoded_H(1+(j-1)*k:k*j);
  90.    
  91.     numerr = biterr(correct_word,received_word);
  92.     disp(numerr);
  93.    
  94.         if(numerr ~= 0)
  95.        
  96.         bad_words = bad_words + 1;  
  97.        
  98.         end
  99.    
  100.     end
  101.    
  102.     err_ratio=bad_words/nwords_H;
  103.     disp("Stosunek błędnych słów do całości = " + bad_words + "/" + nwords_H);
  104.    
  105.    
  106.     % Zapis do pliku
  107. correct_total = nwords_H-bad_words;
  108.  
  109. result_array = [bad_words, correct_total];
  110. dlmwrite('E:\PWr\NiDUC\errors.csv', result_array, '-append');
  111.    
  112.    
  113.    
  114.    
  115.    
  116.     function result = canalMakeNoiseND( arr, n, N, noiseProbability )
  117.   result = arr;
  118.   for i = 1:n
  119.     for j = 1:N
  120.       if(rand()> noiseProbability )
  121.         result(i,j) = result(i,j)*round(rand());
  122.       end
  123.     end
  124.   end
  125.  
  126.   return;
  127. end
  128.  
  129. function result = canalMakeNoise2D( arr, N, noiseProbability )
  130.   result = arr;
  131.     for j = 1:N
  132.       if(rand()> noiseProbability )
  133.         result(j) = result(j)*round(rand());
  134.       end
  135.     end
  136.   return;
  137. end
  138.  
  139. function result = generateRandomBitsArrays( n,N ) %# n - how many arrays, N - how many bits
  140.  result = randi([0,1],N,n);
  141.  return;
  142. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement