香农编码实验报告(1).doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
仙农编码实验报告 一、实验目的 实验仙农编码算法 二、实验步骤 1、输入信源个数n 2、输入n个信源的概率 3、由大到小重新排列信源 4、实现信源概率的叠加 5、计算码长l 6、编码 7、计算平均码长pl、信源熵Hx以及编码效率q 三、源程序: #include<iostream> #include<math.h> #include<string> using namespace std; void input(int n,float *g){//输入信源概率 for(int i=0;i<n;i++){ cout<<"请输入第"<<i+1<<"个信源的概率: "; cin>>g[i]; } } void rank(int n,float *g){//重新排列 float templ; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(g[i]<g[j]){ templ=g[i]; g[i]=g[j]; g[j]=templ; } } } } void output(int n,float *g){ cout<<endl; cout<<"**********从大到小重新排列后的信源**********"; cout<<endl; for(int i=0;i<n;i++){ cout<<"第"<<i+1<<"个信源的概率是:"<<g[i]<<endl; } cout<<endl; } void add(int n,float *g,float *a){ //a[i]为累加概率的数组 cout<<"**********累加概率***********"<<endl; a[0]=0.00; //令累加概率的第一个值为0 for(int i=1;i<n;i++){ a[i]=a[i-1]+g[i-1]; } for(i=0;i<n;i++){ cout<<"第"<<i+1<<"个累加概率为 "<<a[i]<<endl; } } void length(int n,float *g,int *k){//求码字的长度k[i] cout<<endl; cout<<"**********计算码长**********"<<endl; for(int i=0;i<n;i++){ for(int j=0;j<10;j++){ if(j<1-log(g[i])/log(2) && j>=-log(g[i])/log(2) ) k[i]=j; } float l=-log(g[i])/log(2); int temp=int(l); if(l-temp==0) k[i]=temp; else k[i]=temp+1; cout<<"第"<<i+1<<"个信源的码长为: "<<k[i]<<endl; } } void XN_Code(int n,float *a,int *k,string *Str){//编码 cout<<endl; cout<<"**********编码**********"<<endl; for(int i=0;i<n;i++){ float s=a[i]; for(int j=0;j<k[i];j++){ //k[i]为码长 s=s*2; if(s>=1){ Str[i]+="1"; s=s-1; } else Str[i]+="0"; } } for(i=0;i<n;i++){ cout<<"第"<<i+1<<"个信源的码字为: "<<Str[i]<<endl; } } void main(){ int n,k[10]; float p[10],pa[10],pl=0,Hx=0,q;//pl为平均码长 string Str[10]; cout<<"请输入信源的个数:(小于等于10)"<<endl; cin>>n; input(n,p); //输入信源的概率 rank(n,p); //从小到大重新排列输入的概率 output(n,p); //输出重新排列的概率 add(n,p,pa); //累加概率 length(n,p,k);//求码长 XN_Code(n,pa,k,Str);//编码 for(int i=0;i<n;i++){ //求平均码长 pl+=p[i]*k[i]; Hx=Hx-p[i]*(log(p[i])/log(2)); } q=Hx/pl*100; cout<<"平均码长为: "<<pl<<"比特/符号"<<endl; cout<<"该信源的信源熵为: "<<Hx<<"比特/符号"<<endl; cout<<"编码效率为:"<<q<<"%"<<endl; } 四、运行结果: ----------------------- 香农编码实验报告(1)全文共7页,当前为第1页。
- 2201_757135492023-11-30资源简直太好了,完美解决了当下遇到的难题,这样的资源很难不支持~
- 粉丝: 168
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助