📄 coding_xn.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 + -