📄 coding_callback.m
字号:
% b1; %%%输入代码中出现的字符,按ASCII排序
% m1; %%%b1中字符在codes中首次出现的位置
% n1; %%%codes中字符在b1中出现的位置
function coding_callback(Incodes)
global decod
clc;
digits(16);%%设置输出编码的小数点位数
Incodes=input('please input the encoding string:\n','s');
Incodes=['state tree'];
[b1, m1, n1] = unique(Incodes, 'first');
Incodes(sort(m1));
length(b1);
for ii=1:length(b1)
a(ii)=length(find(n1(1:end)==ii));
rate(ii)=a(ii)/length(n1); %%%b1中每个字符出现的概率区间
low1(1)=0; %%%b1区间下限
high1(1)=rate(1); %%%b1区间上限
if ii>1
low1(ii)=high1(ii-1);
high1(ii)=low1(ii)+rate(ii);
end
end
% high1 %%%每个字符的上限
% low1 %%%每个字符的下限
% rate %%%每个字符所占有比例
%%%%%算术编码过程%%%%%%
judge=n1(1);
rang(1)=high1(judge)-low1(judge);
low(1)=low1(judge);
high(1)=high1(judge);
for jj=2:length(Incodes)
judge=n1(jj);
low(jj)=low(jj-1)+low1(judge).*rang(jj-1); %%%%codes中第jj个字符编码后的下限
high(jj)=low(jj-1)+high1(judge).*rang(jj-1); %%%%codes中第jj个字符编码后的上限
rang(jj)=high(jj)-low(jj); %%%%codes中第jj个字符编码后的区间
end
r=vpa(rang);
x=vpa(low(length(Incodes)));
y=vpa(high(length(Incodes)));
decod=(x+y)./2
set(decod,'string',num2str(decod));
save Code.mat x y r decod low1 high1 b1 Incodes rate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -