资源简介
有关信道编码的C++程序
代码片段和文件信息
#include
#include
double a[10]; //用于存储符号的概率
int n; //请输入单符号信源元素个数
double b[10]; //用于存储码字的概率
int k[10]; //用于存储Ki的K直
int c[10]; //用于存储二进吗
void input(); //输入数据函数
void paixi(); //对概率排序
void output(); //输出函数
void bgailui(); //用于求码字的概率
void kjisuan(); //用于求Ki的K直
void bbianma(); //用于编码
void panduan(); //用于对输入数据判断,避免符号的总和概率》1
void main()
{
input();
panduan();
paixi();
output();
bgailui();
kjisuan();
bbianma();
}
void input()
{
cout<<“请输入单符号信源元素个数 :\n“;
cin>>n;
cout<<“请输入单符号概率 :\n“;
for(int i=1;i cin>>a[i];
}
void panduan()
{
double sum=0;
for(int i=0;i
sum+=a[i];
cout<<““< if(sum==1.0)
cout<<“将执行下面操作:“< else if(sum!=1.0)
{
cout<<“ 输入错误,请重新输入 :“< input();
}
}
void paixi()
{
int ijk;
double x;
for(i=1;i {
k=i-1;
for(j=i;j if(a[j]>a[k])
k=j;
x=a[i-1];a[i-1]=a[k];a[k]=x;
}
}
void output()
{
cout<<“排序后符号概率分布“< for(int i=0;i cout<<“ “< cout< }
void bgailui()
{
b[0]=0;
for(int i=0;i {
b[i+1]=b[i]+a[i];
}
cout<<“累加概率分布为“< for( i=0;i cout<<“ “< cout< }
void kjisuan()
{
for(int i=0;i {
if((-1)*log(a[i])/log(2)==int((-1)*log(a[i])/log(2)))
k[i]=int((-1)*log(a[i])/log(2));
else
k[i]=int((-1)*log(a[i])/log(2))+1;
}
cout<<“k为 “< for(i=0;i cout<<“ “< cout< }
void bbianma()
{
double x;
cout<<“编码为“< for(int i=0;i {
x=b[i];
for(int j=0;j {
if(x<=0.5)
{
if(x==int(x))
x=0;
else
x=x*2;
c[j]=int(x);
}
else if(x>0.5)
{
if(x==int(x))
x=0;
else
x=(x-int(x))*2;
c[j]=int(x);
}
}
for(j=0;j cout<<““< cout< }
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2396 2008-04-26 22:27 xindao.cpp
----------- --------- ---------- ----- ----
2396 1
评论
共有 条评论