欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    信息论实验报告2信源编码(共8页).doc

    • 资源ID:6959475       资源大小:52KB        全文页数:8页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    信息论实验报告2信源编码(共8页).doc

    精选优质文档-倾情为你奉上成绩辽宁工程技术大学上机实验报告实验名称信源编码院系姓名实验目的简述本次实验目的: 1、 理解并掌握香农编码2、 理解并掌握费诺编码3、 理解并掌握霍夫曼编码实验准备你为本次实验做了哪些准备: 认真阅读信息论教材,熟悉三种编码的原理以及相应的MATLAB函数指令实验进度本次共有 6 个练习,完成 6 实验总结日本次实验的收获、体会、经验、问题和教训:1、香农编码Matlab源码function W,L,q=shannon(p) if (length(find(p<=0) =0) error('Not a prob.vector,negative component'); end if (abs(sum(p)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end n=length(p); x=1:n;p,x=array(p,x);% 1)排序l=ceil(-log2(p); % 2)计算代码组长度lP(1)=0;n=length(p);%3)计算累加概率Pfor i=2:n P(i)=P(i-1)+p(i-1); endfor i=1:n % 4)求得二进制代码组W for j=1:l(i) temp(i,j)=floor(P(i)*2); P(i)=P(i)*2-temp(i,j); endendfor i=1:n for j=1:l(i) if (temp(i,j)=0); W(i,j)=48; else W(i,j)=49; end endendL=sum(p.*l); % 计算平均码字长度 H=entropy(p,2); % 计算信源熵 q=H/L; % 计算编码效率for i=1:n Bi=i; endn,m=size(W);TEMP=32*ones(n,6);W=W,TEMP;W=W'n,m=size(W);W=reshape(W,1,n*m);W=sprintf('%s', W);s0='很好!输入正确,编码结果如下:'s1='Shannon 编码所得码字W:'s2='Shannon 编码平均码字长度L:' s3='Shannon 编码的编码效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q);function H=entropy(P,r)if (length(find(P<=0)=0) % 判断是否符合概率分布条件error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)/(log2(r)+eps);2、香农编码数值试验算例单符号离散无记忆信源= p=0.25,0.25,0.2,0.15,0.1,0.05; W,L,q=shannon(p)很好!输入正确,编码结果如下:Shannon 编码所得码字W:1 2 3 4 5 600 01 100 101 1101 11110 Shannon 编码平均码字长度L: 2.7000Shannon 编码的编码效率q: 0.8975W =00 01 100 101 1101 11110 L = 2.7000q = 0.89753、费诺编码Matlab源码(1)编写M文件compare.mfunctionnext_P,code_num,next_index=compare(current_P,current_index)n=length(current_P);add(1)=current_P(1);for i=2:n % 1)求概率的依次累加和add(i)=0; add(i)=add(i-1)+current_P(i); ends=add(n); % 2)求概率和最接近的两小组for i=1:n temp(i)=abs(s-2*add(i); endc,k=min(temp);if (current_index<=k) next_index=current_index; code_num=48; next_P=current_P(1:k);else next_index=current_index-k; code_num=49; next_P=current_P(k+1):n); end(2)编写M文件fano.mfunction W,L,q=fano(P) if (length(find(P<=0) =0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1') end n=length(P); x=1:n;% 1)排序P,x=array(P,x);for i=1:n current_index=i;j=1;current_P=P; while 1 next_P,code_num,next_index=compare(current_P,current_index); current_index=next_index;current_P=next_P; W(i,j)=code_num; j=j+1; if (length(current_P)=1) break; endl(i)=length(find(abs(W(i,:) =0);end % 得到各码字的长度L=sum(P.*l); % 计算平均码字长度H=entropy(P,2); % 计算信源熵q=H/L; % 计算编码效率for i=1:n Bi=i; endn,m=size(W);TEMP=32*ones(n,5);W=W,TEMP;W=W'n,m=size(W);W=reshape(W,1,n*m);W=sprintf('%s', W);s0='很好!输入正确,编码结果如下:'s1='Fano 编码所得码字W:'s2='Fano 编码平均码字长度L:'s3='Fano 编码的编码效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q); function H=entropy(P,r)if (length(find(P<=0)=0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)/(log2(r)+eps);4、费诺编码数值试验算例单符号离散无记忆信源=P=1/4,1/4,1/8,1/8,1/16,1/16,1/16,1/16;W,L,q=fano(P)很好!输入正确,编码结果如下:Fano 编码所得码字W:1 2 3 4 5 6 7 800 01 100 101 1100 1101 1110 1111 Fano 编码平均码字长度L: 2.7500Fano 编码的编码效率q: 1.0000W =00 01 100 101 1100 1101 1110 1111 L = 2.7500q = 1.00005、霍夫曼编码Matlab源码(1)编写M文件huffman.mfunction W,L,q=huffman(P) if (length(find(P<=0) =0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1') end n=length(P); % 计算输入元素个数p=P; mark=zeros(n-1,n); % mark为n-1行、n列矩阵,用来记录每行最小两概率叠加后概率排列次序% 1) 确定概率大小值的排列,得到mark矩阵。for i=1:n-1 p,num=sort(p); mark(i,:)=num(1:n-i+1),zeros(1,i-1); p=p(1)+p(2),p(3:n),1; end % 2) 生成一个n-1行、n1(n×n)列矩阵table,每行可看做n个段,% 每段长为n,记录一个码字(每个码字的长度不会超过n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 计算各个元素码字,循环n-2次,决定矩阵table% 从倒数第二行开始到第一行的每段的码字值,到编码表格tabletable(n-1,n)='1'table(n-1,2*n)='0' for i=2:n-1 table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)=1). -(n-2):n*(find(mark(n-i+1,:)=1); % 按mark的记录依次赋值 table(n-i,n)='1'table(n-i,n+1:2*n-1)=table(n-i,1:n-1); table(n-i,2*n)='0' endfor j=1:i-1 table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,. n*(find(mark(n-i+1,:)=j+1)-1)+1:n*find(mark(n-i+1,:)=j+1); end % 4)得到编码后的码字for i=1:n W(i,1:n)=table(1,n*(find(mark(1,:)=i)-1)+1:find(mark(1,:)=i)*n); l(i)=length(find(abs(W(i,:) =32); end L=sum(P.*l); % 计算平均码字长度H=entropy(P,2); % 计算信源熵q=H/L; % 计算编码效率for i=1:n Bi=i; endm,n=size(W);TEMP=blanks(m);W=W,TEMP',TEMP',TEMP'm,n=size(W);W=reshape(W',1,m*n);s0='很好!输入正确,编码结果如下:'s1='Huffman编码所得码字W:'s2='Huffman编码平均码字长度L:' s3='Huffman编码的编码效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q); function H=entropy(P,r)if (length(find(P<=0)=0) error('Not a prob.vector,negative component'); end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1'); end H=(sum(-P.*log2(P)/(log2(r)+eps);(2)编写M文件huffman_better.mfunction W,L,V,q=huffman_better(P) if (length(find(P<=0) =0) error('Not a prob.vector,negative component');end if (abs(sum(P)-1)>10e-10) error('Not a prob.vector,component do not add up to 1') end n=length(P);p=P; mark=zeros(n-1,n); t=1;for i=1:n-1 p,num=sort(p); % 对输入元素排序并纪录 if (i=1) if (count=0) k=max(a(t,:); for s=count:-1:1 num(k-s)= num(k-s+1); end num(k)=1; end t=t+1; end mark(i,:)=num(1:n-i+1),zeros(1,i-1); p=p(1)+p(2),p(3:n),1;count=0; % 用于计数 for j=2:n-i if (p(1)=p(j) % 判断p中是否有与求和后的新项相等的项 count=count+1; a(t,count)=j; end endend % 2) 生成一个n-1行、n1(n×n)列矩阵table,每行可看做n个段,% 每段长为n,记录一个码字(每个码字的长度不会超过n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 计算各个元素码字,循环n-2次,决定矩阵table% 从倒数第二行开始到第一行的每段的码字值,到编码表格tabletable(n-1,n)='1' table(n-1,2*n)='0' for i=2:n-1 table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)=1). -(n-2):n*(find(mark(n-i+1,:)=1); % 按mark的记录依次赋值 table(n-i,n)='1'table(n-i,n+1:2*n-1)=table(n-i,1:n-1); table(n-i,2*n)='0' for j=1:i-1 table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,. n*(find(mark(n-i+1,:)=j+1)-1)+1:n*find(mark(n-i+1,:)=j+1); end end % 4)得到编码后的码字for i=1:n W(i,1:n)=table(1,n*(find(mark(1,:)=i)-1)+1:find(mark(1,:)=i)*n); l(i)=length(find(abs(W(i,:)=32); end L=sum(P.*l); H=entropy(P,2); % 计算信源熵V=sum(P.*(l-L).2);q=H/L; % 计算编码效率for i=1:n Bi=i; endm,n=size(W);TEMP=blanks(m);W=W,TEMP',TEMP',TEMP'm,n=size(W);W=reshape(W',1,m*n);s0='很好!输入正确,编码结果如下:'s1='Huffman编码所得码字W:'s2='Huffman编码平均码字长度L:'s3='Huffman编码所得码字W的方差V:'s4='Huffman编码的编码效率q:'disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(V); disp(s4),disp(q)6、霍夫曼编码数值试验算例= P=0.4,0.2,0.2,0.1,0.1;W,L,q=huffman(P)很好!输入正确,编码结果如下:Huffman编码所得码字W: 1 2 3 4 5 1 000 01 0011 0010 Huffman编码平均码字长度L: 2.2000Huffman编码的编码效率q: 0.9645W = 1 000 01 0011 0010 L = 2.2000q = 0.9645教师评语 专心-专注-专业

    注意事项

    本文(信息论实验报告2信源编码(共8页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开