?? mrandomizer.m
字號:
function [Out,BlkSize] = mRandomizer(In,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
% 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: mRandomizer.m.rca $
% $Revision: 1.6 $
% $Date: Thu Feb 1 15:58:53 2007 $
% 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
%if m>36
if m>60
%code blocks larger than 60 bytes
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
if m<=36
%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 ...
]';
else %(The maximum code block length for CTC is 60 bytes.)
seq = zeros(36,1,InClass);
seq(1:60) = ...
[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 148 225 122 71 29 146 77 109 175 109 227 108 75 105 187 ...
117 155 61 90 143 223 32 194 194 ]';
end
%allocate output
%Out=zeros(m,n,InClass);
Out=255.*ones(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 + -