欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Matlab Shannon编码实验

发布时间:2023/12/8 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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编码实验的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。