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条)