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

📄 mpadrandomizer.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
字号:
function [Out,BlkSize] = mPadRandomizer(In,DataSize,BlkSize)
% Randomizer for OFDMA of WiMAX IEEE 802.16-2004 , 8.4.9.1 
%
%     [Out,BlkSize] = mRandomizer(In,BlkSize)
%
% In      : input column vector or matrix (bytes, values 0 to 255)
%           one column per code block
% BlkSize : row vector, length = number of code blocks
%           number of padded payload data bytes for each code block
% DataSize : row vector, length = number of code blocks
%           number of un padded payload data bytes for each code block
% Out     : output column vector or matrix (bytes, values 0 to 255)
%           one column per code block
%
% The output block size is the same as the input block size. 
%
% Matlab 7 Release 14 SP2

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Property of Freescale
%  Freescale Confidential Proprietary
%  Freescale Copyright (C) 2005 All rights reserved
%  ----------------------------------------------------------------------------
%  $RCSfile: mPadRandomizer.m.rca $
%  $Revision: 1.1 $
%  $Date: Tue Oct  3 06:54:37 2006 $
%  Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[m,n] = size(In);
InClass=class(In);

%check dimensions
[x,y]=size(BlkSize);
if ((x~=1)|(y~=n))
   error('Error: BlkSize must be row vector with the same number of columns as In.');
end
if (any(BlkSize>m))
   error('Error: BlkSize does not match input matrix dimensions.');
end

PaddedIn=zeros(max(BlkSize),length(BlkSize),class(In));
for k=1:length(BlkSize),
    PaddedIn(1:DataSize(k),k)=In(1:DataSize(k),k);
    if DataSize(k)<BlkSize(k)
        PaddedIn(DataSize(k)+1:BlkSize(k),k)=255; %0xff padding
    end
end
In=PaddedIn;

if m>36
  %code blocks larger than 36 bytes (e.g. for zero-tailing CC)
  if n>1
     error('Error: Only one code block allowed for code blocks larger than 36 bytes.');
  end
  %generate randomizer sequence
  seq = zeros(BlkSize,1,class(In));
  InitState = 43244; %1010100011101100 = 0xa8ec
  ShiftReg = uint32(InitState);
  for k=1:BlkSize,
      seq(k)   = mod(bitshift(bitxor(ShiftReg,ShiftReg*2),-8),256);
      ShiftReg = mod(bitor(ShiftReg*256,uint32(seq(k))*2),65536);
  end
  %allocate output
  Out=zeros(m,n,InClass);
  %randomize code block
  Out(1:BlkSize) = bitxor(In(1:BlkSize),seq);
else
  %randomizer sequence for maximum code block length
  %(The maximum code block length for tail-biting CC is 36 bytes.)
  seq = zeros(36,1,InClass);
  seq(1:36) = ... 
   [ 249, 54, 22,180,119,185, 49,150,165,119,223, 48,194,162,143,207,...
      32,162,195,206,136,167, 51,210,168,239,242, 96, 45, 64,239,130,...
      97, 13, 70, 47 ...
   ]';

  %allocate output
  Out=zeros(m,n,InClass);
  %randomize code block after code block
  for k=1:n,
    Out(1:BlkSize(k),k) = bitxor(In(1:BlkSize(k),k),seq(1:BlkSize(k)));
  end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -