1. Shannon-Codierungsprinzip
(1) Ordnen Sie die Quellnachrichtensymbole in absteigender Reihenfolge entsprechend ihrer Auftrittswahrscheinlichkeit wie folgt an:
(2) Runden Sie die Wahrscheinlichkeit auf, um die ganzzahlige Codelänge K zu ermitteln
(3) Um eine eindeutige dekodierbare Nachricht zusammenzustellen, berechnen Sie die kumulative Wahrscheinlichkeit P der i-ten Nachricht
(4) Wandeln Sie die akkumulierte Wahrscheinlichkeit in eine Binärzahl um
(5) Nehmen Sie die K-Stellen nach dem Dezimalpunkt des P-Binärsystems, das das binäre Codewort des Nachrichtensymbols ist.
2. Code
[Hinweis: Hier müssen Sie Ihre eigenen Funktionen shannon und trans erstellen und diese dann aufrufen. Sie müssen wissen, wie man Matlab-Funktionen erstellt und aufruft~]
(1) Hauptfunktion
p = input('请输入离散信源概率分布:\n');
shannon(p)
(2) Unterfunktion Shannon [zur Kodierung verwendet]
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) Unterfunktion trans [wird verwendet, um Dezimalzahlen in Binärzahlen umzuwandeln]
%十进制转换为二进制
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. Fallpräsentation