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

📄 mdemodmappermindist.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 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 + -