《一般離散無記憶信道容量的迭代計算(共6頁)》由會員分享,可在線閱讀,更多相關(guān)《一般離散無記憶信道容量的迭代計算(共6頁)(6頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
一般離散無記憶信道容量的迭代計算
信道容量的迭代算法
1信道容量的迭代算法的步驟
一、用了matlab實現(xiàn)DMC容量迭代的算法如下:
第一步:首先要初始化信源分布:
即選取一個精度,本次中我選deta=0.。
第二步:。
第三步:
第四步:
第五步:
若,則執(zhí)行k=k+1,然后轉(zhuǎn)第二步。直至轉(zhuǎn)移條件不成立,接著執(zhí)行下面的程序。
第六步:輸出迭代次數(shù)k和和,程序終止。
2. Matlab實現(xiàn)
clear;
r=input('輸入信源個數(shù):');
s=input('輸入信宿個數(shù):');
deta=inpu
2、t('輸入信道容量的精度: ');
Q=rand(r,s); %形成r行s列隨機矩陣Q
A=sum(Q,2); %把Q矩陣每一行相加和作為一個列矩陣A
B=repmat(A,1,s); %把矩陣A的那一列復制為S列的新矩陣
%判斷信道轉(zhuǎn)移概率矩陣輸入是否正確
P=input('輸入信道轉(zhuǎn)移矩陣P:')%從這句話開始將用下面兩句代替可自動生成信道轉(zhuǎn)移矩陣
[r,s]=size(P);
for i=1:r
if(sum(P(i,:))~=1) %檢測概率轉(zhuǎn)移矩陣是否行和為1.
error('概率轉(zhuǎn)移矩陣輸入有誤!!')
3、
return;
end
for j=1:s
if(P(i,j)<0||P(i,j)>1) %檢測概率轉(zhuǎn)移矩陣是否負值或大于1
error('概率轉(zhuǎn)移矩陣輸入有誤!!')
return;
end
end
end
%將上面的用下面兩句代替可自動生成信道轉(zhuǎn)移矩陣
%disp('信道轉(zhuǎn)移概率矩陣:')
%P=Q./B 信道轉(zhuǎn)移概率矩陣(每一個原矩陣的新數(shù)除以所在行的數(shù)總和)
i=1:1:r; %設置循環(huán)首項為1,公差為1,末項為r(Q的行數(shù))的循環(huán)
p(i)=1/r; %原始信
4、源分布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每列相加之和構(gòu)成一行
su1=repmat(a,r,1);%把得到的行矩陣a復制r行,成一新矩陣sul,后驗概率的分母部分
t=m./su1; %后驗概率矩陣
n=exp(sum(P.*log(t),2)); %信源分布的
5、分子部分
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('迭代次數(shù):k='),disp(k)
end
disp('最大信道容量時的信源分布:p='),disp(p')
disp('最大信道容量:
6、C='),disp(C(k+1))
3. 運行結(jié)果及分析
結(jié)果分析:這兩組數(shù)據(jù)都是我隨機選的,都是選的信源個數(shù)為2,信宿的個數(shù)為3,選用的精度為0.。然后輸入信道轉(zhuǎn)移矩陣P,執(zhí)行,將得到的結(jié)果代入,得到后,再進行的判斷,這個條件滿足時繼續(xù)求,再依次往下計算,直至這個條件不滿足,然后輸出k和和??偟膩碚f這不過是將矩陣不斷的代入公式,當最后的精度不大于0..輸出k和和。
第二組數(shù)據(jù):
4.心得體會
? 在此次matlab編程實現(xiàn)一般離散無記憶信道容量的迭代算法的過程中,開始我覺得這十分的困難,經(jīng)過網(wǎng)上查閱資料和請教同學,最后才對本次設計有了一定的理解,詳細理解了信道容量的迭代算法過程。經(jīng)過理解,發(fā)現(xiàn)這種編碼其實挺簡單的,最重要的是怎樣用程序把它實現(xiàn),這對我們的編程能力也是一次考驗。
專心---專注---專業(yè)