璀璨人生57

璀璨人生57篇一:北邮信息论附加题

信息论附加题(2)

一、 实验目的及要求

选择一定长度的英文文本,去除标点符号,保留空格,不区分大小写。 要求:

(1) 不考虑符号间的依赖关系,统计每个符号出现的频率,计算独立信源熵H(X)。

(2) 考虑每个符号与前一个符号的依赖关系,计算一阶马氏源熵H(X2|X1)。

(3) 比较H(X)和H(X2|X1),对结果进行讨论。

(4) 把仿真结果与《信息论基础》57 页的结果进行比较,并进行讨论。

二、 实验步骤

1. 导入一段英文样本文件(《我的璀璨人生》,文本见附件;

2. 统计这段文本中英文字母(不区分大小写)和空格出现的个数,以及所有字符的个数,进而得到各个字母出现的概率p(x);

3. 利用公式:H(X)=-Σp(x)log p(x) ,计算样本的熵H(X);

4. 统计文本中相邻两个字符出现的概率p(xy),通过计算边缘概率分布可得p(x),然后利用公式p(y|x)=p(xy)/p(x)条件分布概率p(y|x);

5. 利用公式:

计算得到样本的一阶马氏源熵

三、 实验结果及讨论

(一) 实验结果:

独立信源熵:H1=4.0483比特/符号

一阶马氏源熵:H2=3.3348比特/符号

(二) 讨论:

1.比较H(X)和H(X2|X1),对结果进行讨论

(1)考虑到英文不同字母和空格的实际出现概率后,英文信源的信息熵H1(X)要比把字母和空格视为等概率出现时的信息熵要小一些。也即在考虑到英文字母和空格的实际出现概率后,英文信源的平均不确定性,比把字母和空格视为等概率出现时英文信源的平均不确定性小一些。

(2)对比H(X)和H(X2|X1),可以看到,在考虑到前后两个字符间的依赖关系即将英文信源视为一阶马氏源后,信源熵进一步减小,即英文信源的平均不确定性进一步减小了。

2.把仿真结果与《信息论基础》57 页的结果进行比较,并进行讨论。

课本上的H1=4.03比特/符号,H2=3.32比特/

符号,此次实验进行计

算的结果为H1=4.0483比特/符号,H2=3.3348比特/符号,均十分接近书本上的结果,只是稍微略大一些。原因是使用的样本文件中文本字符个数有限,统计的概率并未达到理想的效果。此外,由于在实际处理中,我将各个标点符号和回车符号都替换成了空格键,也对结果造成了一定的影响。

四、 MATLAB源代码

fid=fopen('f:\text.txt','r');

text1=fscanf(fid,'%c');%读出文件

text=strrep(text1,char(0),char(32));

% for i=0:31

% text=strrep(text,char(i),char(32));

% end

for i=33:64

text=strrep(text,char(i),char(32));

end

for i=91:96

text=strrep(text,char(i),char(32));

end

for i=123:127

text=strrep(text,char(i),char(32));

end

%%%%%%%%%%%%%%以上为对文本进行优化处理%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%计算独立信源熵?%%%%%%%%%%%%%%

str=strrep(text1,b,c);

M=size(text);

row=M(1,1);

line=M(1,2);

N=zeros(1,27);%存储每个符号出现的次数

for i=1:row

for j=1:line

if double(text(i,j))>96&&double(text(i,j))<=122

N(1,double(text(i,j))-96)=N(1,double(text(i,j))-96)+1; elseif double(text(i,j))>64&&double(text(i,j))<=90

N(1,double(text(i,j))-64)=N(1,double(text(i,j))-64)+1; elseif double(text(i,j))==32

N(1,27)=N(1,27)+1;

end

end

end

P=zeros(1,27);%存储所有符号的概率

Log=zeros(1,27);

total=sum(N,2);%存储、计算所有的有效字符

for i=1:27

P(1,i)=N(1,i)/total(1,1);%统计所有的字符的概率

Log(1,i)=P(1,i)*log2(1/P(1,i));

end

H=sum(Log,2)

%%%%%%%%%计算一阶马氏源熵%%%%%%%%%%%%%%%

J=zeros(27,27);%统计联合个数

for i=1:row

for j=2:line

if double(text(i,j))>96&&double(text(i,j))<=122

if double(text(i,j-1))>96&&double(text(i,j-1))<=122

J(double(text(i,j-1))-96,double(text(i,j)-96))=J(double(text(i,j-1))-96,double(text(i,j)-96))+1;

elseif double(text(i,j-1))>64&&double(text(i,j-1))<=90

J(double(text(i,j-1))-64,double(text(i,j)-96))=J(double(text(i,j-1))-64,double(text(i,j)-96))+1;

elseif double(text(i,j-1))==32

J(27,double(text(i,j)-96))=J(27,double(text(i,j)-96))+1;

end

elseif double(text(i,j))>64&&double(text(i,j))<=90

if double(text(i,j-1))>96&&double(text(i,j-1))<=122

J(double(text(i,j-1))-96,double(text(i,j)-64))=J(double(text(i,j-1))-96,double(text(i,j)-64))+1;

elseif double(text(i,j-1))>64&&double(text(i,j-1))<=90

J(double(text(i,j-1))-64,double(text(i,j)-64))=J(double(text(i,j-1))-(转 载 于:wWW.ZHaoqT.nEt 蒲 公英文 摘:璀璨人生57)64,double(text(i,j)-64))+1;

elseif double(text(i,j-1))==32

J(27,double(text(i,j)-64))=J(27,double(text(i,j)-64))+1;

end

elseif double(text(i,j))==32||double(text(i,j))==13

if double(text(i,j-1))>96&&double(text(i,j-1))<=122

J(double(text(i,j-1))-96,27)=J(double(text(i,j-1))-96,27)+1; elseif double(text(i,j-1))>64&&double(text(i,j-1))<=90

J(double(text(i,j-1))-64,27)=J(double(text(i,j-1))-64,27)+1; elseif double(text(i,j-1))==32

J(27,27)=J(27,27)+1;

end

end

end

end

xsum=sum(J,2);

t=sum(xsum);

JP=zeros(27,27);%联合概率密度

P2=zeros(27,27);%条件概率分布

for i=1:27

for j=1:27

JP(i,j)=J(i,j)/t;

P2(i,j)=JP(i,j)/P(1,i);

end

end

%计算H(Y|x)

H_Y_x=zeros(27,1);

for i=1:27

for j=1:27

if(P2(i,j)~=0)

H_Y_x(i,1)=H_Y_x(i,1)+P2(i,j)*log2(1/P2(i,j));

end

end

end

%计算H(X2|X1

H2=P*H_Y_x

五、 实验总结和心得体会

通过本次MATLAB仿真实验,我学会了对一段文本信源进行信源熵和一阶马氏源熵的计算,可见,当考虑到文本字符的依赖性时,可以大大缩小信源熵值,在实际应用中即可通过这种方法,压缩传输文字,很大地提高传输和存储英文消息的效率。

由于之前并未使用过MATLAB进行编程和仿真,对MATLAB中的一些函数不够了解,所有在此次作业的代码中,很大程度上借鉴了C++中的语言风格和思想,使得代码看上去有些臃肿繁复。若能熟悉使用一些矩阵运算的函数,代码能够变得更加简练。

璀璨人生57篇二:年金险比较

年金险比较

1

2

3

4

5

璀璨人生57篇三:热播电视连续剧系列汇编