Buscar

Decodificação_por_arranjo_padrao

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 )

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando