文档库 最新最全的文档下载
当前位置:文档库 › 信息论matlab的实验用到的编码

信息论matlab的实验用到的编码

信息论matlab的实验用到的编码
信息论matlab的实验用到的编码

Matlab源程序

附录A 信息熵

% 函数说明:%

% H=entropy(P,r) 为信息熵函数%

% P为信源的概率矢量, r为进制数%

% H为信息熵%

%****************************** %

function H=entropy(P,r)

if (length(find(P<=0))~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

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

error('Not a prob.vector,component do not add up to 1');

end

H=(sum(-P.*log2(P)))/(log2(r)+eps);

附录B 离散无记忆信道容量的迭代计算

% 信道容量C的迭代算法%

% 函数说明:%

% [CC,Paa]=ChannelCap(P,k) 为信道容量函数%

% 变量说明:%

% P:输入的正向转移概率矩阵,k:迭代计算精度%

% CC:最佳信道容量,Paa:最佳输入概率矩阵%

% Pa:初始输入概率矩阵,Pba:正向转移概率矩阵%

% Pb:输出概率矩阵,Pab:反向转移概率矩阵%

% C:初始信道容量,r:输入符号数,s:输出符号数%

%************************************************** %

function [CC,Paa]=ChannelCap(P,k)

% 提示错误信息

if (length(find(P<0)) ~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

if (abs(sum(P')-1)>10e-10)

error('Not a prob.vector,component do not add up to 1') % 判断是否符合概率和为1

294

信息论基础及应用

end

% 1)初始化Pa

[r,s]=size(P);

Pa=(1/(r+eps))*ones(1,r);

sumrow=zeros(1,r);

Pba=P;

% 2)进行迭代计算

n=0;

C=0;

CC=1;

while abs(CC-C)>=k

n=n+1;

% (1)先求Pb

Pb=zeros(1,s);

for j=1:s

for i=1:r

Pb(j)=Pb(j)+Pa(i)*Pba(i,j);

end

end

% (2)再求Pab

suma=zeros(1,s);

for j=1:s

for i=1:r

Pab(j,i)=Pa(i)*Pba(i,j)/(Pb(j)+eps);

suma(j)=suma(j)+Pa(i)*Pba(i,j)*log2((Pab(j,i)+eps)/(Pa(i)+eps));

end

% 3)求信道容量C

C=sum(suma);

% 4)求下一次Pa,即Paa

L=zeros(1,r);

sumaa=0;

for i=1:r

for j=1:s

L(i)=L(i)+Pba(i,j)*log(Pab(j,i)+eps);

end

a(i)=exp( L(i));

end

sumaa=sum(a);

for i=1:r

Paa(i)=a(i)/(sumaa+eps);

end

% 5)求下一次C,即CC

CC=log2(sumaa);

Pa=Paa;

附录Matlab源程序295

end

% 打印输出结果

s0='很好!输入正确,迭代结果如下:';

s1='最佳输入概率分布Pa:';

s2='信道容量C:';

s3='迭代次数n:';

s4='输入符号数r:';

s5='输出符号数s:';

s6='迭代计算精度k:';

for i=1:r

B{i}=i;

end

disp(s0);

disp(s1),disp(B),disp(Paa);

disp(s4),disp(r);

disp(s5),disp(s);

disp(s2),disp(CC);

disp(s6),disp(k);

disp(s3),disp(n);

附录C Shannon编码

% 函数说明:%

% [p,x]=array(P,X) 为按降序排序的函数%

% P为信源的概率矢量,X为概率元素的下标矢量%

% p为排序后返回的信源的概率矢量%

% x为排序后返回的概率元素的下标矢量%

%*******************************************%

function [p,x]=array(P,X)

P=[P;X];

[l,n]=size(P);

for i=1:n

max=P(1,i);

maxN=i;

MAX=P(:,i);

for j=i:n

if (max

MAX=P(:,j);

max=P(1,j);

maxN=j;

end

end

if (maxN>1)

296

信息论基础及应用

if (i

for k=(maxN-1):-1:i

P(:, k+1)=P(:,k);

end

end

end

P(:,i)=MAX;

end

p=P(1,:);

x=P(2,:);

% shannon编码生成器%

% 函数说明:%

% [W,L,q]=shannon(p) 为shannon编码函数%

% p为信源的概率矢量,W为编码返回的码字%

% L为编码返回的平均码字长度,q为编码效率%

%*****************************************%

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

% 提示错误信息

if (length(find(p<=0)) ~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

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

error('Not a prob.vector,component do not add up to 1') % 判断是否符合概率和为1 end

% 1)排序

n=length(p);

x=1:n;

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

% 2)计算代码组长度l

l=ceil(-log2(p));

% 3)计算累加概率P

P(1)=0;

n=length(p);

for i=2:n

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

end

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

% a)将十进制数转为二进制数

for i=1:n

for j=1:l(i)

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

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

附录Matlab源程序297

end

end

% b)给W赋ASCII码值,用于显示二进制代码组W

for i=1:n

for j=1:l(i)

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

W(i,j)=48;

else

W(i,j)=49;

end

end

end

L=sum(p.*l); % 计算平均码字长度

H=entropy(p,2); % 计算信源熵

q=H/L; % 计算编码效率

% 打印输出结果

for i=1:n

B{i}=i;

end

[n,m]=size(W);

TEMP=32*ones(n,6);

W=[W,TEMP];

W=W';

[n,m]=size(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);

附录D Fano编码

% 函数说明:%

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

% 为比较函数,主要用于信源符号的分组%

% current_P为当前分组的信源的概率矢量%

% current_index为当前分组的信源的下标%

% next_P为返回的下次分组的信源的概率矢量 %

298

信息论基础及应用

% next_index为返回的下次分组的信源的下标%

% code_num为返回的ASCII值 %

%*********************************************************************%

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

n=length(current_P);

add(1)=current_P(1);

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

for i=2:n

add(i)=0;

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

end

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

s=add(n);

for i=1:n

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

end

[c,k]=min(temp);

% 3)对分组的信源赋ASCII值

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

end

% fano编码生成器%

% 函数说明:%

% [W,L,q]=fano(P) 为fano编码函数%

% P为信源的概率矢量,W为编码返回的码字%

% L为编码返回的平均码字长度,q为编码效率%

%*****************************************%

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

% 提示错误信息

if (length(find(P<=0)) ~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

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

error('Not a prob.vector,component do not add up to 1') % 判断是否符合概率和为1 end

% 1)排序

n=length(P);

附录Matlab源程序299

x=1:n;

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

% 2)将信源符号分组并得到对应的码字

for i=1:n

current_index=i;

j=1;

current_P=P;

while 1

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

end

end

l(i)=length(find(abs(W(i,:)) ~=0)); % 得到各码字的长度

end

L=sum(P.*l); % 计算平均码字长度

H=entropy(P,2); % 计算信源熵

q=H/L; % 计算编码效率

% 打印输出结果

