⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interleaver.m

📁 该程序描述的是数字电视地面广播中卷积交织部分.因为是卷积交织所以最后结果中出现为的数值表示该值是前一包缓冲数据的数.但针对第一包数据做卷积交织时,这些零位置上最后确实自动补零.
💻 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 + -