1. シャノンのコーディング原理
(1) ソース メッセージ シンボルを出現確率に従って降順に並べると、次のようになります。
(2) 確率を切り上げて整数コード長 K を求める
(3) 一意のデコード可能なメッセージをコンパイルするために、i 番目のメッセージの累積確率 P を計算します。
(4) 累積確率を2進数に変換する
(5) P 2 進法の小数点以下の K 桁を取得します。これは、メッセージ シンボルの 2 進コード ワードです。
2. コード
[注: ここでは、独自の関数 shannon と trans を作成して、それらを呼び出す必要があります。Matlab 関数を作成して呼び出す方法を知る必要があります~]
(1) 主な機能
p = input('请输入离散信源概率分布:\n');
shannon(p)
(2) サブ関数 shannon [エンコードに使用]
function shannon(p)
n = length(p);%信源符号数
p = sort(p,'descend');%降序排列
F = zeros(1,n);%累加概率序列
for i=2:n
F(i)=F(i-1)+p(i-1);
end
l = zeros(1,n);%码长序列
for i=1:n
l(i)=ceil(-log2(p(i)));%向上取整
end
disp('最终编码结果:');
for i=1:n
f = max(l(i));
w=trans(F(i),f);
for j=1:l(i)
code(j)=w(j);
end
disp([num2str(p(i)),'--->',num2str(code)]);
end
(3) サブ関数 trans [10 進数を 2 進数に変換するために使用]
%十进制转换为二进制
function w = trans( F,f )
for i=1:f
temp=F.*2;
if(temp<1)
w(i)=0;
F=temp;
else
F=temp-1;
w(i)=1;
end
end
3. 事例紹介