Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- disp("NiDUC2P Szybkie Sumatory")
- disp("Temat: FEC")
- disp("In : Tablica losowa 1000bit")
- disp("Out: Procent poprawnego przesłania")
- disp("Koder->Kanal->Dekoder->Analiza")
- disp(" ")
- clear;
- clc;
- noiseProbability = 0.1; % Prawdopodobieństwo przejścia bitu w stan przeciwny
- signal_length_H = 1000;
- n = 7; %# liczba bitów na słowo
- k = 4; %# liczba bitów informacyjnych na słowo
- signal_H = randi([0,1],signal_length_H,1);
- if mod(signal_length_H,k)~=0 %uzupelniamy dodatkowymi zerami
- zeros_num_H = k - mod(signal_length_H,k);
- for i = 1:zeros_num_H
- signal_H(signal_length_H+i) = 0;
- end
- else
- zeros_num_H = 0; %liczba dodatkowych zer
- end
- signal_length_H = signal_length_H + zeros_num_H;
- nwords_H = signal_length_H/k; %ilosc slow
- signal_H = vec2mat(signal_H, nwords_H); %zamiana na macierz po 4 slowa
- % KODER %----------------------------------------------------------
- encoded_H = zeros(n,nwords_H); %macierz zakodowanych słów (na razie pusta)
- for j=1:nwords_H
- word = signal_H(1+(j-1)*k:k*j); %blok do zakodowania - dowolne 4 bity
- code = encode(word,n,k); %kodowanie
- encoded_H(1+(j-1)*n:n*j) = code; %dodawanie zakodowanych słów do macierzy
- end
- %##################### kanał
- %encoded_H(9) = ~encoded_H(9);
- for j=1:nwords_H
- %word_noised_H = encoded_H(1+(j-1)*n:n*j);
- codewordNoised_H = canalMakeNoiseND(encoded_H(1+(j-1)*n:n*j), 1,n, noiseProbability );
- encoded_H(1+(j-1)*n:n*j) = codewordNoised_H;
- end
- %#####################
- decoded_H = zeros(k,nwords_H); %macierz zakodowanych słów (na razie pusta)
- for j=1:nwords_H
- enc_word = encoded_H(1+(j-1)*n:n*j); %dodawanie zakodowanych słów do macierzy
- dec_word = decode(enc_word,n,k); %blok do zakodowania - dowolne 4 bity
- decoded_H(1+(j-1)*k:k*j) = dec_word;
- end
- bad_words = 0;
- for j=1:nwords_H
- correct_word = signal_H(1+(j-1)*k:k*j);
- received_word = decoded_H(1+(j-1)*k:k*j);
- numerr = biterr(correct_word,received_word);
- disp(numerr);
- if(numerr ~= 0)
- bad_words = bad_words + 1;
- end
- end
- err_ratio=bad_words/nwords_H;
- disp("Stosunek błędnych słów do całości = " + bad_words + "/" + nwords_H);
- % Zapis do pliku
- correct_total = nwords_H-bad_words;
- result_array = [bad_words, correct_total];
- dlmwrite('E:\PWr\NiDUC\errors.csv', result_array, '-append');
- function result = canalMakeNoiseND( arr, n, N, noiseProbability )
- result = arr;
- for i = 1:n
- for j = 1:N
- if(rand()> noiseProbability )
- result(i,j) = result(i,j)*round(rand());
- end
- end
- end
- return;
- end
- function result = canalMakeNoise2D( arr, N, noiseProbability )
- result = arr;
- for j = 1:N
- if(rand()> noiseProbability )
- result(j) = result(j)*round(rand());
- end
- end
- return;
- end
- function result = generateRandomBitsArrays( n,N ) %# n - how many arrays, N - how many bits
- result = randi([0,1],N,n);
- return;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement