?? mpadrandomizer.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 + -