genPolarAuxCheckMatrix2.zip

  • 国学62313
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2021-03-05 17:38
    上传日期
极化码译码矩阵的生成(原始矩阵!!!!!!!!)
genPolarAuxCheckMatrix2.zip
  • genPolarAuxCheckMatrix2.m
    2.5KB
内容介绍
function [H,numInput] = genPolarAuxCheckMatrix2(varargin) %GENPOLARTANNER 此处显示有关此函数的摘要 % 根据极化码的码长和层数计算层矩阵 % 层数量为n,则码长为N = 2^n %H = genPolarAuxCheckMatrix(varargin) %numInput是主变量节点(u)的数量 %numAuxVar是辅助变量节点的数量 %有了这个函数以后就不需要用添加额外约束的方式放冻结位约束了,反而是降低约束数量的 %必须要考虑到,如果弄到最后一层,那么一些接收量就没有用了,需要考虑这个事情! if nargin == 1 n = varargin{1}; N = pow2(n); FZlookup = -ones(1,N); elseif nargin == 2 n = varargin{1}; N = pow2(n); FZlookup = varargin{2};%如果仅需要生成初始矩阵,不需要此参数,只需要变量n即可 end %生成第一层的矩阵,2N个变量节点,N个检查节点 H = zeros(N*(n+1),N*n);%N*(n+1)个变量节点,N*n个检查节点 d = 0; upstreamEmpty = find(FZlookup == 0);%0的位置 numInput = N - numel(upstreamEmpty);%非零元素数量 %如果在最后一层,那么需要记录一下,有消除掉的 for l = 1:n G_now = zeros(2*N,N); a = pow2(l-1); %当前的层对应的分支数 b = N/2/a; %当前的层对应的每一个分支的长度 c = 0; %目前的分支标号 for i = 1:a for j = 1:b G_now(c+b+j,c+j) = 1; end c = c + 2 * b; end G_now(1:(2*N+1):2*N.^2) = 1; %开始摘掉一些数(因为在本函数只需要生成初始矩阵,故注释掉此后两行) % G_now(upstreamEmpty,:) = 0;%删除为0的变量节点 % downstreamEmpty = find(sum(G_now,1) == 0); G_now(N+1:(2*N+1):2*N.^2) = 1; %设置检查节点连接下层变量节点 % (因为在本函数只需要生成初始矩阵,故注释掉此后两行) % G_now(:,downstreamEmpty) = 0; % upstreamEmpty = downstreamEmpty; H(d+1:d+2*N,d+1:d+N) = G_now; d = d + N; end % (因为在本函数只需要生成初始矩阵,故注释掉此后四行) %删除全0的行列,并记录下来删除的行列,不过现在想来,行(也就是变量节点的对应关系)不应该删除掉,而是应该保留下来。 % H(all(H==0,2),:) = []; % H(:,all(H==0,1)) = []; % H = H'; end
评论
    相关推荐