费诺编码的C语言实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:
用预先规定的方法将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。其中费诺编码有广泛的应用,通过本次实验,了解编码的具体过程,通过编程实现编码,利用C语言实现费诺编码。
关键字:信息论,费诺编码,C语言
正文:
费诺编码也是一种常见的信源编码方法。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同.
费诺编码的C语言实现
设有一个离散信源,概率分布P(x)保存在in.dat文件中,实现对文件的读取,并根据P(x)给出对应的费诺编码,将结果保存在另一文件out.dat中。
程序代码:
#include
#include
#include
#define N 8
struct event {
int n;
double x;
int code[N];
int low;
};
FILE *fp1,*fp2;
struct event A[N+1];
void inputcode(struct event *a,int b)/*input code*/
{
a->code[a->low]=b;
(a->low)++;
}
void outcode(struct event a)/*output code*/
{
int i;
for(i=0;i fprintf(fp2,"%d",a.code[i]); } double getsum(int h,int t,struct event a[])/*get sum*/ { int i=h; double sum=0.0; for(i=h;i<=t;i++) { sum=sum+a[i].x; } return sum; } int getbreakpoint(struct event a[],int h,int t)/*all right*/ { int n,t1; double f[N+1],temp=0.0; for(n=h;n { f[n]=fabs(getsum(h,n,a)-getsum(n+1,t,a)); } temp=f[h]; t1=h; for(n=h;n { if(f[n] { temp=f[n]; t1=n; } } return t1; } void group(int h,int t,struct event a[]) { int i,breakpoint,zero=0,one=1; if(t==h+1) { inputcode(&a[h],zero); inputcode(&a[t],one); } else if(t==h) ; else { breakpoint=getbreakpoint(a,h,t); for(i=h;i<=breakpoint;i++) { inputcode(&a[i],zero); for(i=breakpoint+1;i<=t;i++) { inputcode(&a[i],one); } group(h,breakpoint,a); group(breakpoint+1,t,a); } } void sort(struct event a[]) { int i,j; struct event t;