Matlab Shannon编码实验
一、实验目的:
(1)了解信源变长码的编码方法;
(2)掌握香农编码方法;
(3)掌握MATLAB的编程。
二、实验仪器:
Matlab2015a
三、实验原理:
1.将信源符号按概率从大到小顺序排列,
2.按下式计算第i个符号对应的码字的码长
3.计算第i个符号的累加概率
4.将累加概率Pi变换成二进制小数,取小数点后li位数作为第i个符号的码字。
四、实验步骤:
1.先利用Matlab编写函数;
2.再根据函数将实验要求生成实验结果;
3.根据实验内容填写实验报告;
五、实验内容及数据整理:
用Matlab软件编程实现Shannon编码
六、实验结果及讨论
clc;clear;close all
%% 数据输入
i = 1;
strTemp = ['请输入第',num2str(i),'个概率(0退出):'];
p = [];
p(i) = input(strTemp);
while(p(end))
i = i+1;
strTemp = ['请输入第',num2str(i),'个概率(0退出):'];
temp = input(strTemp);
p = [p temp];
end
eps = 1e-5;
if(sum(p)>1.0+eps || sum(p)<1.0-eps)
error('概率和不等于1');
end
%% 初始化
n = length(p)-1; %由于最后一个数字为0
F = zeros(1,n);
logp = zeros(1,n);
L = zeros(1,n);
for i = 2:n
F(i) = F(i-1)+p(i-1);
logp(i-1) = -log2(p(i-1));
L(i-1) = ceil(logp(i-1));
end
logp(n) = -log2(p(n));
L(n) = ceil(logp(n));
%% 编码过程
for i = 1:n
temp1 = L(i);
temp2 = [];
temp3 = F(i);
while(temp1)
temp4 = fix(2*temp3);
temp3 = 2*temp3 - temp4;
temp2 = [temp2 num2str(temp4)];
temp1 = temp1 - 1;
end
fprintf('第%d个的香农编码为:%s\n',i,temp2);
end
第二种方法:
clc;clear;close all m=input('Enter the no.of message ensembles:'); %输入概率 z=[]; h=0; l=0; display('Enter the probabilities in descending order:') %按降序输入概率 for i=1:mfprintf('Ensemble%d\n',i); %总体均值p(i)=input(''); end%Finding each alpha values 找到每个值 a(1)=0; for j=2:m;a(j)=a(j-1)+p(j-1); end fprintf('\n Alpha Matrix'); display(a);%Finding each code length for i=1:mn(i)=ceil(-1*(log2(p(i)))); end fprintf('\n Code length matrix'); display(n);%Computing each code for i=1:mint=a(i);for j=1:n(i)frac=int*2c=floor(frac);frac=frac-c;z=[z c];int=frac;endfprintf('Codeword %d',i);display(z);z=[]; end%Computing Avg.Code Length & Entropy fprintf('Avg.Code Length'); for i=1:mx=p(i)*n(i);l=l+x;x=p(i)*log2(1/p(i));h=h+x; end display(l); fprintf('Entropy'); display(h);%Computing Efficiency fprintf('Efficiency'); display(100*h/l); fprintf('Redundancy'); display(100-(100*h/l));
总结
以上是生活随笔为你收集整理的Matlab Shannon编码实验的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Matlab Shannon编码
- 下一篇: shannon