for i=1:n

B{i}=i;

end

[n,m]=size(W);

TEMP=32*ones(n,5);

W=[W,TEMP];

W=W';

[n,m]=size(W);

W=reshape(W,1,n*m);

W=sprintf('%s', W);

s0='很好!输入正确,编码结果如下:';

s1='Fano 编码所得码字W:';

s2='Fano 编码平均码字长度L:';

s3='Fano 编码的编码效率q:';

disp(s0);

disp(s1),disp(B),disp(W);

disp(s2),disp(L);

disp(s3),disp(q);

300

信息论基础及应用

附录E Huffman编码

Huffman编码(1)

% huffman编码生成器%

% 函数说明:%

% [W,L,q]=huffman(P) 为huffman编码函数%

% P为信源的概率矢量,W为编码返回的码字%

% L为编码返回的平均码字长度,q为编码效率%

%*****************************************%

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

if (length(find(P<=0)) ~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

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

error('Not a prob.vector,component do not add up to 1') % 判断是否符合概率和为1 end

n=length(P); % 计算输入元素个数

p=P;

mark=zeros(n-1,n); % mark为n-1行、n列矩阵,用来记录每行最小两概率叠加后概率排列次序% 1) 确定概率大小值的排列,得到mark矩阵。

for i=1: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)。

for i=1:n-1

table(i,:)=blanks(n*n);

end

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

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

table(n-1,n)='1'; % 小值赋1

table(n-1,2*n)='0'; % 大值赋0

for i=2:n-1

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

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

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

for j=1:i-1

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

附录Matlab源程序301

n*(find(mark(n-i+1,:)==j+1)-1)+1:n*find(mark(n-i+1,:)==j+1));

% 按mark的记录依次赋值

end

% 4)得到编码后的码字

for i=1: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

L=sum(P.*l); % 计算平均码字长度

H=entropy(P,2); % 计算信源熵

q=H/L; % 计算编码效率

% 打印输出结果

for i=1:n

B{i}=i;

end

[m,n]=size(W);

TEMP=blanks(m);

W=[W,TEMP',TEMP',TEMP'];

[m,n]=size(W);

W=reshape(W',1,m*n);

s0='很好!输入正确,编码结果如下:';

s1='Huffman编码所得码字W:';

s2='Huffman编码平均码字长度L:';

s3='Huffman编码的编码效率q:';

disp(s0);

disp(s1),disp(B),disp(W);

disp(s2),disp(L);

disp(s3),disp(q);

Huffman编码(2)

% huffman编码生成器%

% 函数说明:%

% [W,L,V,q]=huffman_better(P) 为huffman_better编码函数%

% P为信源的概率矢量,W为编码返回的码字,V为码字的方差 %

% L为编码返回的平均码字长度,q为编码效率 %

%*******************************************************%

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

if (length(find(P<=0)) ~=0)

error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件end

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

error('Not a prob.vector,component do not add up to 1') % 判断是否符合概率和为1 end

302

信息论基础及应用

n=length(P); % 计算输入元素个数

p=P;

mark=zeros(n-1,n); % mark为n-1行、n列矩阵,用来记录每行最小两概率叠加后概率排列次序% 1) 确定概率大小值的排列,得到mark矩阵。

t=1;

for i=1:n-1

[p,num]=sort(p); % 对输入元素排序并纪录

if (i~=1)

if (count~=0)

k=max(a(t,:));

for s=count:-1:1

num(k-s)= num(k-s+1); % 若有与新项相等的项,则将新项尽可能排列在其右侧end

num(k)=1;

end

t=t+1;

end

mark(i,:)=[num(1:n-i+1),zeros(1,i-1)];

p=[p(1)+p(2),p(3:n),1]; % 前两项求和得新项

count=0; % 用于计数

for j=2:n-i

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

count=count+1;

a(t,count)=j;

end

end

end

% 2) 生成一个n-1行、n1(n×n)列矩阵table,每行可看做n个段,

% 每段长为n,记录一个码字(每个码字的长度不会超过n)。

for i=1:n-1

table(i,:)=blanks(n*n);

end

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

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

table(n-1,n)='1'; % 小值赋1

table(n-1,2*n)='0'; % 大值赋0

for i=2:n-1

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

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

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

for j=1:i-1

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

附录Matlab源程序303

n*(find(mark(n-i+1,:)==j+1)-1)+1:n*find(mark(n-i+1,:)==j+1));

% 按mark的记录依次赋值

end

end

% 4)得到编码后的码字

for i=1: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

L=sum(P.*l); % 计算平均码字长度

H=entropy(P,2); % 计算信源熵

V=sum(P.*((l-L).^2)); % 计算码字的方差,以判断编码方法的优劣

q=H/L; % 计算编码效率

% 打印输出结果

for i=1:n

B{i}=i;

end

[m,n]=size(W);

TEMP=blanks(m);

