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

📄 coding_xn.m

📁 根据输入的概率进行香农编码
💻 M
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -