实验1
1.p=0.00001:0.001:0.99999; h=-p.*log2(p)-(1-p).*log2(1-p); plot(p,h);
title('二进熵函数曲线'); ylabel('H(p,1-p)')
2. p=linspace(eps,1-eps,100); q=linspace(eps,1-eps,100); [P,Q]=meshgrid(p,q); P_Q=P+Q; for n=1:100 for m=1:100 if P_Q(n,m)>=1 Q(n,m)=nan; end end end
H=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q); mesh(P,Q,H)
title('三维熵函数的图形')
3.function H=entropy(p)
%该函数用来计算包含任意多个符号的信源熵 %p为DMS的概率分布,行向量
if sum(p)~=1 %判断是否满足概率完备性
error('!!!不满足概率完备性,重新输入信源分布') return else
L=length(p) %得到信源符号的个数 H=0; %熵值初始化为零 for i=1:L
H=H-p(i)*log2(p(i)); %累加熵函数各个子项
end end
3.[p,q]=meshgrid(0.000001:0.01:1,0.000001:0.01:1);
Hnoise=-p.*log2(p)-(1-p).*log2(1-p); % 噪声熵 x=(1-p).*q+p.*(1-q);
I=-x.*log2(x)-(1-x).*log2(1-x)-Hnoise; mesh(p , q , I)
实验2
代码
clc;clear all;
N = input('输入信源符号X的个数N='); M = input('输出信源符号Y的个数M=');
p_yx=zeros(N,M); %程序设计需要信道矩阵初始化为零 fprintf('输入信道矩阵概率\\n') for i=1:N
for j=1:M
p_yx(i,j)=input('p_yx=');%输入信道矩阵概率 if p_yx(i)<0
error('不符合概率分布')
end end end
for i=1:N %各行概率累加求和 s(i)=0; for j=1:M
s(i)=s(i)+p_yx(i,j); end end
for i=1:N %判断是否符合概率分布 if (s(i)<=0.999999||s(i)>=1.000001) error('不符合概率分布') end end
b=input('输入迭代精度:');%输入迭代精度 for i=1:N
p(i)=1.0/N; %取初始概率为均匀分布 end
for j=1:M %计算q(j) q(j)=0; for i=1:N
q(j)=q(j)+p(i)*p_yx(i,j); end
end
for i=1:N %计算a(i) d(i)=0; for j=1:M if(p_yx(i,j)==0)
d(i)=d(i)+0; else
d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j)); end end
a(i)=exp(d(i)); end u=0;
for i=1:N %计算u u=u+p(i)*a(i); end
IL=log2(u); %计算IL
IU=log2(max(a));%计算IU n=1;
while((IU-IL)>=b) %迭代计算 for i=1:N
p(i)=p(i)*a(i)/u; %重新赋值p(i) end
for j=1:M %计算q(j) q(j)=0; for i=1:N
q(j)=q(j)+p(i)*p_yx(i,j); end end
for i=1:N %计算a(i) d(i)=0; for j=1:M
if(p_yx(i,j)==0) d(i)=d(i)+0; else
d(i)=d(i)+p_yx(i,j)*log(p_yx(i,j)/q(j)); end end
a(i)=exp(d(i)); end u=0;
for i=1:N %计算u u=u+p(i)*a(i); end
IL=log2(u); %计算IL IU=log2(max(a));%计算IU n=n+1; end
fprintf('信道矩阵为:\\n'); disp(p_yx);
fprintf('迭代次数n=%d\\n',n);
fprintf('信道容量C=%f比特/符号',IL);
实验3
哈夫曼编码和二进制编码优缺点比较
(1)哈夫曼编码所形成的码字不是唯一的,但编码效率是唯一的 在对最小的两个概率符号赋值时,可以规定为大的为“1”、小的为“0”,反之也可以。如果两个符号的出现概率相等时,排列时无论哪个在前都是可以的,所以哈夫曼所构造的码字不是唯一的,对于同一个信息源,无论上述的前后顺序如何排列,它的平均码长是不会改变的,所以编码效率是唯一的。
(2)只有当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。
(3)哈夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。另外实现的电路复杂,各种长度的编码的译码过程也是比较复杂的,因此解压缩的过程也比较慢。