W=[W,TEMP',TEMP',TEMP'];

[m,n]=size(W);

W=reshape(W',1,m*n);

s0='很好!输入正确,编码结果如下:';

s1='Huffman编码所得码字W:';

s2='Huffman编码平均码字长度L:';

s3='Huffman编码所得码字W的方差V:';

s4='Huffman编码的编码效率q:';

disp(s0);

disp(s1),disp(B),disp(W);

disp(s2),disp(L);

disp(s3),disp(V);

disp(s4),disp(q)

附录F 信息率失真函数的迭代计算

% 信息率失真函数的迭代计算,迭代精度取为10^(-7) %

% 在信源的输入概率分布Pa和失真矩阵d已知的条件下求出信息率失真函数%

% 函数说明:%

% [Pba,Rmin,Dmax,Smax]=RateDF(Pa,d,S) 为信息率失真函数%

% 变量说明:%

% Pa:信源的输入概率矩阵,d:失真矩阵,S:拉氏乘子%

% Pba:最佳正向转移概率矩阵,Smax:最大拉氏乘子%

% Rmin:最小信息率,Dmax:允许的最大失真度%

304

信息论基础及应用

% Pb:信源的输出概率矩阵,D:允许的失真度,R:信息率%

% r:输入信源数,s:输出信源数%

%*********************************************************************%

function [Pba,Rmin,Dmax,Smax]=RateDF(Pa,d,S)

% 提示错误信息

[r,s]=size(d);

if (length(find(Pa<=0)) ~=0)

error('Not a prob.vector, shoud be positive component!'); % 判断是否符合概率分布条件end

if (abs(sum(Pa)-1)>10e-10)

error('Not a prob.vector,component do not add up to 1!') % 判断是否符合概率和为1 end

if (r~=length(Pa))

error('The parameters do not match!'); % 判断参数是否一致

end

% 第一步

pba=[];

RS=[]; % R(S)函数初始化

DS=[]; % D(S)函数初始化

m=1; % m为S循环的次数

while (1) % 外层循环,对S 的循环

Pba(1:r,1:s,1)=1/s*ones(r,s); % 求信道正向转移矩阵Pba

% 第二步

for j=1:s

Pb(j,1)=0;

for i=1:r

Pb(j,1)=Pb(j,1)+Pa(i)*Pba(i,j,1);

% 求信源的输出概率矩阵,即Pb(j,1)

end

end

for i=1:r

temp(i)=0;

for j=1:s

temp(i)=temp(i)+Pb(j,1)*exp(S(m)*d(i,j));

% temp为临时项,求Pba(i,j,2)时表达式的分母

end

end

for i=1:r

for j=1:s

Pba(i,j,2)=(Pb(j,1)*exp(S(m)*d(i,j)))/temp(i);

end

end

D(1)=0;

for i=1:r

附录Matlab源程序305

for j=1:s

D(1)=D(1)+Pa(i)*Pba(i,j,1)*d(i,j); % 求D(1)

end

end

R(1)=0;

for i=1:r

for j=1:s

if (Pba(i,j,1) ~=0)

R(1)=R(1)+Pa(i)*Pba(i,j,1)*log2(Pba(i,j,1)/Pb(j,1)); % 求R(1)

end

end

end

n=2; % n为内层循环次数

while (1) % 内层循环,对精度的循环

% 第三步

for j=1:s

Pb(j,n)=0;

for i=1:r

Pb(j,n)=Pb(j,n)+Pa(i)*Pba(i,j,n); % 求输出的信源概率分布

end

end

for i=1:r

temp(i)=0;

for j=1:s

temp(i)=temp(i)+Pb(j,n)*exp(S(m)*d(i,j));

% temp为临时项,求Pba(i,j,n+1)时表达式的分母

end

end

for i=1:r

for j=1:s

if (temp(i) ~=0)

Pba(i,j,n+1)=(Pb(j,n)*exp(S(m)*d(i,j)))/temp(i);

% 求Pba(i,j,n+1)

end

end

end

% 第四步

D(n)=0;

for i=1:r

for j=1:s

D(n)=D(n)+Pa(i)*Pba(i,j,n)*d(i,j); % 求D(n)

end

end

R(n)=0;

306

信息论基础及应用

for i=1:r

for j=1:s

if (Pba(i,j,n) ~=0)

R(n)=R(n)+Pa(i)*Pba(i,j,n)*log2(Pba(i,j,n)/Pb(j,n));

% 求R(n)

end

end

end

% 判断差别是否在允许的精度范围之内

if (abs(R(n)-R(n-1))<=10^(-7)) % R(n)精度判断

if (abs(D(n)-D(n-1))<=10^(-7)) % D(n)精度判断

break;

end

end

n=n+1; % 内层循环次数加1

end % 内层循环结束

% 第五步

S(m+1)=S(m)+0.5;

% 第六步

if (abs(R(n)<10^(-7)))

if (m<=10)

disp('此时S的值为:'),disp(S(m));

error('初始拉氏乘子S取得大了,请取小些!');

% 判断拉氏乘子S的初始值是否合适

else

[k,l,q]=size(pba);

Pba=pba(:,:,q);

Rmin=min(RS);

Dmax=max(DS);

Smax=S(m-1);

break;

end

end

pba=[Pba(:,:,:)];

RS=[RS R(n)];

DS=[DS D(n)];

m=m+1; % 外层循环次数加1

end % 外层循环结束

% 打印输出结果

s0='很好!输入正确,迭代结果如下:';

s1='最佳转移概率分布Pba:';

s2='最小信息率Rmin:';

s3='最大失真度Dmax:';

s4='最大拉氏乘子Smax:';

附录Matlab源程序307

disp(s0);

disp(s1),disp(Pba);

disp(s2),disp(Rmin);

disp(s3),disp(Dmax);

disp(s4),disp(Smax);

% 画出信息率失真函数R(D)

plot(DS,RS)

xlabel('允许的失真度D')

ylabel('信息率失真函数R(D)')

title('信息率失真函数R(D)的曲线图')

参考文献

1 C.E.Shannon.A Mathematical Theory of Communication.B.S.T.J.vol.27, July, and Oct.1948

2 C.E.Shannon.Coding Theorems for a Discrete Source with a Fidelity Criterion.IRE Nat.Conv.Rec.part 4, 1959

3 C.E.Shannon.Two way Communication channels.Pro.4th Berkeley Symp.on Math.Statisties and Probability,

vol.I.pp.611—644, 1961

4 N. https://www.wendangku.net/doc/1611851255.html,rmation Theory and Coding.McGraw-Hall, Inc., 1963

5 https://www.wendangku.net/doc/1611851255.html,rmation Theory and Reliable Communication. John Wley & Sons., 1968

6 T.Berger.Rate Distortion Theory.Prentice-Hall, Inc., 1971

7 https://www.wendangku.net/doc/1611851255.html,rmation Theory With Application. McGraw-Hill,Inc.,1977

8 D.S.Jones.Elementary Information Theory.Clarendon Press.Oxford,1979

9 Robert J.McEliece.The Theory of Information and Coding(第2版). 电子工业出版社,2002

10 Thomas M.Cover, Joy A.Thomas. Elements of Information Theory. 清华大学出版社,2003

11 周炯槃.信息理论基础.人民邮电出版社,1983

12 傅祖芸.信息论基础.电子工业出版社,1989

13 周荫清.信息理论基础.北京航空航天大学出版社,1993

14 钟义信.信息科学原理.北京邮电大学出版社,1996

15 朱雪龙.应用信息论基础.清华大学出版社,2001

16 傅祖芸.信息论——基础理论与应用.电子工业出版社,2001

17 姜丹.信息论与编码.中国科学技术大学出版社,2001

18 曹雪虹等.信息论与编码.北京邮电大学出版社,2001

19 沈世镒等.信息论与编码理论.科学出版社,2002

20 周荫清.信息理论基础(修订版). 北京航空航天大学出版社,2002

21 余成波.信息论与编码.重庆大学出版社,2002

22 陈运等.信息论与编码.电子工业出版社,2002

23 仇佩亮.信息论与编码.高等教育出版社,2003

24 叶中行.信息论基础.高等教育出版社,2003

25 唐朝京等.信息论与编码基础.国防科技大学出版社,2003

26 吕锋等.信息理论与编码.人民邮电出版社,2004

信息论与编码实验

实验五霍夫曼编码 一、实验目的 1、熟悉Matlab 工作环境及工具箱; 2、掌握霍夫曼编码的基本步骤; 3、利用MATLAB实现霍夫曼编码。 二、实验内容 (1)熟悉理解Huffman编码的过程 (2)将给定的数据进行Huffman编码 知识要点: 1、霍夫曼编码的基本原理。参照教材及参考书。 2、二进制霍夫曼编码方法。 1. 基本原理: 变长编码 不要求所有码字长度相同,对不同概率的信源符号或序列,可赋予不同长度的码字。变长编码力求平均码长最小,此时编码效率最高,信源的冗余得到最大程度的压缩。 1)几种常用变长编码方法: 霍夫曼编码 费若编码 香农编码。 2)霍夫曼编码: 二进制霍夫曼编码 r进制霍夫曼编码 符号序列的霍夫曼编码。 3)二进制霍夫曼编码的编码过程: 将信源中n个符号按概率分布的大小,以递减次序排列起来; 用0和1码分别分配给概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个新符号,并用这两个最小概率之和作为新符号的概率,从而得到只包含n-1个符号的新信源,称为其缩减信源; 把缩减信源的符号仍按概率大小以递减次序排列,再将最后两个概率最小的符号合并

成一个新符号,并分别用0和1码表示,这样又形成一个新缩减信源; 依次继续下去,直到缩减信源最后只剩两个符号为止。再将最后两个新符号分别用0和1 码符号表示。最后这两个符号的概率之和为1,然后从最后一级缩减信源开始,依编码路径右后向前返回,就得到各信源符号所对应得码符号序列,即对应得码字。 r进制霍夫曼编码 由二进制霍夫曼编码可推广到r进制霍夫曼编码,只是每次求缩减信源时,改求r个最小概率之和,即将r个概率最小符号缩减为一个新符号,直到概率之和为1。但要注意,即缩减过程中可能到最后没有r个符号。为达次目的,可给信源添加几个概率为零的符号。 符号序列的霍夫曼编码 对信源编码除了对信源符号编码以外,也可对信源符号序列编码,一般来说,对序列编码比对单个符号更为有效。 2 数据结构与算法描述 1)变量及函数的定义 3 实验数据与实验结果(可用文字描述或贴图的方式进行说明) 1)测试数据 0.2 0.1 0.3 0.1 0.1 0.2 2)实验结果

基于MATLAB的卷积码的分析与应用

基于MATLAB的卷积码的分析与应用

毕业设计(论文)任务书

基于MATLAB的卷积码的分析与应用 摘要 随着现代通信的发展,特别是在未来4G通信网络中,高速信息传输和高可靠性传输成为信息传输的两个主要方面,而可靠性尤其重要。因为信道状况的恶劣,信号不可避免会受到干扰而出错。为实现可靠性通信,主要有两种途径:一种是增加发送信号的功率,提高接收端的信号噪声比;另一种是采用编码的方法对信道差错进行控制。前者常常受条件限制,不是所有情况都能采用。因此差错控制编码得到了广泛应用。 介绍了多种信道编码方式,着重介绍了卷积码的编码方法和解码方式。介绍了MATLAB的使用方法、编程方法、语句、变量、函数、矩阵等。介绍了TD-SCDMA通信系统和该系统下的卷积码,搭建了系统通信模型。编写卷积码的编码和解码程序。用MATLAB仿真软件对TD-SCDMA系统的卷积码编解码进行仿真。对其纠正错码性能进行验证,并且对误码率进行仿真和分析。卷积码的编码解码方式有很多,重点仿真Viterbi算法。Viterbi算法就是利用卷积码编码器的格图来计算路径度量,选择从起始时刻到终止时刻的惟一幸存路径作为最大似然路径。沿着最大似然路径回溯到开始时刻,所走过的路径对应的编码输出就是最大似然译码输出序列。它是一种最大似然译码方法,当编码约束长度不大、或者误码率要求不是很高的情况下,Viterbi译码器设备比较简单,计算速度快,因而Viterbi译码器被广泛应用于各种领域。 关键词:卷积码;信道编码;TD-SCDMA;MATLAB

目录 毕业设计(论文)任务书 ............................................................................................I 摘要........................................................................................................................... II Abstract......................................................................................... 错误!未定义书签。第1章绪论 . (1) 1.1课题研究的背景和来源 (1) 1.2主要内容 (2) 第2章相关理论介绍 (3) 2.1信道编码 (3) 2.1.1 信道编码的分类 (3) 2.1.2 编码效率 (3) 2.2线性分组码 (3) 2.3循环码 (5) 2.4卷积码 (6) 2.4.1 卷积码简介 (7) 2.4.2 卷积码的编码 (7) 2.4.3 卷积码的解码 (13) 第3章MATLAB应用 (21) 3.1数和算术的表示方法 (21) 3.2向量与矩阵运算 (21) 3.2.1 通过语句和函数产生 (21) 3.2.2 矩阵操作 (22) 3.3矩阵的基本运算 (22) 3.3.1 矩阵乘法 (22) 3.3.2 矩阵除法 (23) 3.4MATLAB编程 (23) 3.4.1 关系运算 (23) 3.4.2 控制流 (25) 第4章卷积码的设计与仿真 (27) 4.1TD-SCDMA系统 (27) 4.1.1 系统简介 (27) 4.1.2 仿真通信系统模型 (27)

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点6C601 实验成绩 二〇一五年十一月二〇一五年十一月

实验一:香农(Shannon )编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1、将信源消息符号按其出现的概率大小排列 )()()(21n x p x p x p ≥≥≥ 2、确定满足下列不等式的整数码长K i ; 1)(l o g )(l o g 22+-<≤-i i i x p K x p 3、为了编成唯一可译码,计算第i 个消息的累加概率 ∑ -== 1 1 )(i k k i x p p 4、将累加概率P i 变换成二进制数。 5、取P i 二进制数的小数点后K i 位即为该消息符号的二进制码。 四、源程序: #include #include #include #include #include using namespace std; int main() { int N; cout<<"请输入信源符号个数:";cin>>N; cout<<"请输入各符号的概率:"<

int i,j; for(i=0;i

基于MATLAB的LDPC信道编码的研究及实现

本科毕业设计任务书 题目:基于MATLAB的LDPC信道编码的研究及实现

一、毕业设计内容及要求 1、课题说明: 随着无线通信技术的发展和各种传输方式对可靠性要求的不断提高,信道编码作为抗干扰技术的重要手段之一,在数字通信技术领域和数字传输领域显示出越来越重要的作用。近年来,基于中继的协作通信技术通过有效利用空间分集,显著改善通信系统的性能。协作通信技术还可以利用纠错码以进一步提高系统性能。Turbo码和LDPC码作为一种能够逼近香农限的优异差错编码技术,在现代通信中起着举足轻重的作用。LDPC码的种种优点使其成为下一代移动通信(4G)的强有力竞争者,因此LDPC码已经成为信道编码领域的研究热点之一。 本选题的基本任务:在了解LDPC码字的重要作用的基础之上,通过对LDPC码的编译码算法的深入研究,利用MATLAB对LDPC码进行模拟仿真,建立仿真分析模型,分析编码过程中码长、列重、围长等参数的影响,译码时采用不同的译码算法并做出比较。 2、毕业设计的主要内容: (1)了解信道编码在通信系统中的重要作用; (2)掌握LDPC信道编码工作的基本原理; (3)熟悉并掌握LDPC码的编译码算法; (4)利用MATLAB建立LDPC信道编码的仿真模型; (5)对系统进行优化并比较分析码长、列重等参数的影响; (6)比较分析不同的译码算法的影响。 3、毕业设计的基本要求: (1)了解课题的相关知识; (2)调研,比较国内外相关方面的课题; (3)设计方案要进行技术分析,以选择较为合理的方案; (4)实验要求有实验方法和实验数据以及数据分析; (5)设计说明书应包括与有关的叙述说明和计算,内容完整、计算正确; (6)书写工整。计算公式和引用数据要正确,并说明其来源; (7)设计说明书应包括中英文摘要、目录、前言、正文、小结、参考文献; (8)设计说明书图纸应能较好地表达意图,图面布局合理,符合国家制图标准和有关规范。 4、毕业设计工作量: (1)写开题报告,要求不少于2000字;

信息论与编码实验报告材料

实验报告 课程名称:信息论与编码姓名: 系:专 业:年 级:学 号:指导教 师:职 称:

年月日 目录 实验一信源熵值的计算 (1) 实验二Huffman 信源编码. (5) 实验三Shannon 编码 (9) 实验四信道容量的迭代算法 (12) 实验五率失真函数 (15) 实验六差错控制方法 (20) 实验七汉明编码 (22)

实验一信源熵值的计算 、实验目的 1 进一步熟悉信源熵值的计算 2 熟悉Matlab 编程 、实验原理 熵(平均自信息)的计算公式 q q 1 H(x) p i log2 p i log2 p i i 1 p i i 1 MATLAB实现:HX sum( x.* log2( x));或者h h x(i)* log 2 (x(i )) 流程:第一步:打开一个名为“ nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数( 遇到小写字母都将其转化为大写字母进行计数) ,每出现一次该字符的计数器+1;第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat )。 程序流程图: 三、实验内容 1、写出计算自信息量的Matlab 程序 2、已知:信源符号为英文字母(不区分大小写)和空格输入:一篇英文的信源文档。输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。 四、实验环境 Microsoft Windows 7

五、编码程序 #include"stdio.h" #include #include #define N 1000 int main(void) { char s[N]; int i,n=0; float num[27]={0}; double result=0,p[27]={0}; FILE *f; char *temp=new char[485]; f=fopen("nan311.txt","r"); while (!feof(f)) { fread(temp,1, 486, f);} fclose(f); s[0]=*temp; for(i=0;i='a'&&s[i]<='z') num[s[i]-97]++; else if(s[i]>='A'&&s[i]<='Z') num[s[i]-65]++; } printf(" 文档中各个字母出现的频率:\n"); for(i=0;i<26;i++) { p[i]=num[i]/strlen(s); printf("%3c:%f\t",i+65,p[i]); n++; if(n==3) { printf("\n"); n=0; } } p[26]=num[26]/strlen(s); printf(" 空格:%f\t",p[26]);

数字通信系统matlab仿真

课程设计报告 题目:基于MATLAB的通信系统仿真 ———信道编码对通信系统性能的影响 专业:通信工程 姓名:XXX 学号:0730xxxx

基于MATLAB 的通信系统仿真 ———信道编码对通信系统性能的影响 摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB 仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN 信道和深衰落信道。 关键词:信道编码、分组码、MATLAB 仿真、性能 一、引言 提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年,信息论的奠基人C.E.Shannon 在他的开创性论文“通信的数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率R 不大于信道容量C, 就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本条件 :(1 )采用随机编译码方式 ; (2 )编码长度L→∞ , 即分组的码组长度无限 ; (3)译码采用最佳的最大似然译码算法。【1】 二、信道编码理论 1、信道编码的目的 在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。 2、信道编码的实质 信道编码的实质就是在信息码中增加一定数量的多余码元(称为监督码元),使它们满足一定的约束关系,这样由信息码元和监督码元共同组成一个由信道传输的码字。举例而言,欲传输k 位信息,经过编码得到长为n(n>k)的码字,则增加了 n - k = r 位多余码元,我们定义 R = k / n 为编码效率。【2】 3、 信道编码公式 令信息速率为f b ,经过编码以后的速率为f t ,定义:R =f b /f t 为编码率。则对于任何一个信道,总存在一个截止速率R 0,只要R

《信息论与信源编码》实验报告

《信息论与信源编码》实验报告 1、实验目的 (1) 理解信源编码的基本原理; (2) 熟练掌握Huffman编码的方法; (3) 理解无失真信源编码和限失真编码方法在实际图像信源编码应用中的差异。 2、实验设备与软件 (1) PC计算机系统 (2) VC++6.0语言编程环境 (3) 基于VC++6.0的图像处理实验基本程序框架imageprocessing_S (4) 常用图像浏览编辑软件Acdsee和数据压缩软件winrar。 (5) 实验所需要的bmp格式图像(灰度图象若干幅) 3、实验内容与步骤 (1) 针对“图像1.bmp”、“图像2.bmp”和“图像3.bmp”进行灰度频率统计(即计算图像灰度直方图),在此基础上添加函数代码构造Huffman码表,针对图像数据进行Huffman编码,观察和分析不同图像信源的编码效率和压缩比。 (2) 利用图像处理软件Acdsee将“图像1.bmp”、“图像2.bmp”和“图像 3.bmp”转换为质量因子为10、50、90的JPG格式图像(共生成9幅JPG图像),比较图像格式转换前后数据量的差异,比较不同品质因素对图像质量的影响; (3) 数据压缩软件winrar将“图像1.bmp”、“图像2.bmp”和“图像3.bmp”分别生成压缩包文件,观察和分析压缩前后数据量的差异; (4) 针对任意一幅图像,比较原始BMP图像数据量、Huffman编码后的数据量(不含码表)、品质因素分别为10、50、90时的JPG文件数据量和rar压缩包的数据量,分析不同编码方案下图像数据量变化的原因。 4、实验结果及分析 (1)在VC环境下,添加代码构造Huffman编码表,对比试验结果如下: a.图像1.bmp:

基于matlab的turbo码编码的结题报告 彭锦程

基于matlab的turbo码编码的结题报告 姓名:彭锦程 学号:10021230 同组人:李世斌 学号:10021229 指导老师:徐小平

一:引言 自从香农的信道编码定理提出之后,人们对设计出好的信道码的探索与研究就从未间断。1993 年,在国际通信会议上法国学者C Berrou 等人首次提出了Turbo 码。在加性高斯白噪声的环境下,采用编码效率R=1/2、交织长度为65536 的Turbo 码,经过18 次迭代译码后,在Eb/N0=0.7dB 时,其误码率已低于10-5,与香农极限只相差0.7dB。Turbo 码以其优异的性能引起各国研究学者的强烈关注,成为研究的热点课题。在第3 代移动通信系统的建议中,无论是UMTS(WCDMA)还是IS2000(CDMA2000),都已将Turbo 码作为高速率、高质量数据传输中信道编码方案的标准。虽然至今Turbo 码在数学上的机理还没有定论,但是,Turbo 码的优越性能及其迭代译码算法的思想,很大程度上已经被人们所理解。 Shannon 编码定理指出:如果采用足够长的随机编码,就能逼近Shannon 信道容量。而Turbo 码以其接近Shannon 理论极限的译码性能,已被采纳为3G移动通信系统的信道编码标准之一。Turbo 码巧妙地将两个简单分量码通过伪随机交织器并行级联来构造具有伪随机特性的长码,并通过在两个软输入/ 软输出(SISO) 译码器之间进行多次迭代实现了伪随机译码。采用迭代译码的方法来提高通信系统的译码性能是Turbo 码的最大特点。 Turbo 码的编码器、译码器结构繁琐,是一种非常复杂的信道编码方案,这使得对Turbo 码的理论分析十分困难,且只能对运算复杂度作宏观分析,对Turbo码的具体实现并没有一个清楚的度量。因此,使用计算机对Turbo 码进行仿真分析是十分必要的。考虑到Turbo 码系统编译码的数据处理量很大,利用生成矩阵对信息序列进行编码、译码时的迭代计算等等,都涉及了矩阵运算,故采用Matlab/ Simulink 来进行建模仿真,同时分析了迭代次数、交织长度及不同译码算法对Turbo 码性能的影响。 二:Turbo 码的编码器和译码器原理 Turbo 码编码器组成 Turbo 码的编码器的基本结构如图1 所示。 图1 Turbo 码的编码器结构图 Turbo 码编码器主要由两个递归系统卷积编码器(RSC) 、一个交织器与一个删余和复用单元组成。递归系统卷积编码器是指带有反馈的系统卷积编码器,其码率可设为R = k/ n ;交织器用来改变信息序列的排列顺序,获得与原始信息序列内容相同,但排列不同的信息序列;删余和复用单元的作用是从总体上改善Turbo码码率,因此通过删余和复用单元, Turbo 码可以获得不同码率的码字。编码器的码字通过信道输出到译码器内。 Turbo 码译码器原理

信息论与编码实验报告

实验一 绘制二进熵函数曲线(2个学时) 一、实验目的: 1. 掌握Excel 的数据填充、公式运算和图表制作 2. 掌握Matlab 绘图函数 3. 掌握、理解熵函数表达式及其性质 二、实验要求: 1. 提前预习实验,认真阅读实验原理以及相应的参考书。 2. 在实验报告中给出二进制熵函数曲线图 三、实验原理: 1. Excel 的图表功能 2. 信源熵的概念及性质 ()()[] ()[]())(1)(1 .log )( .) ( 1log 1log ) (log )()(10 , 110)(21Q H P H Q P H b n X H a p H p p p p x p x p X H p p p x x X P X i i i λλλλ-+≥-+≤=--+-=-=≤≤? ?????-===??????∑ 单位为 比特/符号 或 比特/符号序列。 当某一符号xi 的概率p(xi)为零时,p(xi)log p(xi) 在熵公式中无意义,为此规定这时的 p(xi)log p(xi) 也为零。当信源X 中只含有一个符号x 时,必有p(x)=1,此时信源熵H (X )为零。 四、实验内容: 用Excel 和Matlab 软件制作二进熵函数曲线。根据曲线说明信源熵的物理意义。 (一) Excel 具体步骤如下: 1、启动Excel 应用程序。 2、准备一组数据p 。在Excel 的一个工作表的A 列(或其它列)输入一组p ,取步长为0.01,从0至100产生101个p (利用Excel 填充功能)。

3、取定对数底c,在B列计算H(x) ,注意对p=0与p=1两处,在B列对应位置直接输入0。Excel中提供了三种对数函数LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然对数,LOG10(x)是求以10为底的对数,LOG(x,c)表示求对数。选用c=2,则应用函数LOG(x,2)。 在单元格B2中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2) 双击B2的填充柄,即可完成H(p)的计算。 4、使用Excel的图表向导,图表类型选“XY散点图”,子图表类型选“无数据点平滑散点图”,数据区域用计算出的H(p)数据所在列范围,即$B$1:$B$101。在“系列”中输入X值(即p值)范围,即$A$1:$A$101。在X轴输入标题概率,在Y轴输入标题信源熵。 (二)用matlab软件绘制二源信源熵函数曲线 p = 0.0001:0.0001:0.9999; h = -p.*log2(p)-(1-p).*log2(1-p); plot(p,h) 五、实验结果

