一般离散无记忆信道容量的迭代计算
(最新整理)信道容量的计算

(完整)信道容量的计算编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)信道容量的计算)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)信道容量的计算的全部内容。
§4.2信道容量的计算这里,我们介绍一般离散信道的信道容量计算方法,根据信道容量的定义,就是在固定信道的条件下,对所有可能的输入概率分布)(x P 求平均互信息的极大值。
前面已知()Y X I ;是输入概率分布的上凸函数,所以极大值一定存在。
而);(Y X I 是r 个变量)}(),(),({21r x p x p x p 的多元函数。
并且满足1)(1=∑=ri i x p 。
所以可用拉格朗日乘子法来计算这个条件极值。
引入一个函数:∑-=ii x p Y X I )();(λφ解方程组0)(])();([)(=∑∂-∂∂∂i ii i x p x p Y X I x p λφ1)(=∑iix p (4.2。
1)可以先解出达到极值的概率分布和拉格朗日乘子λ的值,然后在解出信道容量C .因为 )()(log)()();(11i i i i i ri sj i y p x y Q x y Q x p Y X I ∑∑===而)()()(1i i ri i i x y Q x p y p ∑==,所以e e y p y p i i i i i x y Q i x p i x p log log ))(ln ()(log )()()(==∂∂∂∂。
解(4.2。
1)式有0log )()()()()()(log )(111=--∑∑∑===λe y p x y Q x y Q x p y p x y Q x y Q ii i ii r i s j i i i i sj i i (对r i ,,2,1 =都成立) 又因为)()()(1j k k rk k y p x y Q x p =∑=ri x y Q sj i j,,2,1,1)(1==∑=所以(4.2.1)式方程组可以转化为 ),,2,1(log )()(log)(1r i e y p x y Q x y Q j i j sj i j =+=∑=λ1)(1=∑=ri i x p假设使得平均互信息);(Y X I 达到极值的输入概率分布},,{21r p p p 这样有 e y p x y Q x y Q x p j i j i j ri sj i log )()(log)()(11+=∑∑==λ从而上式左边即为信道容量,得 e C log +=λ 现在令)()(log)();(1j i j sj i j i y p x y Q x y Q Y x I ∑==式中,);(Y x I i 是输出端接收到Y 后获得关于i x X =的信息量,即是信源符号i x X =对输出端Y 平均提供的互信息。
5-2 离散信道的信道容量

1
离散信道的信道容量
一、离散信道容量的定义 二、信道模型 三、离散信道容量的表达式
2
离散信道的信道容量
一、离散信道容量的定义
定义1: C- 每个符号能够传输的平均信息量最大值
定义2: Ct -单位时间(秒)内能够传输的平均信息量最大值
两者之间可以互换:已知信道每秒能够传输的符号数
i =1
j=1
i =1
n
∑ H ( x ) = − P ( x i ) log 2 P ( x i ) i=1
-每个发送符号xi的平均信息量,称为信源的熵
m
n
∑ ∑ H( x / y) = − P( y j ) P( xi / y j )log2 P( xi / y j )
j =1
i =1
-接收yj符号已知后,发送符号xi的平均信息量
0
P(0/0) = 127/128
0
发 送 端 P(0/1) = 1/128
接
收
P(1/0) = 1/128
端
P(1/1) = 127/128
1
1
对称道模型
离散信道的信道容量
信源的平均信息量(熵)
∑ H
(x)
=
−
n i=1
P ( x i ) log
2
P ( xi
)
=
−
⎡ ⎢⎣
1 2
log
2
1 2
离散信道的信道容量
③ 无噪声信道 信道模型
发 x1
送 端
x2
x。 3
。
P(xi) 。 xn
P(y1/x1) P(yn/xn)
信道容量matlab,离散无记忆信道容量的matlab算法

信道容量matlab,离散⽆记忆信道容量的matlab算法《离散⽆记忆信道容量的matlab算法》由会员分享,可在线阅读,更多相关《离散⽆记忆信道容量的matlab算法(2页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、functionI,pp=channelcapacity(P,k)%I是信道容量,pp是最佳⼊⼝分布,P是信道概率转移矩阵,k是迭代精度if nargin=k %迭代过程n=n+1;pb=zeros(1,b);%pb是输出概率for j=1:bfor i=1:apb(j)=pb(j)+pa(i)*Pji(i,j);endendsuma=zeros(1,b);for j=1:bfori=1:aPij(j,i)=pa(i)*Pji(i,j)/(pb(j)+eps); %Pij是反向概率转移矩阵suma(j)=suma(j)+pa(i)*Pji(i,j)*log2(Pij(j,i)+eps)/(p。
2、a(i)+eps);endendIo=sum(suma);%求信道容量的过程L=zeros(1,a);sumaa=0;for i=1:aforj=1:bL(i)=L(i)+Pji(i,j)*log(Pij(j,i)+eps);endaf(i)=exp(L(i);endsumaa=sum(af);fori=1:app(i)=af(i)/(sumaa+eps);endI=log2(sumaa);pa=pp;enddisp(最佳输⼊分布pa:),disp(pp);disp(输⼊的符号数a:),disp(a);disp(输出的符号数b:),disp(b);disp(信道容量I:),disp(I);disp(输出迭代精度k:),disp(k);disp(输出迭代次数n:),disp(n);检验过程:P=0.5,0.3,0.2;0.3,0.5,0.2 I=0.036 bitP=1/2,1/3,1/6;1/6,1/2,1/3;1/3,1/6,1/2 I=0.126 bit1 输⼊P=1,0;1,0;1/2,1/2;0,1;0,1回车2 channelcapacity(P) 即可。
信道容量迭代计算实验报告

信道容量迭代计算实验报告王升10271051信科1002信道容量迭代计算实验报告一、实验目的:了解信道容量的定义和计算方法,能编写出正确的程序进行迭代计算得出信道容量。
二、实验要求:1)输入:输入信源个数、信宿个数和信道容量的精度,程序能任意生成随机的信道转移概率矩阵。
2)输出:输出最佳信源分布和信道容量。
三、实验环境:Matlab四、实验原理:五、源程序代码:clear;r=input('输入信源个数:');s=input('输入信宿个数:');deta=input('输入信道容量的精度:');Q=rand(r,s); %创建m*n随机分布矩阵A=sum(Q,2);B=repmat(A,1,s);disp('信源转移概率矩阵:'),p=Q./B %信源转移概率矩阵i=1:1:r;q(i)=1/r;disp('原始信源分布:'),qc=-10e-8;C=repmat(q',1,s);for k=1:1:100000m=p.*C; %后验概率的分子部分a=sum(m); %后验概率的分母部分su1=repmat(a,r,1);t=m./su1; %后验概率矩阵D=exp(sum(p.*log(t),2)); %信源分布的分子部分su2=sum(D); %信源分布的分母部分q=D/su2; %信源分布C=repmat(q,1,s);c(k+1)=log(sum(exp(sum(p.*log(t),2))))/log(2);kk=abs(c(k+1)-c(k))/c(k+1);if(kk<=0.000001)break;endenddisp('最大信道容量时的信源分布:q='),disp(q') disp('最大信道容量:c='),disp(c(k+1))六、实验结果:。
实验二:信道容量的迭代算法

实验二信道容量迭代算法一、实验目的:了解信道容量的计算方法二、实验内容与原理:内容:1.令pe1=pe2=0.1和pe1=pe2=0.01,分别计算该对称信道的信道容量和最佳分布;2.令pe1=0.15,pe2=0.1和pe1=0.075pe2=0.01,分别计算该信道的信道容量和最佳分布;信道容量是信息传输率的极限,当信息传输率小于信道容量时,通过信道编码,能够实现几乎无失真的数据传输;当数据分布满足最佳分布时,实现信源与信道的匹配,使得信息传输率能够达到信道容量。
本实验利用信道容量的迭代算法,使用计算机完成信道容量的计算。
三、程序代码#include<stdio.h>#include<math.h>int main(){double Pe1,Pe2,Pa1_=0,Pa2_=0; double b1a1,b2a1,b1a2,b2a2;double Pa1=0,Pa2=0;double I=0,max=0;//平均互信息量,最大平均互信息量int count=0;printf("输入信道容量参数Pe1:");scanf("%lf",&Pe1);printf("输入信道容量参数Pe2:");scanf("%lf",&Pe2);printf("信道容量参数:Pe1=%lf Pe2=%f\n",Pe1,Pe2);b1a1=1-Pe1;b2a1=Pe1;b1a2=Pe2;b2a2=1-Pe2;for(Pa1=0.01;Pa1<=1;Pa1=Pa1+0.01){ Pa2=1-Pa1;count=count+1;I=Pa1*b1a1*( log( b1a1/(Pa1*b1a1+Pa2*b1a2) )/log(2) )+Pa1*b2a1*( log(b2a1/(Pa1*b2a1+Pa2*b2a2) )/log(2) )+Pa2*b1a2*( log(b1a2/(Pa1*b1a1+Pa2*b1a2) )/log(2) )+Pa2*b2a2*( log(b2a2/(Pa1*b2a1+Pa2*b2a2) )/log(2) );printf("%10lf",I);if (I>max){max=I;Pa1_=Pa1,Pa2_=Pa2;}elsecontinue;}printf("\n");printf(" 一共计算机了:%d\n",count);printf(" 最大互信息量为:%lf\n",max);printf(" 最大互信息量的P(a1)=%lf;P(a2)=%lf\n",Pa1_,Pa2_); }四、运行结果。
离散无记忆信道的信道容量计算实验报告PPT课件

2.信道容量算法
信道容量是互信息的最大值,首先要将信道容量求极值得问题表示 为二重交替优化问题。
(1)
• 运行结 果
(2)
实验结果(1):输入概率转移矩阵是之前例题中的概率转移矩阵,迭代 次数为11和70次,经验证,迭代程序结果比例题中的一般信道容量算 法更为精确。
实验结果(2):迭代次数为4,迭代结果为1.3219,经验算发现此输入 概率转移矩阵的实际结果为1.329,误差不大,符合要求,另外精度越 高,结果越接近。
离散无记忆信道的迭代运算
一、为什么要迭代?
(*)
(1)解方程组求出的输入分布 {P(x)}可能不唯一,因为可能有多个 极值点;
(2)需要验证求出的输入分布序列 是否符合要求。
(2)从达到DMC的信道容量的充要条件出发:
二、Blahut-Arimoto算法
1.交替优化
(2)、通过轮流固定f的其中一个自变量,对另一个没固定的 自变量求极值,由此来确定受此自变量影响下的最值。下一 次对另一个自变量也如此操作,循环往复形成迭代。
程序部分
• 程序设计思路
• (1)参数输入模块
• (2)判断模块
判断矩阵中的元素是否 >=0且<=1
判断矩阵的行相加是否 都为1
• (3)迭代模块1
• (4)迭代模块2
• (5)输出模块Байду номын сангаас
• P116 4.3 (b)
• 一般的DMC
• 一般的DMC
概率矩阵:
参考文献
[1]王育民、李晖 .《信息论与编码理论第二版》[M]北京:高等教育出版社,2013.4 96-101 [2]辛英.《离散信道容量的迭代算法及其实现》[D]山东:山东工商学院,1994 [3]徐伟业 耿苏燕 马湘蓉 冯月芹.《任意DMC信道容量的计算与仿真》[D]南京:南京工程学院 2017
实验二---一般信道容量迭代算法.doc

实验二---一般信道容量迭代算法.doc实验二一般信道容量迭代算法1.实验目的掌握一般离散信道的迭代运算方法。
2.实验要求1)理解和掌握信道容量的概念和物理意义2)理解一般离散信道容量的迭代算法3)采用Matlab 编程实现迭代算法4)认真填写试验报告3.算法步骤①初始化信源分布),,,,,(21)0(p p p p P ri =(一般初始化为均匀分布) ,置迭代计数器k=0 ,设信道容量相对误差门限为δ ,δ>0 ,可设-∞=C )0(;②∑=i k i ij k i ij k ji p p p p )()()(? s j r i ,??=??=,1;,,1 ③∑∑∑??=+i k ji j ij k ji j ij k i p p p ??)()()1(ln exp ln exp r i ,,1??= ④??=∑∑+ik ji j ij k p C ?)()1(ln exp ln ⑤如果δ≤-++C C Ck k k )1()()1( ,转向⑦;⑥置迭代序号k k →+1,转向②;⑦输出p k i )1(+和C k )(1+的结果;⑧停止。
4.代码P=input('转移概率矩阵P=')e=input('迭代精度e=')[r,s]=size(P);n=0;C=0;C_k=0;C_k1=0;X=ones(1,r)/r;A=zeros(1,r);B=zeros(r,s);%初始化各变量while(1)n=n+1;for i=1:rfor j=1:sB(i,j)=log(P(i,j)/(X*P(:,j))+eps); if P(i,j)==0B(i,j)=0;elseendendA(1,i)=exp(P(i,:)*B(i,:)');endC_k=log2(X*A');C_k1=log2(max(A));if (abs(C_0-C_1)。
一般离散无记忆信道的信道容量

8. 一般离散无记忆信道 (DMC)离散无记忆信道的信道容量定理 对前向转移概率矩阵为Q 的离散无记忆信道,其输入字母的概率分布 能使互信息 取最大值的充要条件是:其中是输入符号传送的平均互信息,C 就是这个信道的信道容量。
1(|)(;)(|)log()J j k k j k j j q b a I x a Y q b a p b ===∑**(;)|,*()0;(;)|,*()0;k p p k k p p k I x a Y C p a I x a Y C p a ====>=≤=当当*p k a ),(Q p I信道容量的迭代算法 Blahut-Arimoto 算法[]IFEND P P Q M j for xp f p ELSESTOPI C THEN I I IF f I x I P F x M j for q p p f CC Y Y j j j LC L U j j U L Ck k j k j k j ⋅=-===<-==⋅=-∈⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡⎪⎪⎭⎫ ⎝⎛=∑|22||1,0/)())(max (log )(log 1,0ln exp ε设输入符号集合X , 输出符号集合Y ,P Y|X 为给定信道的前向概率传递矩阵。
r=M, s=N, 令F=[f 0 , f 1 , …, f M-1]。
设ε是一个给定的小的正数。
令,输入符号等概率分布]1,1,0[],1,1,0[-∈-∈N k M j X X Y Y j P P Q M p |,1==输出符号概率分布9. 组合信道1) 级联信道(;)(;)I X Y I X Z ≥(;)(;)and I Y Z I X Z ≥121NN k k Q Q Q Q Q ===∏ 系统的前向概率传递矩阵为:例题. 两个错误概率为p 的BSC 信道级联,求信道容量。
121NN k k Q Q Q Q Q ===∏ ⎥⎥⎦⎤⎢⎢⎣⎡++=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡==22222122p p p p p p p p p p p p p p p p Q Q Q ))1(2(1p p H C --=解:12121(|)(|)NN N i i i p y y y x x x p y x ==∏ 1Ni i C C ==∑2) 并联信道1:并用信道21log 2iN C i C ==∑()()2i C C i p C -=the probability of each sub-channel in use:3) 并联信道2:和信道。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般离散无记忆信道容量的迭代计算
信道容量的迭代算法
1信道容量的迭代算法的步骤
一、用了matlab 实现DMC 容量迭代的算法如下:
第一步:首先要初始化信源分布:
.0deta 10,1,0,1)(>>=⋯==,选置,,k r i r
P k i 即选取一个精度,本次中我选deta=0.000001。
第二步:}{,)
()()()(k ij i ji k i ji k i k ij
t p p p p t 得到反向转移概率矩阵根据式子∑=。
第三步:
第四步:
第五步: 若a C C C k k k det )1()
()1(>-++,则执行k=k+1,然后转第二步。
直至转移条件不成立,
接着执行下面的程序。
第六步:输出迭代次数k 和()1+k C 和1+k P ,程序终止。
2. Matlab 实现
clear;
r=input('输入信源个数:');
s=input('输入信宿个数:');
deta=input('输入信道容量的精度: ');
()()()()(){}111]log exp[]
log exp[+++==∑∑∑k i k i j ij k ji j ij k ji k i p P t p
t p p 计算由式()()()()()()。
C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式
Q=rand(r,s); %形成r行s列随机矩阵Q
A=sum(Q,2); %把Q矩阵每一行相加和作为一个列矩阵A
B=repmat(A,1,s); %把矩阵A的那一列复制为S列的新矩阵
%判断信道转移概率矩阵输入是否正确
P=input('输入信道转移矩阵P:')%从这句话开始将用下面两句代替可自动生成信道转移矩阵
[r,s]=size(P);
for i=1:r
if(sum(P(i,:))~=1) %检测概率转移矩阵是否行和为1.
error('概率转移矩阵输入有误!!')
return;
end
for j=1:s
if(P(i,j)<0||P(i,j)>1) %检测概率转移矩阵是否负值或大于1
error('概率转移矩阵输入有误!!')
return;
end
end
end
%将上面的用下面两句代替可自动生成信道转移矩阵
%disp('信道转移概率矩阵:')
%P=Q./B 信道转移概率矩阵(每一个原矩阵的新数除以所在行的数总和)
i=1:1:r; %设置循环首项为1,公差为1,末项为r(Q的行数)的循环
p(i)=1/r; %原始信源分布r个信源,等概率分布
disp('原始信源分布:')
p(i)
E=repmat(p',1,s);%把r个等概率元素组成一列,复制为s列
for k=1:1:1/deta
m=E.*P; % m=p.*E; %后验概率的分子部分
a=sum(m); %把得到的矩阵m每列相加之和构成一行
su1=repmat(a,r,1);%把得到的行矩阵a复制r行,成一新矩阵sul,后验概率的分母部分
t=m./su1; %后验概率矩阵
n=exp(sum(P.*log(t),2)); %信源分布的分子部分
su2=sum(n); %信源分布的分母部分
p=n/su2; %信源分布
E=repmat(p,1,s);
C(k+1)=log(sum(exp(sum(P.*log(t),2))))/log(2);
kk=abs(C(k+1)-C(k))/C(k+1);
if(kk<=deta)
break;
end
disp('迭代次数:k='),disp(k)
end
disp('最大信道容量时的信源分布:p='),disp(p')
disp('最大信道容量:C='),disp(C(k+1))
3.运行结果及分析
结果分析:这两组数据都是我随机选的,都是选的信源个数为2,信宿的个数为3,选用的精度为0.000001。
然后输入信道转移矩阵P,执行
,将得到的结果代入,得到)1(+k p 后
,再进行
a C C C k k k det )1()
()1(>-++的判断,这个条件满足时继续求,再依次往下计算,直至
这个条件不满足,然后输出k 和()1+k C 和1+k P 。
总的来说这不过是将矩阵不断的代入公式,当最后的精度不大于0.000001.输出k 和()1+k C 和1+k P 。
第二组数据:
}{,)()()()(k ij i ji k i ji
k i k ij t p p
p p t 得到反向转移概率矩阵∑=()()()()(){}111]log exp[]
log exp[+++==∑∑∑k i k i j ij k ji j
ij k ji k i p P t p
t p p 计算由式()()()()()()。
C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡==∑∑计算由式)(k ij
t
4.心得体会
在此次matlab编程实现一般离散无记忆信道容量的迭代算法的过程中,开始我觉得这十分的困难,经过网上查阅资料和请教同学,最后才对本次设计有了一定的理解,详细理解了信道容量的迭代算法过程。
经过理解,发现这种编码其实挺简单的,最重要的是怎样用程序把它实现,这对我们的编程能力也是一次考验。