前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab实现香农编码原理_香农编码c语言实现

matlab实现香农编码原理_香农编码c语言实现

作者头像
全栈程序员站长
发布2022-10-01 10:58:41
1K0
发布2022-10-01 10:58:41
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

最近有个实验是用MATLAB实现香农编码的,在网上看到了别人写的程序,大部分都不支持手动输入信源,我自己就加上了几行,能够直接输入信源分布,下面是程序:

pa=input(‘请输入信源分布:’) k=length(pa); %计算信源符号个数 if min(pa)<0||max(pa)>1 %判断信源概率值是否介于0到1之间 % disp([‘信源分布pa(x)=[‘,num2str(pa),’]’]); disp(‘概率值必须介于0到1之间,请重新输入信源分布’); return elseif sum(pa)~=1 %判断信源累加和是否为1 % disp([‘信源分布pa(x)=[‘,num2str(pa),’]’]); disp(‘概率累加和必须等于1,请重新输入信源分布’); return else for i=1:k-1 %for循环进行降序排列 for n=i+1:k if (pa(i)<pa(n)) t=pa(i); pa(i)=pa(n); pa(n)=t; end end end end disp(‘信源分布概率从大到小为:’),disp(pa) y=0;%给y赋初值,用来求概率和 f=0;%给f赋初值,用来得到子程序最大循环次数 s=zeros(k,1); %对求和结果进行矩阵初始化 b=zeros(k,1); %对编码位数矩阵初始化 w=zeros(k,1); %对二进制矩阵初始化 for m=1:k; %进行香农编码 s(m)=y; y=y+pa(m); b(m)=ceil(-log2(pa(m)));%求得的自信息量向上取整,得到码字长度 z=zeros(b(m),1); %对码字矩阵初始化 x=s(m); f=max(b(m)); %把码字最大长度赋给f,用于进行十进制转二进制 w=dtob(x,f); %调用子程序将十进制转换为二进制 for r=1:b(m) z(r)=w(r); end disp(‘输出结果为:’); disp(‘初始概率’),disp(pa(m)) disp(‘求和结果’),disp(s(m)) disp(‘编码位数’),disp(b(m)) disp(‘最终编码’),disp(z’) end sum0=0; sum1=0; for i=1:k %使用for循环进行信息熵、平均码长求解 a(i)=-log2(pa(i)); %a(i)表示单个信源的自信息量 K(i)=ceil(a(i)); %K(i)表示对自信息量向上取整 R(i)=pa(i)*K(i); sum0=sum0+R(i); %求平均码长 c(i)=a(i)*pa(i); sum1=sum1+c(i); %信息熵 end K1=sum0; H=sum1; Y=H/K1; %用Y来表示编码效率 disp([‘信息熵H(X)=’,num2str(H),'(bit/sign)’]); disp([‘平均码长K=’,num2str(K1),'(bit/sign)’]);

disp([‘编码效率=’,num2str(Y)]);

上面这一部分是主程序,下面这个是调用子程序进行十进制转换成二进制的:

function y=dtob(x,f) for i=1:f temp=x.*2; if(temp<1) y(i)=0; x=temp; else x=temp-1; y(i)=1; end

end

完整的程序就是这样的了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195050.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月11日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档