信息论与编码实验报告.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delete []X;
delete []Pa;
delete []K;
delete []code;
getchar();
return 0;
}
六、调试过程中出现的错误:
1、在源代码的基础上添加:
#include<math.h>
#include<iostream>
#include<iomanip>
#include<conio.h>
class DATA/
{
public:DATA(){next=NULL;pre=NULL;r=NULL;PXi=1;key[0]='\0';key[1]='\0';key[2]='\0';key[3]='\0';key[4]='\0';key[5]='\0';
key[6]='\0';key[7]='\0';key[8]='\0';key[9]='\0';key[10]='\0';}
for(i=0;i<N;i++)
for(j=0;j<N;j++){
double temp=Pa[i]*2;
if(temp>=1){
code[i]+="1";
Pa[i]=Pa[i]*2-1;
}
else
code[i]+="0";
Pa[i]*= 2;
}
}
for(i=0;i<N;i++)
code[i]= code[i].substr(0,K[i]);
{
K[i]=int(-(log(X[i])/log(2)))+1;
if(K[i]==(-(log(X[i])/log(2)))+1)
}
double *Pa=new double[N];
Pa[0]=0.0;
for(i=1;i<N;i++)
Pa[i]=Pa[i-1]+X[i-1];
string *code=new string[N];
p->PXi=l;
sum=sum+p->PXi;
p->next=new DATA;
p->next->pre=p;/
p->r=p->next;
p=p->next;
}
if(sum!=1)
{
cout<<"所输入的概率之和是"<<sum<<"不为1,请重新输入"<<endl;
input();
retuen书写错误,应改为return。
七、实验内容:
1、对给定信源 进行二进制香农编码,编码结果如下所示:
2、对给定信源 进行二进制香农编码,编码结果如下所示:
3、自已选择一个例子进行香农编码,选择的例子为 ,编码结果如下所示:
实验
一
掌握通过计算机实现费诺编码。
二
对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。
#include<string>
using namespace std;
2、出现错误的语句
double*Pa=new double[N];pa[0]=0.0,pa[i]=pa[i-1]+X[i-1];红色部分应该改为和前面绿色的格式一样,不然编译程序时会出现红色部分为定义
3、出现错误的语句:retuen 0;
cout<<setw(12)<<"信源"<<setw(12)<<"概率p(x)"<<setw(12)<<"累加概率Pa(x)"<<setw(8)<<"码长K"<<setw(8)<<"码字"<<endl;
for(i=0;i<N;i++)cout<<setw(12)<<i+1<<setw(12)<<X[i]<<setw(12)<<Pa[i]<<setw(8)<<K[i]<<setw(8)<<code[i]<<endl;
1、将信源消息符号按其出现的概率大小排列
2、确定满足下列不等式的整数码长Ki;
3、为了编成唯一可译码,计算第i个消息的累加概率
4、将累加概率Pi变换成二进制数。
5、取
四、源程序:
#include<math.h>
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<string>
using namespace std;
int main()
{ int N;
cout<<"请输入信源符号个数:";cin>>N;
cout<<"请输入各符号的概率:"<<endl;
double *X=new double[N]; //离散无记忆信源
int i,j;
for(i=0;i<N;i++)
char Xi;
double PXi;
char key[11];
DATA *next,*pre,*r;
};
DATA *head=new DATA,*p=head;
int k=(-1);
void encoding(DATA * pp);
DATA * sort(DATA * pp);
DATA *HEAD=new DATA,*tt=HEAD,*T;
本科生实验报告
实验课程信息论与编码
学院名称信息科学与技术学院
专业名称通信工程
学生姓名
学生学号
指导教师谢振东
实验地点6C601
实验成绩
二〇 一五 年 十一 月 二〇 一五 年 十一月
实验一:wenku.baidu.com
一、
掌握通过计算机实现香农编码的方法。
二
对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。
三、实验
给定某个信源符号的概率分布,通过以下的步骤进行香农编码
{
cout<<"X["<<i+1<<"]=";cin>>X[i];
}
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(X[i]<X[j])
{ double temp=X[i];X[i]=X[j];X[j]=temp;}
int *K=new int[N];
for(i=0;i<N;i++)
三
费诺编码的步骤:
1、将概率按从大到小的顺序排列;
2、按编码进制数将概率分组,使每组概率和尽可能接近或相等;
3、给每组分配一位码元;
4、将每一分组再按同样原则划分,重复2和3,直到概率不再可分为止。
四、源程序:
#include<iostream>
#include<cmath>
using namespace std;
void input()
{
double l,sum=0;
int n,i;
char L;
cout<<"请输入信源个数:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"请输入一个字符的信源符号:" <<endl;cin>>L;
cout<<"请输入概率:" <<endl;cin>>l;
p->Xi=L;
delete []Pa;
delete []K;
delete []code;
getchar();
return 0;
}
六、调试过程中出现的错误:
1、在源代码的基础上添加:
#include<math.h>
#include<iostream>
#include<iomanip>
#include<conio.h>
class DATA/
{
public:DATA(){next=NULL;pre=NULL;r=NULL;PXi=1;key[0]='\0';key[1]='\0';key[2]='\0';key[3]='\0';key[4]='\0';key[5]='\0';
key[6]='\0';key[7]='\0';key[8]='\0';key[9]='\0';key[10]='\0';}
for(i=0;i<N;i++)
for(j=0;j<N;j++){
double temp=Pa[i]*2;
if(temp>=1){
code[i]+="1";
Pa[i]=Pa[i]*2-1;
}
else
code[i]+="0";
Pa[i]*= 2;
}
}
for(i=0;i<N;i++)
code[i]= code[i].substr(0,K[i]);
{
K[i]=int(-(log(X[i])/log(2)))+1;
if(K[i]==(-(log(X[i])/log(2)))+1)
}
double *Pa=new double[N];
Pa[0]=0.0;
for(i=1;i<N;i++)
Pa[i]=Pa[i-1]+X[i-1];
string *code=new string[N];
p->PXi=l;
sum=sum+p->PXi;
p->next=new DATA;
p->next->pre=p;/
p->r=p->next;
p=p->next;
}
if(sum!=1)
{
cout<<"所输入的概率之和是"<<sum<<"不为1,请重新输入"<<endl;
input();
retuen书写错误,应改为return。
七、实验内容:
1、对给定信源 进行二进制香农编码,编码结果如下所示:
2、对给定信源 进行二进制香农编码,编码结果如下所示:
3、自已选择一个例子进行香农编码,选择的例子为 ,编码结果如下所示:
实验
一
掌握通过计算机实现费诺编码。
二
对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。
#include<string>
using namespace std;
2、出现错误的语句
double*Pa=new double[N];pa[0]=0.0,pa[i]=pa[i-1]+X[i-1];红色部分应该改为和前面绿色的格式一样,不然编译程序时会出现红色部分为定义
3、出现错误的语句:retuen 0;
cout<<setw(12)<<"信源"<<setw(12)<<"概率p(x)"<<setw(12)<<"累加概率Pa(x)"<<setw(8)<<"码长K"<<setw(8)<<"码字"<<endl;
for(i=0;i<N;i++)cout<<setw(12)<<i+1<<setw(12)<<X[i]<<setw(12)<<Pa[i]<<setw(8)<<K[i]<<setw(8)<<code[i]<<endl;
1、将信源消息符号按其出现的概率大小排列
2、确定满足下列不等式的整数码长Ki;
3、为了编成唯一可译码,计算第i个消息的累加概率
4、将累加概率Pi变换成二进制数。
5、取
四、源程序:
#include<math.h>
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<string>
using namespace std;
int main()
{ int N;
cout<<"请输入信源符号个数:";cin>>N;
cout<<"请输入各符号的概率:"<<endl;
double *X=new double[N]; //离散无记忆信源
int i,j;
for(i=0;i<N;i++)
char Xi;
double PXi;
char key[11];
DATA *next,*pre,*r;
};
DATA *head=new DATA,*p=head;
int k=(-1);
void encoding(DATA * pp);
DATA * sort(DATA * pp);
DATA *HEAD=new DATA,*tt=HEAD,*T;
本科生实验报告
实验课程信息论与编码
学院名称信息科学与技术学院
专业名称通信工程
学生姓名
学生学号
指导教师谢振东
实验地点6C601
实验成绩
二〇 一五 年 十一 月 二〇 一五 年 十一月
实验一:wenku.baidu.com
一、
掌握通过计算机实现香农编码的方法。
二
对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。
三、实验
给定某个信源符号的概率分布,通过以下的步骤进行香农编码
{
cout<<"X["<<i+1<<"]=";cin>>X[i];
}
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(X[i]<X[j])
{ double temp=X[i];X[i]=X[j];X[j]=temp;}
int *K=new int[N];
for(i=0;i<N;i++)
三
费诺编码的步骤:
1、将概率按从大到小的顺序排列;
2、按编码进制数将概率分组,使每组概率和尽可能接近或相等;
3、给每组分配一位码元;
4、将每一分组再按同样原则划分,重复2和3,直到概率不再可分为止。
四、源程序:
#include<iostream>
#include<cmath>
using namespace std;
void input()
{
double l,sum=0;
int n,i;
char L;
cout<<"请输入信源个数:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"请输入一个字符的信源符号:" <<endl;cin>>L;
cout<<"请输入概率:" <<endl;cin>>l;
p->Xi=L;