信息论实验报告2信源编码Word格式文档下载.doc

上传人:b****1 文档编号:13108228 上传时间:2022-10-05 格式:DOC 页数:8 大小:73KB
下载 相关 举报
信息论实验报告2信源编码Word格式文档下载.doc_第1页
第1页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第2页
第2页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第3页
第3页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第4页
第4页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

信息论实验报告2信源编码Word格式文档下载.doc

《信息论实验报告2信源编码Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《信息论实验报告2信源编码Word格式文档下载.doc(8页珍藏版)》请在冰豆网上搜索。

信息论实验报告2信源编码Word格式文档下载.doc

本次实验的收获、体会、经验、问题和教训:

1、香农编码Matlab源码

function[W,L,q]=shannon(p)

if(length(find(p<

=0))~=0)

error('

Notaprob.vector,negativecomponent'

);

end

if(abs(sum(p)-1)>

10e-10)

Notaprob.vector,componentdonotaddupto1'

n=length(p);

x=1:

n;

[p,x]=array(p,x);

%1)排序

l=ceil(-log2(p));

%2)计算代码组长度l

P

(1)=0;

%3)计算累加概率P

fori=2:

nP(i)=P(i-1)+p(i-1);

end

fori=1:

n%4)求得二进制代码组W

forj=1:

l(i)

temp(i,j)=floor(P(i)*2);

P(i)=P(i)*2-temp(i,j);

end

end

n

if(temp(i,j)==0);

W(i,j)=48;

elseW(i,j)=49;

end

L=sum(p.*l);

%计算平均码字长度H=entropy(p,2);

%计算信源熵

q=H/L;

%计算编码效率

fori=1:

nB{i}=i;

[n,m]=size(W);

TEMP=32*ones(n,6);

W=[W,TEMP];

W=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);

functionH=entropy(P,r)

if(length(find(P<

=0))~=0)%判断是否符合概率分布条件

if(abs(sum(P)-1)>

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)

[1][2][3][4][5][6]

0001100101110111110

2.7000

0.8975

W=

L=

q=

3、费诺编码Matlab源码

(1)编写M文件compare.m

function[next_P,code_num,next_index]=compare(current_P,current_index)

n=length(current_P);

add

(1)=current_P

(1);

n%1)求概率的依次累加和

add(i)=0;

add(i)=add(i-1)+current_P(i);

s=add(n);

%2)求概率和最接近的两小组

ntemp(i)=abs(s-2*add(i));

[c,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);

(2)编写M文件fano.m

function[W,L,q]=fano(P)

)end

n=length(P);

[P,x]=array(P,x);

current_index=i;

j=1;

current_P=P;

while1[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;

l(i)=length(find(abs(W(i,:

))~=0));

end%得到各码字的长度

L=sum(P.*l);

%计算平均码字长度

H=entropy(P,2);

%计算信源熵

%计算编码效率

nB{i}=i;

TEMP=32*ones(n,5);

Fano编码所得码字W:

Fano编码平均码字长度L:

s3='

Fano编码的编码效率q:

=0))~=0)

4、费诺编码数值试验算例

P=[1/4,1/4,1/8,1/8,1/16,1/16,1/16,1/16];

[W,L,q]=fano(P)

[1][2][3][4][5][6][7][8]

00011001011100110111101111

2.7500

1.0000

5、霍夫曼编码Matlab源码

(1)编写M文件huffman.m

function[W,L,q]=huffman(P)

)end

%计算输入元素个数

p=P;

mark=zeros(n-1,n);

%mark为n-1行、n列矩阵,用来记录每行最小两概率叠加后概率排列次序

%1)确定概率大小值的排列,得到mark矩阵。

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)。

n-1table(i,:

)=blanks(n*n);

%3)计算各个元素码字,循环n-2次,决定矩阵table

%从倒数第二行开始到第一行的每段的码字值,到编码表格table

table(n-1,n)='

1'

table(n-1,2*n)='

0'

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)='

table(n-i,n+1:

2*n-1)=table(n-i,1:

n-1);

table(n-i,2*n)='

end

forj=1:

i-1

table(n-i,(j+1)*n+1:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1