简介:
块交织器:
设计示例:
Matlab代码:
%Reed-Solomon码块交织器设计演示 %作者:Mathuranathan https://www.gaussianwaves.com %许可证-知识共享-cc by nc sa 3.0 clc; 清晰; %____________________________________________ %输入参数 %____________________________________________ %Reed-Solomon码的交织器设计 %RS代码参数 n=255;% RS码字长度 k=235;% 数据符号数量 b=20;% 通道预期损坏的符号数 %____________________________________________ p=n-k;% 奇偶校验符号数 t=p/2;% RS码纠错能力 fprintf('给定(%d,%d)Reed Solomon代码可以更正:%d个符号\n',n,k,fix(t)); fprintf('给定-来自通道的预期突发错误长度:%d个符号\n',b); disp(“_____________________________________________________________________________”); 如果(b>;t) fprintf('在这种情况下,交互可能会有所帮助\n'); 其他的 fprintf('在这种情况下,交互将无济于事\n'); 结束 disp(“_____________________________________________________________________________”); D=天花板(b/t)+1;% 集成层深度 内存=零(D,n);% 构造块交织器存储器 data='THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_';% 用作数据的常量模式 %如果n>; 长度(数据),然后重复该模式以构造长度为“n”的数据 数据=字符([repmat(data,[1,fix(n/length(data))]),数据(1:mod(n,length(数据))); %我们发送了D个类似数据块 intlvrInput=报告(数据(1:n),[1D]); fprintf('向交织器输入数据->;\n'); disp(char(intlvrInput)); disp(“_____________________________________________________________________________”); %INTERLEAVER公司 %逐行写入交织器 对于指数=1:D 内存(索引,1:end)=intlvrInput((索引-1)*n+1:索引*n); 结束 intlvrOutput=零(1,D*n); %从交织器逐列读取 对于索引=1:n intlvrOutput((索引-1)*D+1:索引*D)=内存(:,索引); 结束 %在第25个符号位置创建b个符号错误,以便在交错输出中进行测试 %在这种情况下,“*”表示错误 intlvrOutput(1,25:24+b)=零(1,b)+42; fprintf('\nInterleaver Output been corrupt by%d symbol burst error-marked by''*''->;\n',b); disp(char(intlvrOutput)); disp(“_____________________________________________________________________________”); %Deinteleaver公司 deintlvrOutput=零(1,D*n); %逐栏写入去交错符 对于索引=1:n 内存(:,索引)=intlvrOutput((索引-1)*D+1:索引*D)'; 结束 %逐行从解交错器读取 对于指数=1:D deintlvrOnput((索引-1)*n+1:索引*n)=内存(索引,1:结束); 结束 fprintf('去交织器输出->;\n'); disp(char(deintlvrOnput)); disp(“_____________________________________________________________________________”);
模拟结果: