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

📄 mderandomizer.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
字号:
function [Out,BlkSize] = mDerandomizer(In,BlkSize)
% Derandomizer for OFDMA of WiMAX IEEE 802.16-2004 , 8.4.9.1
%
%     [Out,BlkSize] = mDerandomizer(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 payload data bytes for each code block (incl. 0xff)
%
% 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: mDerandomizer.m.rca $
%  $Revision: 1.6 $
%  $Date: Thu Feb  1 16:05:12 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>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 derandomizer 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);
    %derandomize 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);
    %derandomize 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 + -