資源描述:
《附錄 Matlab源程序.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、附錄Matlab源程序附錄A信息熵%函數(shù)說明:%%H=entropy(P,r)為信息熵函數(shù)%%P為信源的概率矢量,r為進(jìn)制數(shù)%%H為信息熵%%******************************%functionH=entropy(P,r)if(length(find(P<=0))~=0)error('Notaprob.vector,negativecomponent');%判斷是否符合概率分布條件endif(abs(sum(P)-1)>10e-10)error('Notaprob.vector,co
2、mponentdonotaddupto1');endH=(sum(-P.*log2(P)))/(log2(r)+eps);附錄B離散無記憶信道容量的迭代計(jì)算%信道容量C的迭代算法%%函數(shù)說明:%%[CC,Paa]=ChannelCap(P,k)為信道容量函數(shù)%%變量說明:%%P:輸入的正向轉(zhuǎn)移概率矩陣,k:迭代計(jì)算精度%%CC:最佳信道容量,Paa:最佳輸入概率矩陣%%Pa:初始輸入概率矩陣,Pba:正向轉(zhuǎn)移概率矩陣%%Pb:輸出概率矩陣,Pab:反向轉(zhuǎn)移概率矩陣%%C:初始信道容量,r:輸入符號(hào)數(shù),s:輸出
3、符號(hào)數(shù)%%**************************************************%function[CC,Paa]=ChannelCap(P,k)%提示錯(cuò)誤信息if(length(find(P<0))~=0)error('Notaprob.vector,negativecomponent');%判斷是否符合概率分布條件endif(abs(sum(P')-1)>10e-10)error('Notaprob.vector,componentdonotaddupto1')%判斷是否符合
4、概率和為1end%1)初始化Pa[r,s]=size(P);Pa=(1/(r+eps))*ones(1,r);sumrow=zeros(1,r);Pba=P;%2)進(jìn)行迭代計(jì)算n=0;C=0;CC=1;whileabs(CC-C)>=kn=n+1;%(1)先求PbPb=zeros(1,s);forj=1:sfori=1:rPb(j)=Pb(j)+Pa(i)*Pba(i,j);endend%(2)再求Pabsuma=zeros(1,s);forj=1:sfori=1:rPab(j,i)=Pa(i)*Pba(i,
5、j)/(Pb(j)+eps);suma(j)=suma(j)+Pa(i)*Pba(i,j)*log2((Pab(j,i)+eps)/(Pa(i)+eps));end%3)求信道容量CC=sum(suma);%4)求下一次Pa,即PaaL=zeros(1,r);sumaa=0;fori=1:rforj=1:sL(i)=L(i)+Pba(i,j)*log(Pab(j,i)+eps);enda(i)=exp(L(i));endsumaa=sum(a);fori=1:rPaa(i)=a(i)/(sumaa+eps);
6、end%5)求下一次C,即CCCC=log2(sumaa);Pa=Paa;end%打印輸出結(jié)果s0='很好!輸入正確,迭代結(jié)果如下:';s1='最佳輸入概率分布Pa:';s2='信道容量C:';s3='迭代次數(shù)n:';s4='輸入符號(hào)數(shù)r:';s5='輸出符號(hào)數(shù)s:';s6='迭代計(jì)算精度k:';fori=1:rB{i}=i;enddisp(s0);disp(s1),disp(B),disp(Paa);disp(s4),disp(r);disp(s5),disp(s);disp(s2),disp(CC);di
7、sp(s6),disp(k);disp(s3),disp(n);附錄CShannon編碼%函數(shù)說明:%%[p,x]=array(P,X)為按降序排序的函數(shù)%%P為信源的概率矢量,X為概率元素的下標(biāo)矢量%%p為排序后返回的信源的概率矢量%%x為排序后返回的概率元素的下標(biāo)矢量%%*******************************************%function[p,x]=array(P,X)P=[P;X];[l,n]=size(P);fori=1:nmax=P(1,i);maxN=i;MAX
8、=P(:,i);forj=i:nif(max
1)if(i