coding_xn.txt

来自「输入待编码概率矩阵(一维」· 文本 代码 · 共 34 行

TXT
34
字号
function Code=coding_xn(Probability)
%香农编码
%Code        :编码结果,以结构的形式表示
%Probability :编码概率

%输入概率判决
if sum(Probability)~=1
    error('chech the Sum of probability.')
end
if ~isempty(find(Probability==0))
    error('probability contains zeros')
end

log_prob=ceil(-log2(Probability));                     %求出编码位数
[Prob,id]=sort(Probability);                           %这里是由小到大排列的
code_bit=log_prob(id);                                 %编码位数按概率排列
for i=1:length(Probability)
    Code(i).id=i;
    Code(i).probability=Probability(i);
    i_id=find(id==i);                                  %找出i的位置
    Code(i).prob_sum=sum(Prob(i_id+1:end));              %求和
    Code(i).code=code_code(code_bit(i_id),Code(i).prob_sum);
end

function code=code_code(code_bit,prob_sum)
%code_bit  :编码位数
%prob_sum  :本位概率和
i=1;
while i<=code_bit
    code(i)=fix(prob_sum*2);
    prob_sum=prob_sum*2-code(i);
    i=i+1;
end

⌨️ 快捷键说明

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