📄 interleaver.m
字号:
function [input,output] = Interleaver(que, B, M)
%
% usage: conv interleaver
% parameters : que--codes befor interleaving; B--buffer depth; M--number of the buffers
% date : 2007-10-12
if nargin < 3; M = 2; end; % 交织支路
if nargin < 2; B = 4; end; % 缓存寄存器数目
Line = 2; Col = B*(B-1)*M; % 设置矩阵行列参数
if nargin < 1; que = 1:(Line * Col); end; % 生成序列
que_arr = (reshape(que, Col, Line))'; % 对序列整形至Line*Col的矩阵
[cout_pre, cout_post] = Count(B, M); % 计数器,用于依次读出的数据的地址跳转
output_t = zeros(Line,Col); % 初始化
arr1 = zeros(1,Col);
arr2 = que_arr(1,1:Col);
for k = 1:Line+1; % 对两个数据块(pre和post)分别读取,输出数据
for i = 1:Col;
if (cout_pre(i) ~= 0)
output_t(k,i) = arr1(cout_pre(i)); % 对pre数据块按pre计数器取址读数据
else
output_t(k,i) = arr2(cout_post(i)); % 对post数据块按post计数器取址读数据
end;
end;
arr1 = arr2;
if (k == 1) % 对第一个数据块做特别处理,因为对它而言,并无前一块数据.所以将所有数据块全部清零
arr2 = que_arr(k+1,1:Col);
elseif (k == Line)
arr2 = zeros(1,Col);
end;
end;
input = que_arr
output = cat(2,output_t(1,1:Col),output_t(2,1:Col),output_t(3,1:Col)) % 将矩阵数据整形至串行数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -