信息论与编码

时间: 2023-07-10 admin IT培训

信息论与编码

信息论与编码

1. 香农编码原理

(1)将信源消息符号按其出现的概率大小依次降序排列为:

(2)对概率向上取整求整数码长K

(3)为了编成唯一可译码,计算第i个消息的累加概率P

(4)将累加概率转换成二进制数

(5)取P二进制的小数点后K位,即为该消息符号的二进制码字


 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:nF(i)=F(i-1)+p(i-1);
end
l = zeros(1,n);%码长序列
for i=1:nl(i)=ceil(-log2(p(i)));%向上取整
end
disp('最终编码结果:');
for i=1:nf = max(l(i));w=trans(F(i),f);for j=1:l(i)code(j)=w(j);enddisp([num2str(p(i)),'--->',num2str(code)]);
end

(3)子函数trans【用于十进制转二进制】

%十进制转换为二进制
function w = trans( F,f )
for i=1:ftemp=F.*2;if(temp<1)w(i)=0;F=temp;elseF=temp-1;w(i)=1;end
end

3. 案例展示