用matlab实现香农码和费诺码

上传人:工**** 文档编号:487383940 上传时间:2023-02-01 格式:DOCX 页数:15 大小:58.45KB
返回 下载 相关 举报
用matlab实现香农码和费诺码_第1页
第1页 / 共15页
用matlab实现香农码和费诺码_第2页
第2页 / 共15页
用matlab实现香农码和费诺码_第3页
第3页 / 共15页
用matlab实现香农码和费诺码_第4页
第4页 / 共15页
用matlab实现香农码和费诺码_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《用matlab实现香农码和费诺码》由会员分享,可在线阅读,更多相关《用matlab实现香农码和费诺码(15页珍藏版)》请在金锄头文库上搜索。

1、觀岳北农林韦枚大学Northwest A&F University信息论与编码大作业班级:电信 091班姓名:学号:目录一、用 matlab 实现 Shannon 编码 31、编码主程序 32、含有的子函数 binary 43、注意事项 54、例题展示 5二、用 matlab 实现 Feno 编码 71、编码主程序 72、两个子m文件展示93、注意事项 124、例题展示 12一、用 matlab 实现 Shannon 编码1、编码主程序n=input(输入单符号信源个数n=)p=zeros(1,n);for i=1:np(l,i)=input (输入单符号信源个数:);endif sum(p)

2、1error(不符合概率分布无效)endy=fliplr(sort(p);% 大到小排序D=zeros(n,4);%生成n*4的零矩阵D(:,l)=y;%把y赋给零矩阵的第一列for i=2:nD(l,2)=0;%令第一行第二列的元素为0D(i,2)=D(i-l,l)+D(i-l,2);% 求累加概率endfor i=1:nD(i,3)=-log2(D(i,l);% 求第三列的元素D(i,4)=ceil(D(i,3);%求第四列的元素,对D(i,3)向无穷方向取最小正 整数endDA=D(:,2);%取出D中第二列元素B=D(:,4);%取出D中第四列元素for j=1:nC=binary(A

3、(j),B(j)% 生成码字End2、含有的子函数 binaryfunction C=binary(A,B)%对累加概率求二进制的函数C=zeros(l,B);%生成零矩阵用于存储生成的二进制数,对二进制的每一位进行操作temp=A;%temp 赋初值for i=1:B%累加概率转化为二进制,循环求二进制的每一位,A控制 生成二进制的位数temp=temp*2;if temp1temp=temp-1;C(1,i)=1;elseC(1,i)=0;endend3、注意事项正式运行前应该把 binary.m 文件放到 matlab 的工作空间中去, 以保证主函数能成功调用。Name 人Shortcu

4、ts How to Add j What5 Newfur rent Fol de r? X Command WindowT 爭 New to MATLAE ? Watch this Vidmc; see 吕mg cr read :0.20000. 19000. 18000.20000.39002.32192.39592.47393. 0000j. 0000j. 0000输入信源符号撫率:0. 1 输人信泯苻号拥率:J. DI MATLAB图一 子函数存储示意图4、例题展示将课本第五章例题4 键入入运行,可得结果和课本完全一致。输入信源符号个数 n=7输入信源符号概率:0.2输入信源符号概率:0

5、.19输入信源符号概率:0.18输入信源符号概率:0.17输入信源符号概率:0.1输入信源符号概率:0.01D =0.200002.32190.19000.20002.39590.18000.39002.47390.17000.57002.55640.15000.74002.73700.10000.89003.32190.01000.99006.6439C =000C =001输入信源符号概率:0.15C =3.00003.00003.00003.00003.00004.00007.0000C =C =1110C =1111110二、用 matlab 实现 Feno 编码1、编码主程序clea

6、r all;N=input(N=);%输入信源符号的个数 s=0;l=0;H=0;for i=1:Nfprintf(第d 个,i);p(i)=input(p=);%输入信源符号概率分布矢量,p(i)l if p(i)=0error(不符合概率分布)ends=s+p(i)H=H+(- p(i)*log2(p(i);% 计算信源信息熵endif (s=1.000001)error(不符合概率分布)endtic;for i=1:N-1 %按概率分布大小对信源排序for j=i+1:Nif p(i)p(j)m=p(j);p(j)=p(i);p(i)=m;endendendx=f1(1,N,p,1);f

7、or i=1:N %计算平均码长L(i)=length(find(x(i,:);l=l+p(i)*L(i);endn=H/l; %计算编码效率fprintf(按概率降序排列的码字:n);disp(x) %显示按概率降序排列的码字fprintf(平均码长:n);disp(l)% 显示平均码长fprintf(编码效率:n);disp(n) %显示编码效率fprintf(计算耗时 time= %fn,toc);2、两个子 m 文件展示1、第一个函数 f1 存放于 f1.mfunction x=f1(i,j,p,r)global x;x=char(x);if(j=i)return;elseq=0;fo

8、r t=i:j %对于区间i,j 自上而下求累加概率值q=p(t)+q;y(t)=q;endfor t=i:j%把所有自上而下的累加概率值与该区间总概率值减该累加 概率值之差取绝对值存在一数组v(t)=abs(y(t)-(q-y(t);end for t=i:jif(v(t)=min(v) %求该数组中最小的一个值来确定分界点位置 for k=i:t %赋值码字 x(k,r)=0;endfor k=(t+1):jx(k,r)=1;endd=t;f1(i,d,p,r+1); %递归调用及相互调用 f2(d+1,j,p,r+1);f1(d+1,j,p,r+1);f2(i,d,p,r+1);else

9、endendendreturn;2、第二个函数函数f2存放于f2.mfunction x=f2(i,j,p,r)global x;x=char(x);if(j=i)return;else q=0;for t=i:j %对于区间i,j 自上而下求累加概率值q=p(t)+q;y(t-i+1)=q;endfor t=l:j-(i-l)%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组v(t)=abs(y(t)-(q-y(t);endfor t=1:j-(i-1)if(v(t)=min(v) %求该数组中最小的一个值来确定分界点位置d=t+i-1;for k=i:d %赋

10、值码字x(k,r)=0;endfor k=(d+1):jx(k,r)=1;endf2(d+l,j,p,r+l);%递归调用及相互调用f1(i,d,p,r+1);f2(i,d,p,r+1);f1(d+1,j,p,r+1);elseendendendreturn;3、注意事项还是那句话,要提前把子函数放到工作空间。:n&為勺o扮同尉 Q Current Folder: CShortcuts 上How to Add _?1 Wh ats Ne-wCurrent Fo-lderNew to IVATLAICommand Windov MATLABNam-e 區4、例题展示N=7第 1 个 p=0.2 s =0.2000第 2 个 p=0.190.3900第 3 个 p=0.18s =0.5700第 4 个 p=0.17s =0.7400第 5 个 p=0.15s =0.8900第 6 个 p=0.1s =0.9900第 7 个 p=0.01s =1 按概率降序排列的码字: 000100111011101111平均码长:2.7400编码效率:0.9521计算耗时 time= 0.187857

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号