信息论与编码实验程序与结果图(matlab)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结果图

信源熵实验程序:

clc; close all; clear;

linwidd=1

fontt=20

p0=0; pd=1; N=20

p=linspace(p0,pd,N);

I=-log2(p);

plot(p,I,'k');

title('I=-log2(p)函数图');

xlabel('p');ylabel('I');

clc; close all; clear;

linwidd=1

fontt=20

p0=0; pd=1; N=20

p=linspace(p0,pd,N);

H=-p.*log2(p)-(1-p).*log2(1-p);

plot(p,H,'k');

title('H=-p.*log2(p)-(1-p).*log2(1-p)函数图');

xlabel('p');ylabel('H');

信道容量实验程序:

clc; close all; clear;

linwidd=1

fontt=20

p0=0; pd=1; N=20

p=linspace(p0,pd,N);

r=4

c=log2(r)+(1-p).*log2(1-p)+p.*log2(p/(r-1));

plot(p,c,'k');

title('强对称信道容量数值模拟图');

有噪信道编码--费诺不等式程序:结果图clc;close all;clear;

r=3;p0=0.00001;pd=0.99999;N=2000;

p=linspace(p0,pd,N);

q=1-p;

H=-p.*log2(p)-q.*log2(q);

hold on

HH=H+p.*log2(r-1)

title('费诺不等式示意图');box on

xlabel('PE');

ylabel('H(X/Y)');

plot(p,HH,'k:')

hold on

hold on

fill([p,1],[HH,0],[0.6,0.6,0.6])

stem((r-1)/r,1.59,'--.r')

text(0.66,1.6,'最大值')

香农编码程序:

clc;clear all;close all;

p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01]; if sum(p)<1||sum(p)>1

error('输入概率不符合概率分布')

end

[p index]=sort(p,'descend');

n=length(p);

pa=zeros(n,1);

for ii=2:n

pa(ii)=pa(ii-1)+p(ii-1);

end

k=ceil(-log2(p));%码字长度计算

c=cell(1,n);%生成元胞数组,用来存不同长度的码字

for ii=1:n

c{ii}='';

tmp=pa(ii);

for jj=1:k(ii)

tmp=tmp*2;

if tmp>=1

tmp=tmp-1;

%c{ii}{jj}='1';

c{ii}=[char(c{ii}),'1']; else

%c{ii}{jj}='0';

c{ii}=[char(c{ii}),'0']; end

end

end c(index)=c;%换回原来的顺序

codelength=zeros(1,n);%码长初始化

for ii=1:n

fprintf(['第',num2str(ii),'个消息对应为']);

disp(c{ii});%显示码字

codelength(ii)=length(c{ii});%

end

n_average=sum(codelength.*p) %平均码长

fprintf('平均码长为');disp(n_average);

H=-sum(p.*log2(p));

fprintf('信源熵');disp(H);

x=H/(n_average.*log2(2))

fprintf('编码效率');disp(x);

figure

h=stem(1:n,codelength);%

axis([0 n+1 0 n+1]);

set(h,'MarkerFaceColor','blue','linewidth',2)

实验结果结果图第1个消息对应为000

第2个消息对应为001

第3个消息对应为011

第4个消息对应为100

第5个消息对应为101

第6个消息对应为1110

第7个消息对应为1111110

n_average = 3.1400

平均码长为 3.1400

信源熵 2.6087

x =0.8308

编码效率 0.8308

费诺编码程序:

end

for rr=2:2:needgroupnum*2

index2=index_aftergroup(rr,:);

for ii=index2(1):index2(2)

c{ii}=[char(c{ii}),'1']; end

end

flag=0;

index_p=[];

for rr=1:needgroupnum*2

indextmp=index_aftergroup(rr,:); if(indextmp(2)-indextmp(1)+1>1) flag=1;

index_p=[index_p;indextmp]; end

end

jj=jj+1;

end

c(index)=c;

codelength=zeros(1,N);

for ii=1:N

fprintf(['第',num2str(ii),'个消息对应为']);

disp(c{ii});

codelength(ii)=length(c{ii}); end

n_average=sum(codelength.*p)

fprintf('平均码长为

');disp(n_average);

H=-sum(p.*log2(p));

fprintf('信源熵');disp(H);

x=H/(n_average.*log2(2))

fprintf('编码效率');disp(x); figure

h=stem(1:N,codelength);

axis([0 N+1 0 N+1]);

set(h,'MarkerFaceColor','blue','linewidth',2)

end

function index_aftergroup=func_group(p,index_p)

index=index_p(1):index_p(2);

n=length(index);

p0=p(index);

sump0=sum(p0);

half_sump0=sump0/2;

for ii=1:n-1

tmpsum=sum(p0(1:ii));

if abs(tmpsum-half_sump0)<=abs(tmpsum-half_sump0+p0(ii+1))

index_aftergroup=[index(1) index(ii);index(ii+1) index(n)]; break;

end

end

end

实验结果结果图

第1个消息对应为00

第2个消息对应为010

第3个消息对应为011

第4个消息对应为10

第5个消息对应为110

第6个消息对应为1110

第7个消息对应为1111

n_average = 2.7400

平均码长为 2.7400

信源熵 2.6087

x =0.9521

编码效率 0.9521

霍夫曼编码程序:clc;clear all;close all; A=[0.4 0.2 0.2 0.1 0.1]; A=sort(A,'descend');

T=A;

[m,n]=size(A);

B=zeros(n,n-1);

B(:,1)=T;

r=B(n,1)+B(n-1,1);

T(n-1)=r; T(n)=0;

T=sort(T,'descend');

t=n-1;

for j=2:n-1

B(1:t,j)=T(1:t);

K=find(T==r);

%B(n,j)=K(end);

B(n,j)=K(1);

r=(B(t-1,j)+B(t,j));

T(t-1)=r;

T(t)=0;

T=sort(T,'descend');

t=t-1;

end

B;

ENDc1=sym('[1,0]');

ENDc=ENDc1;

t=3;

d=1;

for j=n-2:-1:1

for i=1:t-2

if i>1&&B(i,j)==B(i-1,j)

相关文档
最新文档