




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、function H=entropy(P,r)if (length(find(P10e-10) error(Not a prob.vector,component do not add up to 1); end H=(sum(-P.*log2(P)/(log2(r)+eps);function CC,Paa=ChannelCap(P,k)% 提示错误信息 if (length(find(P10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end % 1)初始化Par,s=size(P);Pa=
2、(1/(r+eps)*ones(1,r);sumrow=zeros(1,r);Pba=P;% 2)进行迭代计算n=0;C=0; CC=1;while abs(CC-C)=k n=n+1;% (1)先求Pb Pb=zeros(1,s); for j=1:s for i=1:r Pb(j)=Pb(j)+Pa(i)*Pba(i,j); endend% (2)再求Pabsuma=zeros(1,s);for j=1:s for i=1:r Pab(j,i)=Pa(i)*Pba(i,j)/(Pb(j)+eps); suma(j)=suma(j)+Pa(i)*Pba(i,j)*log2(Pab(j,i)+
3、eps)/(Pa(i)+eps);end% 3)求信道容量CC=sum(suma);% 4)求下一次Pa,即PaaL=zeros(1,r);sumaa=0;for i=1:r for j=1:s L(i)=L(i)+Pba(i,j)*log(Pab(j,i)+eps); end a(i)=exp( L(i); endsumaa=sum(a);for i=1:r Paa(i)=a(i)/(sumaa+eps); end% 5)求下一次C,即CCCC=log2(sumaa);Pa=Paa;end% 打印输出结果s0=很好!输入正确,迭代结果如下:;s1=最佳输入概率分布Pa:;s2=信道容量C:;
4、s3=迭代次数n:;s4=输入符号数r:;s5=输出符号数s:;s6=迭代计算精度k:;for i=1:r Bi=i; enddisp(s0);disp(s1),disp(B),disp(Paa);disp(s4),disp(r);disp(s5),disp(s);disp(s2),disp(CC);disp(s6),disp(k); disp(s3),disp(n);function p,x=array(P,X)P=P;X;l,n=size(P);for i=1:n max=P(1,i); maxN=i; MAX=P(:,i); for j=i:n if (max1) if (in) for
5、 k=(maxN-1):-1:i P(:, k+1)=P(:,k); end end end P(:,i)=MAX;endp=P(1,:);x=P(2,:);function W,L,q=shannon(p)% 提示错误信息 if (length(find(p10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end % 1)排序n=length(p); x=1:n;p,x=array(p,x);% 2)计算代码组长度ll=ceil(-log2(p); % 3)计算累加概率PP(1)=0;n=le
6、ngth(p);for i=2:n P(i)=P(i-1)+p(i-1);end% 4)求得二进制代码组W% a)将十进制数转为二进制数for i=1:n for j=1:l(i) temp(i,j)=floor(P(i)*2); P(i)=P(i)*2-temp(i,j); endend% b)给W赋ASCII码值,用于显示二进制代码组Wfor 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;
7、 % 计算编码效率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 next_P,code_num,next_in
8、dex=compare(current_P,current_index);n=length(current_P);add(1)=current_P(1);% 1)求概率的依次累加和for i=2:n add(i)=0; add(i)=add(i-1)+current_P(i);end% 2)求概率和最接近的两小组s=add(n);for i=1:n temp(i)=abs(s-2*add(i);endc,k=min(temp);% 3)对分组的信源赋ASCII值if (current_index=k) next_index=current_index; code_num=48; next_P=
9、current_P(1:k);else next_index=current_index-k; code_num=49; next_P=current_P(k+1):n);endfunction W,L,q=fano(P)% 提示错误信息 if (length(find(P10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end % 1)排序n=length(P); x=1:n;P,x=array(P,x);% 2)将信源符号分组并得到对应的码字for i=1:n current_index=i
10、; 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; end end l(i)=length(find(abs(W(i,:) =0); % 得到各码字的长度endL=sum(P.*l); % 计算平均码字长度H=entropy(P,2); % 计算信源熵q=H/L; % 计算
11、编码效率% 打印输出结果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 W,L,q=huffman(P) if (length(
12、find(P10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end 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
13、) 生成一个n-1行、n1(nn)列矩阵table,每行可看做n个段,% 每段长为n,记录一个码字(每个码字的长度不会超过n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 计算各个元素码字,循环n-2次,决定矩阵table% 从倒数第二行开始到第一行的每段的码字值,到编码表格tabletable(n-1,n)=1; % 小值赋1table(n-1,2*n)=0; % 大值赋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
14、(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); % 按mark的记录依次赋值end % 4)得到编码后的码字for i=1:n W(i,1:n)=table(1,n*(find(mark(1,:)=i)-1)+1:f
15、ind(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
16、:;disp(s0);disp(s1),disp(B),disp(W);disp(s2),disp(L);disp(s3),disp(q); function W,L,V,q=huffman_better(P) if (length(find(P10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end n=length(P); % 计算输入元素个数p=P; mark=zeros(n-1,n); % mark为n-1行、n列矩阵,用来记录每行最小两概率叠加后概率排列次序% 1) 确定概率大小值的排
17、列,得到mark矩阵。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) % 判
18、断p中是否有与求和后的新项相等的项 count=count+1; a(t,count)=j; end endend % 2) 生成一个n-1行、n1(nn)列矩阵table,每行可看做n个段,% 每段长为n,记录一个码字(每个码字的长度不会超过n)。 for i=1:n-1 table(i,:)=blanks(n*n); end % 3) 计算各个元素码字,循环n-2次,决定矩阵table% 从倒数第二行开始到第一行的每段的码字值,到编码表格tabletable(n-1,n)=1; % 小值赋1table(n-1,2*n)=0; % 大值赋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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南常德市德善附属幼儿园招聘(含实习岗)3人考前自测高频考点模拟试题及参考答案详解
- 2025辽宁省水资源管理和生态环保产业集团校园招聘208人模拟试卷附答案详解(典型题)
- 2025天津力生制药股份限公司面向社会选聘惠符制药质量保证部副部长1人(分管化验室)考试模拟试题及答案解析
- 2025秋季《中国石油报》社有限公司高校毕业生招聘备考考试题库附答案解析
- 2025昆明市教工第二幼儿园社会聘用制教师招聘(1人)备考考试题库附答案解析
- 2025湖南张家界市桑植县农业农村局所属事业单位选调4人考前自测高频考点模拟试题附答案详解(完整版)
- 宜宾五粮液股份有限公司2025年下半年校园招聘考试参考题库及答案解析
- 2025年池州九华山佛教协会招聘编外使用人员4人考试模拟试题及答案解析
- 2025年下半年成都市教育事业单位公开考试招聘中小学教师(204人)考试参考试题及答案解析
- 2025重庆大学资源与安全学院深地深空资源开发与灾害控制前沿交叉团队科研博士后招聘1人考试参考题库及答案解析
- 2025年下半年拜城县招聘警务辅助人员(260人)考试模拟试题及答案解析
- 2025年杭州上城区总工会公开招聘工会社会工作者9人笔试参考题库附答案解析
- 百师联盟2026届高三上学期9月调研考试数学试卷(含答案)
- 2025年互联网+特殊教育行业研究报告及未来发展趋势预测
- 神舟十号课件
- 2025-2026学年冀人版(2024)小学科学二年级上册(全册)教学设计(附教材目录 )
- Unit+2+Expressing+yourself+PartB(课件)【知识精研】人教PEP版(2024)英语三年级下册
- 《管理学(马工程)》考试复习试题库(含答案)
- 公司建筑施工安全风险辨识分级管控台账
- 玻璃纤维增强塑料在船舶制造中的应用
- 教科版小学三年级上册科学实验报告
评论
0/150
提交评论