在信息論與編碼的時候,我們經常使用二元n次擴展信源,做一些實驗的時候,需要快速生成一個n次擴展信源,下面我們利用matlab來實現n次擴展信源的生成:
首先我們來生成它的編碼,這裏按照自然順序生成每一行,沒有按照格雷編碼。
code=zeros(2^n,n);
p=zeros(n,1);
for i=0:2^n-1
c=dec2bin(i,n);
for j=1:n
code(i+1,j)=str2num(c(j));
end
end
接着我們計算每行編碼的概率:
pp=1;
c=code(i+1,:);
for k=1:n
if c(k)==0
pp=pp*P(1);
else
pp=pp*P(2);
end
end
p(i+1)=pp;
彙總的matlab代碼如下:
function [code,p]=n_kuo(P,n)
%二元信源的n次擴展信源產生器
code=zeros(2^n,n);
p=zeros(n,1);
for i=0:2^n-1
c=dec2bin(i,n);
for j=1:n
code(i+1,j)=str2num(c(j));
end
pp=1;
c=code(i+1,:);
for k=1:n
if c(k)==0
pp=pp*P(1);
else
pp=pp*P(2);
end
end
p(i+1)=pp;
end
end
我們以0-0.7 1-0.3的信源概率,4次擴展爲例,結果如下:
接着,我們也做了m元信源做n次擴展的結果,代碼見資源:
m元信源做n次擴展的matlab實現.rar