费诺编码

费诺编码


2024年5月19日发(作者:索尼a6000和a6300)

%费诺编码:一种信源编码。设有离散无记忆信源X,P(X).二进制费诺编码为:1.将

信源符号按

%概率从大到小的顺序排列2.将信源分成两组――按两组概率之差为最小分.3.上面一

组编码为

%0,下面一组编码为1,一直分到一组只有一个信源为止.4.将一个信源分组得到的

0和1全部连

%接起来,组成该信源的码字,信源即得到自己的费诺编码.该程序采用费诺编码算

法,通过调

%用函数递归实现。程序看点:调用用f1函数将输入变量赋初值,f1函数完成第一次

分组后,并

%对字符数组x(存放码字)第一列赋值得到第一个分界点d,再用f1,f2函数相互调

用和自身调用

%分别实现第一分界点以上和以下的符号再次分组并赋值给字符数组x;因为f1,f2函数

分别每次,

%实现分界点以上和以下寻找下一个分界点所采用的算法不同,两个函数相互调用弥

补了不足,最

%终完成程序设计要求,堪称经典;本程序的难点是字符数组x如何存放码字,程序

采用每次调用

%增加存放码字数组x的列数r,在寻得分界点后即赋值,可是最后程序输出只有第一

列的值,原来

%变量x每次的值被冲了,没有保存,困惑我好久,最后采用global全局变量解决了

上问题,不过

%采用global全局变量定义x后,x的类型需要转换为char最关键的是程序开头必

须用clear all把

%global定义的变量归零,不然global定义的变量中存放的还是上次所存的值.

clc;clear all;

N=input('N=');%输入信源符号的个数

s=0;l=0;H=0;

for i=1:N

fprintf('第%d个',i);

p(i)=input('p=');%输入信源符号概率分布矢量,p(i)<1

if p(i)<=0

error('不符合概率分布')


发布者:admin,转转请注明出处:http://www.yc00.com/num/1716086541a2717676.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信