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

📄 coding_callback.m

📁 用matlab实现霍夫曼编码与解码
💻 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 + -