當前位置:編程學習大全網 - 編程軟體 - 急求信道容量matlab編程代碼!!已知壹個信道的信道轉移矩陣為 p用Matlab編寫函數求信道容量.

急求信道容量matlab編程代碼!!已知壹個信道的信道轉移矩陣為 p用Matlab編寫函數求信道容量.

%親自驗證,絕對可用!

% Matlab實現離散信道容量的叠代算法% 功能:利用叠代算法計算離散信道的容量

%參數解釋

%C:信道容量

%P:轉移概率矩陣

%B:中間變量矩陣

%e: 信道容限,壹般選0.00001

%X:輸入概率分布

%n:叠代次數

function channel_cap(P, e)

n=0;

C=0;

C_0=0;

C_1=0;

[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

X=ones(1,r)/r;

A=zeros(1,r);

B=zeros(r,s);

while(1)

n=n+1;

for i=1:r

for j=1:s

B(i,j)=log(P(i,j)/(X*P(:,j))+eps);

end

A(1,i)=exp(P(i,:)*B(i,:)');

end

C_0=log2(X*A');

C_1=log2(max(A));

if (abs(C_0-C_1)<e) %滿足叠代終止條件停止叠代

C=C_0;

fprintf('叠代次數: n=%d\n',n)

fprintf('信道容量: C=%f比特/符號\n',C)

break; %滿足後輸出結果並退出

else

X=(X.*A)/(X*A');

continue;

end

end

  • 上一篇:蘇州職業大學的教育質量怎麽樣
  • 下一篇:奧迪A6L如何打開工程模式啊 然後怎麽進入工程模式 我又5053 但具體怎麽操作啊 請各位高手指導指導
  • copyright 2024編程學習大全網