《離散無(wú)記憶信道容量的matlab算法》由會(huì)員分享,可在線閱讀,更多相關(guān)《離散無(wú)記憶信道容量的matlab算法(2頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、function[I,pp]=channelcapacity(P,k)
%I是信道容量,pp是最佳入口分布,P是信道概率轉(zhuǎn)移矩陣,k是迭代精度
if nargin<2
k=10e-1;%此處設(shè)置的精度不高是因?yàn)榫忍哂绊戇\(yùn)行時(shí)間,之前設(shè)置過(guò)較高的,導(dǎo)致電腦死了!
end
[a,b]=size(P); % a,b分別是輸入和輸出的符號(hào)數(shù),也分別是P的行數(shù)和列數(shù)
pa=(1/(a+eps))*ones(1,a); %初始化輸入分布pa為等概分布。eps表示一個(gè)非常小的數(shù),以
%此來(lái)避免分母為零的情況
sumrow=zeros(1,a);
2、
Pji=P;%正向概率轉(zhuǎn)移矩陣即為信道概率轉(zhuǎn)移矩陣
n=0;%迭代次數(shù)
Io=0;%Io是初始信道容量
pp=1;
while abs(pp-Io)>=k %迭代過(guò)程
n=n+1;
pb=zeros(1,b);%pb是輸出概率
for j=1:b
for i=1:a
pb(j)=pb(j)+pa(i)*Pji(i,j);
end
end
suma=zeros(1,b);
for j=1:b
for i=1:a
Pij(j,i)=pa(i)*Pji(i,j)/(pb(j)+ep
3、s); %Pij是反向概率轉(zhuǎn)移矩陣
suma(j)=suma(j)+pa(i)*Pji(i,j)*log2((Pij(j,i)+eps)/(pa(i)+eps));
end
end
Io=sum(suma);%求信道容量的過(guò)程
L=zeros(1,a);
sumaa=0;
for i=1:a
for j=1:b
L(i)=L(i)+Pji(i,j)*log(Pij(j,i)+eps);
end
af(i)=exp(L(i));
end
sumaa=sum(af);
for i=1:a
pp(i)=
4、af(i)/(sumaa+eps);
end
I=log2(sumaa);
pa=pp;
end
disp(最佳輸入分布pa:),disp(pp);
disp(輸入的符號(hào)數(shù)a:),disp(a);
disp(輸出的符號(hào)數(shù)b:),disp(b);
disp(信道容量I:),disp(I);
disp(輸出迭代精度k:),disp(k);
disp(輸出迭代次數(shù)n:),disp(n);
檢驗(yàn)過(guò)程:P=[0.5,0.3,0.2;0.3,0.5,0.2] I=0.036 bit
P=[1/2,1/3,1/6;1/6,1/2,1/3;1/3,1/6,1/2] I=0.126 bit
1 輸入P=[1,0;1,0;1/2,1/2;0,1;0,1] 回車
2 channelcapacity(P) 即可