基于matlab的2-3卷积码编码译码设计与仿真

西南科技大学 方向设计报告 课程名称:通信工程方向设计 设计名称:2/3卷积码编译码器仿真与性能分析 姓名: 学号: 班级: 指导教师: 起止日期:2011.12.12-2012.1.6 西南科技大学信息工程学院制

方向设计任务书 学生班级:学生姓名:学号: 设计名称:2/3卷积码编译码器仿真与性能分析 起止日期:2011.12.12-2012.1.6指导教师: 设计要求: (1)分析2/3卷积码编码器结构; (2)分析2/3卷积码译码的Viterbi算法; (3)基于SIMULINK进行2/3卷积码的纠错性能仿真; 方向设计学生日志 时间设计内容 12.15-12.17 查看题目及设计要求。 12.18-12.23 查阅相关资料,设计方案。 12.23-12.27 编写报告及调试程序。 12.28-12.29 完善修改课程设计报告。 12.30-12.31 答辩。

方向设计考勤表 周星期一星期二星期三星期四星期五 方向设计评语表 指导教师评语: 成绩:指导教师: 年月日

2/3卷积码编译码器仿真与性能分析 摘要: 卷积码是一种性能优越的信道编码。它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。本文简明地介绍了卷积码的编码原理和Viterbi译码原理。并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。经过仿真和实测,并对测试结果作了分析。 关键词: 卷积码编码器、viterbi译码器、SIMULINK

基于matlab的通信系统仿真要点

创新实践报告 报告题目:基于matlab的通信系统仿真学院名称:信息工程学院 姓名: 班级学号: 指导老师: 二O一四年十月十五日

一、引言 现代社会发展要求通信系统功能越来越强,性能越来越高,构成越来越复杂;另一方面,要求通信系统技术研究和产品开发缩短周期,降低成本,提高水平。这样尖锐对立的两个方面的要求,只有通过使用强大的计算机辅助分析设计技术和工具才能实现。在这种迫切的需求之下,MATLAB应运而生。它使得通信系统仿真的设计和分析过程变得相对直观和便捷,由此也使得通信系统仿真技术得到了更快的发展。通信系统仿真贯穿着通信系统工程设计的全过程,对通信系统的发展起着举足轻重的作用。通信系统仿真具有广泛的适应性和极好的灵活性,有助于我们更好地研究通信系统性能。通信系统仿真的基本步骤如下图所示:

二、仿真分析与测试 (1)随机信号的生成 利用Matlab 中自带的函数randsrc 来产生0、1等概分布的随机信号。源代码如下所示: global N N=300; global p p=0.5; source=randsrc(1,N,[1,0;p,1-p]); (2)信道编译码 1、卷积码的原理 卷积码(convolutional code)是由伊利亚斯(p.Elias)发明的一种非分组码。在前向纠错系统中,卷积码在实际应用中的性能优于分组码,并且运算较简单。 卷积码在编码时将k 比特的信息段编成n 个比特的码组,监督码元不仅和当前的k 比特信息段有关,而且还同前面m=(N-1)个信息段有关。 通常将N 称为编码约束长度,将nN 称为编码约束长度。一般来说,卷积码中k 和n 的值是比较小的整数。将卷积码记作(n,k,N)。卷积码的编码流程如下所示。 可以看出:输出的数据位V1,V2和寄存器D0,D1,D2,D3之间的关系。根据模2 D0D2D1D3 + + M V1 V2 OUT 02 1V D D =⊕0123 2V D D D D =⊕⊕⊕

信息论与编码试题集与答案(新)

一填空题(本题20分,每小题2分) 1、平均自信息为 表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。 平均互信息 表示从Y获得的关于每个X的平均信息量,也表示发X前后Y的平均不确定性减少的量,还表示通信前后整个系统不确定性减少的量。 2、最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。 3、最大熵值为。 4、通信系统模型如下: 5、香农公式为为保证足够大的信道容量,可采用(1)用频带换信噪比;(2)用信噪比换频带。

6、只要,当N足够长时,一定存在一种无失真编码。 7、当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 8、在认识论层次上研究信息的时候,必须同时考虑到形式、含义和效用三个方面的因素。 9、1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。 按照信息的地位,可以把信息分成客观信息和主观信息。 人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。 信息的可度量性是建立信息论的基础。 统计度量是信息度量最常用的方法。 熵是香农信息论最基本最重要的概念。 事物的不确定度是用时间统计发生概率的对数来描述的。 10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用随机矢量描述。 11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为其发生概率对

数的负值 。 12、自信息量的单位一般有 比特、奈特和哈特 。 13、必然事件的自信息是 0 。 14、不可能事件的自信息量是 ∞ 。 15、两个相互独立的随机变量的联合自信息量等于 两个自信息量之和 。 16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量 趋于变小 。 17、离散平稳无记忆信源X 的N 次扩展信源的熵等于离散信源X 的熵的 N 倍 。 18、离散平稳有记忆信源的极限熵,=∞H )/(lim 121-∞→N N N X X X X H 。 19、对于n 元m 阶马尔可夫信源,其状态空间共有 nm 个不同的状态。 20、一维连续随即变量X 在[a ,b]区间内均匀分布时,其信源熵为 log2(b-a ) 。 21、平均功率为P 的高斯分布的连续信源,其信源熵,Hc (X )=eP π2log 21 2。 22、对于限峰值功率的N 维连续信源,当概率密度 均匀分布 时连续信源熵具有最大值。 23、对于限平均功率的一维连续信源,当概率密度 高斯分布 时,信源熵有最大值。 24、对于均值为0,平均功率受限的连续信源,信源的冗余度决定于平均功率的限定值P 和信源的熵功率P 之比 。

信息论与编码实验报告

信息论与编码实验报告-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实验一关于硬币称重问题的探讨 一、问题描述: 假设有N 个硬币,这N 个硬币中或许存在一个特殊的硬币,这个硬币或轻 或重,而且在外观上和其他的硬币没什么区别。现在有一个标准天平,但是无刻度。现在要找出这个硬币,并且知道它到底是比真的硬币重还是轻,或者所有硬币都是真的。请问: 1)至少要称多少次才能达到目的; 2)如果N=12,是否能在3 次之内将特殊的硬币找到;如果可以,要怎么称? 二、问题分析: 对于这个命题,有几处需要注意的地方: 1)特殊的硬币可能存在,但也可能不存在,即使存在,其或轻或重未知; 2)在目的上,不光要找到这只硬币,还要确定它是重还是轻; 3)天平没有刻度,不能记录每次的读数,只能判断是左边重还是右边重,亦或者是两边平衡; 4)最多只能称3 次。 三、解决方案: 1.关于可行性的分析 在这里,我们把称量的过程看成一种信息的获取过程。对于N 个硬币,他们 可能的情况为2N+1 种,即重(N 种),轻(N 种)或者无假币(1 种)。由于 这2N+1 种情况是等概率的,这个事件的不确定度为: Y=Log(2N+1) 对于称量的过程,其实也是信息的获取过程,一是不确定度逐步消除的过程。 每一次称量只有3 种情况:左边重,右边重,平衡。这3 种情况也是等概率 的,所以他所提供的信息量为: y=Log3 在K 次测量中,要将事件的不确定度完全消除,所以 K= Log(2N+1)/ Log3 根据上式,当N=12 时,K= 2.92< 3 所以13 只硬币是可以在3 次称量中达到

基于MATLAB的调制解调与信道编译码仿真

