用matlab实现香农码和费诺码.doc

用matlab实现香农码和费诺码.doc

ID:55037676

大小:83.50 KB

页数:14页

时间:2020-04-26

用matlab实现香农码和费诺码.doc_第1页
用matlab实现香农码和费诺码.doc_第2页
用matlab实现香农码和费诺码.doc_第3页
用matlab实现香农码和费诺码.doc_第4页
用matlab实现香农码和费诺码.doc_第5页
资源描述:

《用matlab实现香农码和费诺码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、信息论与编码―大作业班级:电信091班姓名:徐胜学号:目录一、用matlab实现Shannon编码31、编码主程序32、含有的子函数binary43、注意事项54、例题展示5二、用matlab实现Feno编码71、编码主程序72、两个子m文件展示93、注意事项124、例题展示12一、用matlab实现Shannon编码1、编码主程序n=input('输入单符号信源个数n=')p=zeros(1,n);fori=1:np(1,i)=input('输入单符号信源个数:');endifsum(p)<1

2、

3、sum(p)>1e

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

5、B=D(:,4)';%取出D中第四列元素forj=1:nC=binary(A(j),B(j))%生成码字End2、含有的子函数binaryfunction[C]=binary(A,B)%对累加概率求二进制的函数C=zeros(1,B);%生成零矩阵用于存储生成的二进制数,对二进制的每一位进行操作temp=A;%temp赋初值fori=1:B%累加概率转化为二进制,循环求二进制的每一位,A控制生成二进制的位数temp=temp*2;iftemp>1temp=temp-1;C(1,i)=1;elseC(1,i)=0;en

6、dend3、注意事项正式运行前应该把binary.m文件放到matlab的工作空间中去,以保证主函数能成功调用。图一子函数存储示意图4、例题展示将课本第五章例题4键入入运行,可得结果和课本完全一致。输入信源符号个数n=7n=7输入信源符号概率:0.2输入信源符号概率:0.19输入信源符号概率:0.18输入信源符号概率:0.17输入信源符号概率:0.15输入信源符号概率:0.1输入信源符号概率:0.01D=0.200002.32193.00000.19000.20002.39593.00000.18000.39002.

7、47393.00000.17000.57002.55643.00000.15000.74002.73703.00000.10000.89003.32194.00000.01000.99006.64397.0000C=000C=001C=011C=100C=101C=1110C=1111110二、用matlab实现Feno编码1、编码主程序clearall;N=input('N=');%输入信源符号的个数s=0;l=0;H=0;fori=1:Nfprintf('第%d个',i);p(i)=input('p=');%输入

8、信源符号概率分布矢量,p(i)<1ifp(i)<=0error('不符合概率分布')ends=s+p(i)H=H+(-p(i)*log2(p(i)));%计算信源信息熵endif(s<=0.

9、

10、s>=1.)error('不符合概率分布')endtic;fori=1:N-1%按概率分布大小对信源排序forj=i+1:Nifp(i)

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

12、:j%对于区间[i,j]自上而下求累加概率值q=p(t)+q;y(t)=q;endfort=i:j%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组v(t)=abs(y(t)-(q-y(t)));endfort=i:jif(v(t)==min(v))%求该数组中最小的一个值来确定分界点位置fork=i:t%赋值码字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。