📄 mil.m
字号:
function [Out,BlkSize] = mIL(In,BlkSize,Ncpc)
% Interleaver of IEEE 802.16-2004 (WiMAX, OFDMA only)
%
% [Out,BlkSize] = mIL(In,BlkSize,Ncpc)
%
% In : input column vector or matrix
% one column per code block
% Out : output column vector or matrix
% one column per code block
% BlkSize: row vector, length = number of code blocks
% number of data elements in each code block (or column)
%
% Ncpc : number of coded bits per subcarrier (modulation mode)
% 1 = BPSK
% 2 = QPSK
% 4 = 16QAM
% 6 = 64QAM
%
% 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: mIL.m.rca $
% $Revision: 1.4 $
% $Date: Tue Aug 8 11:40:23 2006 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m,n]=size(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
%allocate output matrix
if islogical(In)
Out = logical(zeros(m,n));
else
Out = zeros(m,n,class(In));
end
%loop over all blocks
for b=1:n,
%Stage1: calculation of Ncbps and S
Ncbps = BlkSize(b);
s = ceil(Ncpc/2);
%check size
if (Ncbps/16/s)~=floor(Ncbps/16/s)
error('Error: blocksize/ceil(Ncbc/2)/16 must be an integer!');
end
%Stage2: First Permutation ... Maps adjacent bits to different modulated words
%mk = reshape(reshape([0:Ncbps-1],Ncbps/16,16)',Ncbps,1);
k = 0:Ncbps-1;
mk = (Ncbps/16) .* mod(k,16) + floor(k/16);
%Stage3: Second Permutation ... Alternately maps adjacent bits to more or less
% significant constellation bits.
jk = s*floor(mk/s) + mod(mk+Ncbps-floor(16*mk/Ncbps),s);
%Stage4: Interleave data
Out(jk+1,b) = In(1:Ncbps,b);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -