📄 mdemodmappermindist.m
字号:
function [Out,BlkSize] = mDemodMapperMinDist(In,Channel,BlkSize,mode,BitShift)
%function [Out,BlkSize] = mDemodMapperMinDist(In,Channel,BlkSize,mode,BitShift)
% Demodulation Mapping of IEEE 802.16-2004 (OFDMA, WiMAX)
%
% [Out, BlkSize] = mDemodMapperMinDist(In,Channel,BlkSize,mode)
%
% In : complex input column vector
% Matrices are processed column by column, one vector per column.
%
% mode : number of coded bits per complex soft symbol
% 2 = QPSK
% 4 = 16QAM
% 6 = 64QAM
% The mode is the same for all code blocks.
%
%
% Out: soft symbol output vector ('int8', values -128 to 127)
%
% BlkSize: row vector, length = number of code blocks
% number of data elements in each code block (or column)
%
% Matlab 7 Release 14 SP2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Property of Freescale
% Freescale Confidential Proprietary
% Freescale Copyright (C) 2005 All rights reserved
% ----------------------------------------------------------------------------
% $RCSfile: mDemodMapperMinDist.m.rca $
% $Revision: 1.14 $
% $Date: Wed Jan 24 10:08:57 2007 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Out = zeros(mode,BlkSize);
alpha = Channel./2^16;
switch mode
case 2 %QPSK
points = [1-1i;-1-1i;1+1i;-1+1i]/sqrt(2);
diff = abs([In;In;In;In] - points*alpha ).^2;
b0 = min(diff(1,:),diff(2,:)) - min(diff(3,:),diff(4,:)) ;
b1 = min(diff(2,:),diff(4,:)) - min(diff(3,:),diff(1,:)) ;
Out = reshape([b1;b0],size(b0,2)*2,1);
case 4 %16QAM
points = [1+3i;3+3i;-1+3i;-3+3i;1-3i;3-3i;-1-3i;-3-3i ;...
1+1i;3+1i;-1+1i;-3+1i;1-1i;3-1i;-1-1i;-3-1i]./sqrt(10);
diff = abs([In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;In] - points*alpha ).^2;
b0 = min(diff([ 1; 2; 3; 4; 5; 6; 7; 8],:)) - min(diff([9;10;11;12;13;14;15;16],:));
b1 = min(diff([13;14;15;16; 5; 6; 7; 8],:)) - min(diff([9;10;11;12; 1; 2; 3; 4],:));
b2 = min(diff([10; 2;14; 6;12; 4;16; 8],:)) - min(diff([9; 1;13; 5;11; 3;15; 7],:));
b3 = min(diff([12; 4;16; 8;11; 3;15; 7],:)) - min(diff([9; 1;13; 5;10; 2;14; 6],:));
Out = reshape([b3;b2;b1;b0],size(b0,2)*4,1);
case 6 %64QAM
points=[1+1i;3+1i;5+1i;7+1i;-1+1i;-3+1i;-5+1i;-7+1i;...
1-1i;3-1i;5-1i;7-1i;-1-1i;-3-1i;-5-1i;-7-1i;...
1+7i;3+7i;5+7i;7+7i;-1+7i;-3+7i;-5+7i;-7+7i;...
1-7i;3-7i;5-7i;7-7i;-1-7i;-3-7i;-5-7i;-7-7i;
1+3i;3+3i;5+3i;7+3i;-1+3i;-3+3i;-5+3i;-7+3i;...
1-3i;3-3i;5-3i;7-3i;-1-3i;-3-3i;-5-3i;-7-3i;...
1+5i;3+5i;5+5i;7+5i;-1+5i;-3+5i;-5+5i;-7+5i;...
1-5i;3-5i;5-5i;7-5i;-1-5i;-3-5i;-5-5i;-7-5i]/sqrt(42);
diff = abs(([In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;...
In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;...
In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;...
In;In;In;In;In;In;In;In;In;In;In;In;In;In;In;In] - points*alpha)./2).^2;
b0 = min(diff([1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;...
17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32],:))...
- min(diff([33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;...
49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64],:));
b1 = min(diff([49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;...
17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32],:))...
- min(diff([33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;...
1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16],:));
b2 = min(diff([9;10;11;12;13;14;15;16;41;42;43;44;45;46;47;48;...
25;26;27;28;29;30;31;32;57;58;59;60;61;62;63;64],:))...
- min(diff([33;34;35;36;37;38;39;40;1;2;3;4;5;6;7;8;...
49;50;51;52;53;54;55;56;17;18;19;20;21;22;23;24],:));
b3 = min(diff([1;33;49;17;9;41;57;25;5;37;53;21;13;45;61;29;...
4;36;52;20;12;44;60;28;8;40;56;24;16;48;64;32],:))...
- min(diff([2;34;50;18;10;42;58;26;3;35;51;19;11;43;59;27;...
6;38;54;22;14;46;62;30;7;39;55;23;15;47;63;31],:));
b4 = min(diff([3;35;51;19;11;43;59;27;4;36;52;20;12;44;60;28;...
7;39;55;23;15;47;63;31;8;40;56;24;16;48;64;32],:))...
- min(diff([2;34;50;18;10;42;58;26;1;33;49;17;9;41;57;25;...
5;37;53;21;13;45;61;29;6;38;54;22;14;46;62;30],:));
b5 = min(diff([5;37;53;21;13;45;61;29;6;38;54;22;14;46;62;30;...
7;39;55;23;15;47;63;31;8;40;56;24;16;48;64;32],:))...
- min(diff([1;33;49;17;9;41;57;25;2;34;50;18;10;42;58;26;...
3;35;51;19;11;43;59;27;4;36;52;20;12;44;60;28],:));
Out = reshape([b5;b4;b3;b2;b1;b0],size(b0,2)*6,1);
otherwise
error('Error: Modulation mode %d not supported.',mode);
end
BlkSize = BlkSize*mode;
Out = reshape(Out,BlkSize,1);
if exist('BitShift','var')
global scalingDebug
%global scalingDebug %debug purpose / to be deleted
if all(size(scalingDebug)==[1,1])
if scalingDebug == 1 %debug mode
global BitShift
Out = int8(Out./2^BitShift);
end
else %regular algo
Out = int8(Out./2^BitShift);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -