Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
% Decodificação por Arranjo padrão clear all clc total_erros = 0; %nas primeiras linhas do código, para iniciar o contador em zero total_erros_corrigidos = 0;%nas primeiras linhas do código, para iniciar o contador em zero TotalDeBitsErrados = 0; p = input ( ' Digite a probabilidade de transição do canal BSC (p):'); m=3; %m = input('Digite a ordem da matriz:'); %escolha de ordem da matriz pelo usuário (é necessário restringir os valores possíveis para que não se possa inserir negativos e outros). linhas=4; colunas=8; N = input('Digite o número de palavras-código (N):'); %H = [1 1 1 0 1 0 0 1 ; 0 1 1 1 0 1 0 0; 0 0 1 1 1 0 1 1; 0 1 0 1 1 1 0 0]; %matriz de paridade %x = [1 1 0 0 0 1 0]; %palavra estimada %y = [1 1 0 1 0 1 0 1]; %palavra recebida %[linhas,colunas] = size(H); %extraindo o número de linhas e colunas da Matriz H %iteracoes=input('Digite o número de iterações a ser realizadas: '); %CODIFICADOR: R = [1 0 0 0 1 0 1 1;0 1 0 0 0 1 1 1; 0 0 1 0 1 1 1 0; 0 0 0 1 1 1 0 1]; R_parid = R(:,[colunas-linhas+1:end]); H_parid = R_parid'; [c,j] = size(H_parid); H_ident = eye(c); H = horzcat(H_parid,H_ident); VetorNulo = [ 0 0 0 0 ]; %for ordem_RM= 1:m for cont=1:N % R = matriz geradora ordem m. % R = flipud(R); % R_parid = R(:,[colunas-linhas+1:end]); % H_parid = R_parid'; % [c,j] = size(H_parid); % H_ident = eye(c); % H = horzcat(H_parid,H_ident); %y = [1 1 0 1 0 1 0 1]; %palavra recebida [linhas,colunas] = size(H); %extraindo o número de linhas e colunas da Matriz H u = randi(0:1,1,m+1); %fonte de mensagem aleatória, com probabilidade 50% para cada bit. Onde o tamanho do vetor mensagem é sempre m+1 palavraCodigo = mod(u*R,2); %cria a palavra código (multiplicação matricial da mensagem "u" com a matriz geradora "R") %CANAL BSC: palavraComRuido = bsc(palavraCodigo,p); %palavra código após passar pelo canal BSC inserindo ruído k=transpose(H); Sindrome=mod(palavraComRuido*k,2); erro = isequal(VetorNulo,Sindrome); if erro == 1 PalavraSemRuido = palavraComRuido; end if erro == 0 total_erros = total_erros + 1; while erro == 0 % Decodificador por arranjo padrão - implementar passos para todos os possiveis erros(líderes de classe) possiveis de serem corrigido de acordo com a capaidade de correção do codio utilizado. E1 = mod(palavraComRuido-[1 0 0 0 0 0 0 0],2); NovaSindrome=mod(E1*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E1; break end E2 = mod(palavraComRuido-[0 1 0 0 0 0 0 0],2); NovaSindrome=mod(E2*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E2; break end E3 = mod(palavraComRuido-[0 0 1 0 0 0 0 0],2); NovaSindrome=mod(E3*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E3; break end E4 = mod(palavraComRuido-[0 0 0 1 0 0 0 0],2); NovaSindrome=mod(E4*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E4; break end E5 = mod(palavraComRuido-[0 0 0 0 1 0 0 0],2); NovaSindrome=mod(E5*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E5; break end E6 = mod(palavraComRuido-[0 0 0 0 0 1 0 0],2); NovaSindrome=mod(E6*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E6; break end E7 = mod(palavraComRuido-[0 0 0 0 0 0 1 0],2); NovaSindrome=mod(E7*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E7; break end E8 = mod(palavraComRuido-[0 0 0 0 0 0 0 1],2); NovaSindrome=mod(E8*k,2); erro = isequal(VetorNulo,NovaSindrome); if erro == 1 PalavraSemRuido = E8; break end break end if erro == 1; total_erros_corrigidos = total_erros_corrigidos + 1; end if erro == 0; PalavraSemRuido = palavraComRuido; % assumindo que não houve correção, a palavra não será corrigida sendo igual a palavra na entrada do decodificador end end BitsErrados = mod(palavraCodigo-PalavraSemRuido,2); NumeroDeBitsErrados = sum(BitsErrados.'); TotalDeBitsErrados = TotalDeBitsErrados + NumeroDeBitsErrados; disp ( palavraCodigo ) disp ( palavraComRuido ) disp ( PalavraSemRuido ) disp ( Sindrome ) disp ( total_erros ) disp ( total_erros_corrigidos ) end probabilidadeErro = total_erros / N; probabilidadeErroDeBit = TotalDeBitsErrados / (N*8); probabilidadeErroComCorrecao = (total_erros - total_erros_corrigidos) / N; disp ( probabilidadeErro ) disp ( probabilidadeErroComCorrecao ) disp ( probabilidadeErroDeBit )
Compartilhar