基于MATLAB 的调制解调与信道编译码仿真 摘要:随着信息时代的步伐,通信技术得到了全面的发展,信息技术已成为了21世纪最强大的国际化动力。在通信技术中,信息的调制、解调和误码纠错都占有重要的地位。MATLAB 作为一款功能强大的数学工具软件,在通信领域中得到了很广泛的应用。本文基于MATLAB 对信号进行模拟仿真设计,实现对二进制相移键控、循环码的纠错仿真、BPSK 的调制解调等进行仿真设计。 关键字:MATLAB 、调制解调、2PSK 、BPSK 、重复码。 一 、二进制和四进制相移键控调制仿真设计 1.1 二进制相移键控(2PSK )原理 相移键控是利用载波的相位变化来传递数字信息的,而振幅和频率保持不变。在2PSK 中常用0和π分别表示二进制“0”和“1”,2PSK 的信号时域表达式为: 2t )e c p s k n w t ?+()=Acos( n ?表示为第n 个符号的绝对相位,因此上式可改写为: 2Acosw t -Acosw t 1-P P e {psk c c t ()=概为概率为率 由于表示信号的两种码形完全相同,极性相反,故2PSK 信号一般表示一个双极性全占空矩形脉冲序列与一个正弦载波相乘。 2p ()sk e t =s(t)cosw c t 其中: s(t)=∑n a g(t-nTs); 这里,g(t)为脉宽Ts 的单个矩形脉冲;n a 的统计特征为 n a = 概率为 概率为 即发送二进制“0”时(a 1n =+),2p ()sk t e 取0相位;发送二进制符号“1”时(a 1n =+),2p ()s k t e 取π相位。这种以载波的不同相位直接法去表示相应二进制数字信号的调

基于MATLAB的信道编码分析

题目:基于MATLAB的通信系统仿真 ———信道编码对通信系统性能的影响 专业:通信工程 姓名:崔校通 学号:201300484316 日期: 2016.12.22

目录 一、引言 (2) 二、信道编码理论 (2) 2.1、信道编码的目的 (2) 2.2、信道编码的实质 (3) 2.3、信道编码公式 (3) 三、线性分组码的编译码原理 (3) 3.1、线性分组码的基本概念 (3) 3.2、生成矩阵和校验矩阵 (4) 四、MATLAB仿真 (5) 4.1仿真 (5) 4.1.1原理说明 (5) 4.1.2各子函数说明 (5) 4.2仿真源程序 (5) 4.2.1信道编码 (5) 4.2.2信道解码 (6) 4.2.3交织 (6) 4.2.4解交织 (7) 4.2.5信道衰落 (7) 六程序及仿真图 (8) 1、file1:信道编码对通信系统性能的影响,有无信道编码的影响 (8) 2、file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响 (10) 3、file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较 (13)

基于MATLAB的通信系统仿真 ———信道编码对通信系统性能的影响摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN信道和深衰落信道。 关键词:信道编码、分组码、MATLAB仿真、性能 一、引言 提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年,信息论的奠基人C.E.Shannon在他的开创性论文“通信的数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率R不大于信道容量C, 就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本条件:(1 )采用随机编译码方式; (2 )编码长度L→∞ , 即分组的码组长度无限; (3)译码采用最佳的最大似然译码算法。 二、信道编码理论 2.1、信道编码的目的 在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。

信息论霍夫曼编码

信息论与编码实验报告 课程名称:信息论与编码 实验名称:霍夫曼编码 班级: 学号: 姓名:

实验目的 1、熟练掌握Huffman编码的原理及过程,并熟练运用; 2、熟练运用MATLAB应用软件,并实现Huffman编码过程。 一、实验设备 装有MATLAB应用软件的PC计算机。 二、实验原理及过程 原理: 1、将信源符号按概率从大到小的排列,令P (X1)>=P(X2)>=P(X3)......P(Xn) 2、给两个概率最小的信源符号P(Xn-1)和P(Xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。 3、将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2. 4、重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 过程: 用MATLAB编写代码实现Huffman编码其程序为: %哈夫曼编码的MA TLAB实现(基于0、1编码):

clc; clear; A=[0.3,0.2,0.1,0.2,0.2];信源消息的概率序列 A=fliplr(sort(A));%按降序排列 T=A; [m,n]=size(A); B=zeros(n,n-1);%空的编码表(矩阵) for i=1:n B(i,1)=T(i);%生成编码表的第一列 end r=B(i,1)+B(i-1,1);%最后两个元素相加 T(n-1)=r; T(n)=0; T=fliplr(sort(T)); t=n-1; for j=2:n-1%生成编码表的其他各列 for i=1:t B(i,j)=T(i); end K=find(T==r); B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在

基于MATLAB的模拟通信系统的设计

现代通信原理课程设计 设 计 报 告 课题名称: 专业班级: 姓名: 学号: 起止时间: 2007.12.27-2008.01.13 重庆交通大学 计算机与信息学院

目录 一、课题内容 (1) 二、设计目的 (1) 三、设计要求 (1) 四、实验条件 (1) 五、系统设计 (1) 1. 通信系统的原理 (1) 2. 所设计子系统的原理 (4) 六、详细设计与编码 (5) 1. 设计方案 (5) 2. 编程工具的选择 (7) 3. 编码与测试 (7) 4. 编码与调试过程 (13) 5. 运行结果及分析 (14) 七、设计心得 (21) 八、参考文献 (23)

一、课题内容 基于MATLAB的模拟通信系统仿真-FM和DSB 二、设计目的 1、综合应用《Matlab原理及应用》、《信号与系统》、《现代通信原理》、《无线通信原理及应用》等多门课程知识,使学生建立通信系统的整体概念; 2、培养学生系统设计与系统开发的思想; 3、培养学生利用软件进行通信仿真的能力。 三、设计要求 1、每3人一组,组内成员进行各自分工,分别完成不同子系统的详细功能; 2、对通信系统有整体的较深入的理解,深入理解自己仿真部分的原理的基础,画出对应的通信子系统的原理框图; 3、提出仿真方案; 4、完成仿真软件的编制; 5、仿真软件的演示; 6、提交详细的设计报告。 四、实验条件 计算机、Matlab软件 五、系统设计 1.通信系统的原理 通信系统的一般模型

信息源:消息的生成者或来源; 发送设备:将信源输出的信号变为适合信道传输的发射信号,且发送信号包含了原始信号的一切信息; 信道:传输信号的通道,可以是有线的,也可以是无线的; 噪声源:在信道中传输,噪声是绝不可避免的,噪声又可为加性噪声(线性的噪声)和乘性噪声(非线性的噪声),一般我们只考虑加性噪声; 接收设备:从接收信号中提取我们所希望的信号,并将其转换成适合输出传感器的形式; 受信者:消息接收者。 在通信系统中,按信号参量的取值方式不同可把信号分为两类,即模拟信号和数字信号,再按照信道中传输信号的特征,来分为模拟通信系统和数字通信系统。 下面分别来介绍模拟通信系统与数字通信系统 模拟通信系统模型

信息论与编码实验1-3

实验一 关于信源熵的实验 班级:电子131501 姓名:赵英凯 学号:201315020137 时间:2016.5.22

一、实验目的 1. 掌握离散信源熵的原理和计算方法。 2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。 3. 自学图像熵的相关概念,并应用所学知识,使用matlab 求解图像熵。 二、实验原理 1. 离散信源相关的基本概念、原理和计算公式 产生离散信息的信源称为离散信源。离散信源只能产生有限种符号。随机事件的自信息量I(xi)为其对应的随机变量xi 出现概率对数的负值。 即: I (xi )= -log2p ( xi) 随机事件X 的平均不确定度(信源熵)H(X)为离散随机变量 xi 出现概率的数学期望,即: 2.二元信源的信息熵 设信源符号集X={0,1} ,每个符号发生的概率分别为p(0)= p,p(1)= q,p+ q =1,即信源的概率空间为:

则该二元信源的信源熵为: H( X) = - plogp–qlogq = - plogp –(1 - p)log(1- p) 即:H (p) = - plogp –(1 - p)log(1- p) 其中 0 ≤ p ≤1 3. MATLAB二维绘图 用matlab 中的命令plot( x , y) 就可以自动绘制出二维图来。例1-2,在matlab 上绘制余弦曲线图,y = cos x ,其中 0 ≤ x ≤2 >>x =0:0.1:2*pi; %生成横坐标向量,使其为 0,0.1,0.2,…, 6.2 >>y =cos(x ); %计算余弦向量 >>plot(x ,y ) %绘制图形 4. MATLAB求解离散信源熵 求解信息熵过程: 1) 输入一个离散信源,并检查该信源是否是完备集。 2) 去除信源中符号分布概率为零的元素。 3) 根据平均信息量公式,求出离散信源的熵。 5. 图像熵的相关知识 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。

相关文档
相关文档 最新文档