资源描述
用matlab模拟FEC和交织两种方式
用matlab模拟FEC和交织两种方式
FEC(前向纠错方式):
交织
>> s1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56];
>> x1=(reshape(s1,8,7))';
>> x1(2,2)=0;x1(2,3)=0;
>> x1(2,4)=0;x1(2,5)=0;
>> s2=reshape(x1,1,56);
>> x2=reshape(s2,7,8);
>> x2(2,2)=10;x2(2,3)=11;
>> s3=reshape(x2',1,56);
>> a=[s1,s2,s3];
>> plot(s1,s2);
x1 =
1 2 3 4 5 6 7 8
9 0 0 0 0 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
L=1000;
M=4;%每个符号的比特数
N=2^M-1;%编码后码字长度
K=N-4;%信息长度
MSG=randint(L,1);%随机产生L比特信号
TP=gftuple([-1:N-1]',M);%产生加罗华域元素
PG=rspoly(N,K);%产生生成式
[CODE,ADDED]=rsenco(MSG,TP,K);%编码
NOI=rand(length(CODE)/M,1)<03;%加入3%的噪声
NOI=(NOI*ones(1,M))';%产生突发错误
NOI=NOI(:);
CODE_NOI=rem(CODE+NOI,2);%噪声加入信号
[DEC,ERR,CCODE,ERR_C]=rsdeco(CODE_NOI,TP,K);%译码
MSG=[MSG;zeros(ADDED,1)];%调整长度
max(abs(DEC-MSG));%比较
X=[1:length(NOI)];
Z=[1:M*N:length(NOI)];
Y=zeros(1,length(Z));
Z=[Z;Z];
Y=[Y+min(ERR_C);Y+max(ERR_C)];
subplot(211);
plot(X,NOI,'yo',X,ERR_C,'rx',Z,Y,'g-');
title('Error Detection Record');
xlabel('o--placed error;x--detected error;vertical bar: RS-DECO section.');
axis([1,length(NOI),min(ERR_C),max(ERR_C)]);
X=[1:length(MSG)];
Z=[1:M*K:length(MSG)];
Y=zeros(1,length(Z));
Z=[Z;Z];
Y=[Y;Y+max(MSG)];
subplot(212);
plot(X,MSG,'yo',X,DEC,'rx',Z,Y,'g-');
title('Message and Decoded Signal Comparison');
xlabel('o--original message;x--decoded result.');
axis([1,length(MSG),min(min(MSG)),max(max(MSG))]);
st1 = 27221; st2 = 4831; % States for random number generator
n = 7; k = 4; % Parameters for Hamming code
msg = randint(k*500,1,2,st1); % Data to encode
code = encode(msg,n,k,'hamming/binary'); % Encoded data
% Create a burst error that will corrupt two adjacent codewords.
errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];
% With Interleaving
%------------------
inter = randintrlv(code,st2); % Interleave.
inter_err = bitxor(inter,errors); % Include burst error.
deinter = randdeintrlv(inter_err,st2); % Deinterleave.
decoded = decode(deinter,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, with interleaving:');
[number_with,rate_with] = biterr(msg,decoded) % Error statistics
% Without Interleaving
%---------------------
code_err = bitxor(code,errors); % Include burst error.
decoded = decode(code_err,n,k,'hamming/binary'); % Decode.
disp('Number of errors and error rate, without interleaving:');
[number_without,rate_without] = biterr(msg,decoded) % Error statistics
Number of errors and error rate, with interleaving:
number_with =
0
rate_with =
0
Number of errors and error rate, without interleaving:
number_without =
4
rate_without =
0.0020
>> msg=randint(k*500,1,2,st1);
>> code = encode(msg,n,k,'hamming/binary');
>> errors = zeros(size(code)); errors(n-2:n+3) = [1 1 1 1 1 1];
>> inter = randintrlv(code,st2);
>> inter_err = bitxor(inter,errors);
>> deinter = randdeintrlv(inter_err,st2);
>> decoded = decode(deinter,n,k,'hamming/binary');
>> disp('Number of errors and error rate, with interleaving:');
Number of errors and error rate, with interleaving:
>> code_err = bitxor(code,errors);
>> decoded = decode(code_err,n,k,'hamming/binary');
>> disp('Number of errors and error rate, without interleaving:');
Number of errors and error rate, without interleaving:
>> [number_without,rate_without] = biterr(msg,decoded);
L=1000;
M=4;%每个符号的比特数
N=2^M-1;%编码后码字长度
K=N-4;%信息长度
MSG=randint(L,1);%随机产生L比特信号
TP=gftuple([-1:N-1]',M);%产生加罗华域元素
PG=rsgenpoly(N,K);%产生生成式
[CODE,ADDED]=rsenco(MSG,TP,K);%编码
R=[0:0.01:1];%错误率
for j=1:length(R) %循环修改错误率
NOI=rand(length(CODE)/M,1)<R(j);%加入R%的噪声
NOI=(NOI*ones(1,M))';%产生突发错误
NOI=NOI(:);
CODE_NOI=rem(CODE+NOI,2);%噪声加入信号
[DEC,ERR,CCODE,ERR_C]=rsdeco(CODE_NOI,TP,K);%译码
MSG=[MSG;zeros(ADDED,1)];%调整长度
error=0;%错误码计数初值
Q=length(DEC);%码长度
for i=1:Q %循环寻找错误码
if(MSG(i)~=DEC(i))
error=error+1;
end
end
p(j)=error/Q;%误码率
展开阅读全文