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

上传人:wj 文档编号:873652 上传时间:2023-04-29 格式: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_第6页
第6页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第7页
第7页 / 共8页
信息论实验报告2信源编码Word格式文档下载.doc_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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:

(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));

%4)得到编码后的码字

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

nB{i}=i;

[m,n]=size(W);

TEMP=blanks(m);

W=[W,TEMP'

TEMP'

];

W=reshape(W'

1,m*n);

Huffman编码所得码字W:

Huffman编码平均码字长度L:

Huffman编码的编码效率q:

(2)编写M文件huffman_better.m

function[W,L,V,q]=huffman_better(P)

end

mark=zeros(n-1,n);

t=1;

%对输入元素排序并纪录

if(i~=1)

if(count~=0)

k=max(a(t,:

));

fors=count:

-1:

1

num(k-s)=num(k-s+1);

num(k)=1;

end

t=t+1;

end

mark(i,:

count=0;

%用于计数

forj=2:

n-i

if(p

(1)==p(j))%判断p中是否有与求和后的新项相等的项

count=count+1;

a(t,count)=j;

end

n-1table(i,:

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

table(n-i,1:

-(n-2):

table(n-i,n)='

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

i-1

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

(j+2)*n)=table(n-i+1,...n*(find(mark(n-i+1,:

end

nW(i,1:

))~=32));

H=entropy(P,2);

V=sum(P.*((l-L).^2));

Huffman编码所得码字W的方差V:

s4='

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)

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

10000100110010

2.2000

0.9645

10000100110010

教师

评语

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2