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

📄 lsk_main_decode_chen.m

📁 LSK算法源码,欢迎大家交流
💻 M
字号:
function dec = LSK_main_decode_chen(in)
clear global;
global mark;

input = in;
            disp('input lenth is');
            disp(size(input, 2));
block_size = bin2dec(input(1:16));input = input(17:end);
n = bin2dec(input(1:8));input = input(9:end);
level = bin2dec(input(1:8));input = input(9:end);

n1 = n;
lenth = block_size * block_size;
end_flag = 0;
% The pointers used are
% MS2 - 1, MS4 - 2, MS8 - 3, MS16 - 4, MS32 - 5, MS64 - 6, MS128 - 7, MS256 - 8
% MIP - 0, MSP - 15, MNP - 14, NULL - 13

mark(1:block_size*block_size)=13; % Initialize to NULL, Here zero is not considered
map=mapping(block_size);


seqt = zeros(1,lenth);%%%%%%%输出的图像
mn=0;
var=[];
mark = mark_gen(block_size,level);
% for ii=1:64
%     mark(ii)=0; % MIP
% end
% mark(65)=3;mark(129)=3;mark(193)=3;
% mark(257)=4;mark(513)=4;mark(769)=4;
% mark(1025)=5;mark(2049)=5;mark(3073)=5;
% mark(4097)=6;mark(8193)=6;mark(12289)=6;          %%128*128
% mark(16385) = 7; mark(32769) = 7; mark(49153) = 7;%%256*256
%-----------------------------------------------------------
while n >= 0 
    ii = 1;
   % disp('n in the decoding is');disp(n);
    while ii <= lenth
        if mark(ii) == 0 %%%%%%%%%  MIP
            
            if size(input, 2) <= 0
                end_flag = 1;
                break;
            end;
            bit = input(1);
            input = input(2:end);
                 
            if bit == '1'
                seqt(ii) = abs(seqt(ii)) + 2^(n);%%设定第n位值
            
            mn = mn + 1;
            mark(ii) = 14;%%%%%%%%%%%%%  MNP
            
            if size(input, 2) <= 0
                end_flag = 1;
                break;
            end;
            bit = input(1);
            input = input(2:end);
            
            if bit == '1'
                seqt(ii) = -seqt(ii);%%%%正负
            end;
            end;
            ii = ii + 1;
        
        elseif mark(ii)>0 & mark(ii) < 9
            if size(input, 2) <= 0
                end_flag = 1;
                break;
            end;
            bit = input(1);
            input = input(2:end);
%             
%             disp('bit is');disp(bit);
%             disp('input lenth is');
%             disp(size(input, 2));
            if bit == '0'
%                 while ii < 2^(2*mark(ii))
%                     ii = ii + 1;
%                     seqt(ii) = seqt(ii) + 0;%%块里面第n位是0
%                 end;
                ii = ii + 2^(2*mark(ii));%disp('ii is');disp(ii);
            else
%                 disp(ii);
                partition(ii);
            end;
        else
            ii = ii + 1;
        end;
    end;
    if end_flag == 1
        break;
    end;
%%%%%%%%%%  PASS2  %%%%%%%%%%
    ii = 1;
    while ii <= lenth
        if mark(ii) == 15
            if size(input,2) <= 0
                end_flag = 1;
                break;
            end;
            bit = input(1);
            input = input(2:end);
            if seqt(ii) >= 0
                sign = 0;
            else
                sign = 1;
            end;
            if bit == '1'
                seqt(ii) = abs(seqt(ii)) + 2^(n);
                if sign == 1
                    seqt(ii) = -seqt(ii);
                end;
            end;
            ii = ii + 1;
        elseif mark(ii) ==14
            mark(ii) = 15;
            ii = ii + 1;
        else
            ii = ii + 2^(2*mark(ii));
        end;
    end;
    n = n -1;
    if end_flag == 1
        break;
    end;
end;

dec = seqt(map')';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -