📄 rough.m
字号:
% Program to generate a linear block code for coder and decoder
disp('enter value of n,k');
n=input('enter coefficient of n= ');
k=input('enter value of k= ');
disp('enter value of parity matrix');
disp('** Please note that no row or column should have all zeros ');
disp('** No row should be part an of identity matrix');
fprintf('order of parity matrix P= %d x %d\n',k,n-k);
p=input('enter parity matrix P ');
disp(p);
G=[eye(k),p]; % generator matrix
disp('generator matrix= ');
disp(G);
m=input('enter message word ');
for i=1:1:n-k % loop to generate code from message
code(1,i)=0;
for j=1:1:k
code(1,i) = rem((code(1,i) + m(1,j)*p(j,i)),2);
end
fprintf('\n\tcode%d = %d',i,code(1,i)); % display code
end
fprintf('\n\n\tCode Word For Given Messege Bit:\n\t');
codeword=[m code];
disp(codeword); % display full codeword
fprintf('\n\n');
power= 2^k;
mesg=zeros(power,k);
for i=1:1:power-1 % loop to generate message bit table
mesg_dec= bi2de(mesg(i,:),'left-msb');
mesg_inc= mesg_dec + 1;
mesg(i+1,:)= de2bi(mesg_inc,k,'left-msb');
end
parvec=zeros(1,n-k);
for q=1:1:power
for i=1:1:n-k % loop to generate codeword table
code(1,i)=0;
for j=1:1:k
code(1,i) = rem((code(1,i) + mesg(q,j)*p(j,i)),2);
end
end
parvec(1,:)=(code);
vectab(q,:)=parvec(1,:);
end
codevectors=[mesg vectab];
for i=2:1:power % loop to generate sun of row table
weight(i-1,1)= sum(codevectors(i,:));
end
fullwt= [0;weight];
display('The full codeword table is ');
disp([codevectors fullwt]);
fprintf('\n Minimum distance\n');
Dmin= min(weight) % display minimum distance
fprintf('\nNumber of errors that can be detected are\n');
s= Dmin-1;
fprintf('s <= %d\n',s);
fprintf('\nNumber of errors that can be corrected are\n');
t= floor(s/2);
fprintf('t <= %d\n',t);
decode = input('If you want to decode then enter 1 else enter 0 : ');
% ask for user input to continue
if (decode==1)
[x,y]=size(p); % finding dimensions of matrix p
H = [p' eye(y)]; % generating h matrix
fprintf('The H matrix is\n');
disp(H);
r = input('Enter the recieved codeword ');
HT = H'
[u v]=size(HT); % finding dimensions of matrix h transpose
fprintf('\n');
fprintf('\nThe syndrome is \n');
for i=1:1:v % loop to generate syndrome
synd(1,i)=0;
for j=1:1:u
synd(1,i) = rem((synd(1,i) + r(1,j)*HT(j,i)),2);
end
end
disp(synd); % display synddrome
table = syndtable(H); % Produce decoding table.
syndrome_decimal = bi2de(synd,'left-msb'); % Convert to decimal.
disp(['Syndrome = ',num2str(syndrome_decimal),' (decimal), ',num2str(synd),' (binary)']);
correction_vector = table(1+syndrome_decimal,:) % generate and display correction vector
corrected_code = rem(correction_vector+r,2) % generate and display corrected vector
fprintf('\n');
disp('End of code');
else
fprintf('\n');
disp('End of code');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -