资源简介
卷积码的编码和维特比译码程序,使用C/C++编写,可在Ubuntu和Windows操作系统上运行,经过修改可在嵌入式系统中运行。适合新手学习卷积码编码和维特比译码算法,也可供工程师参考。

代码片段和文件信息
#include“convolution.h“
#include
int main(){
char exit_char;
myinput();//参数输入,编码约束长度支持3 - 9,只支持码率为1/2的卷积码,编码矢量内置选择1,手动输入选择2
creatsta();//创建卷积码的状态图
convolution();//卷积码编码
cin>>exit_char;
}
/*参数输入*/
void myinput(void){
int ij;
cout<<“输入编码的约束长度N:(3 cin>>myn;
stalen=int(pow(2.0myn-1));
cout<<“选择默认的编码矢量则输入1,输入2则可输入其他的编码矢量“< cin>>i;
if(i==1){
switch(myn){//设置所选择的约束长度,码率为1/2的卷积码的编码矢量。
case 3: myg1[0]=1myg1[1]=1myg1[2]=1;
myg2[0]=1myg2[1]=0myg2[2]=1;
break;
case 4: myg1[0]=1myg1[1]=1myg1[2]=1myg1[3]=1;
myg2[0]=1myg2[1]=0myg2[2]=1myg2[3]=1;
break;
case 5: myg1[0]=1myg1[1]=0myg1[2]=1myg1[3]=1myg1[4]=1;
myg2[0]=1myg2[1]=1myg2[2]=0myg2[3]=1myg2[4]=1;
break;
case 6: myg1[0]=1myg1[1]=0myg1[2]=1myg1[3]=1myg1[4]=1myg1[5]=1;
myg2[0]=1myg2[1]=1myg2[2]=0myg2[3]=1myg2[4]=0myg2[5]=1;
break;
case 7: myg1[0]=1myg1[1]=0myg1[2]=0myg1[3]=1myg1[4]=1myg1[5]=1myg1[6]=1;
myg2[0]=1myg2[1]=1myg2[2]=0myg2[3]=1myg2[4]=1myg2[5]=0myg2[6]=1;
break;
case 8: myg1[0]=1myg1[1]=0myg1[2]=0myg1[3]=1myg1[4]=1myg1[5]=1myg1[6]=1myg1[7]=1;
myg2[0]=1myg2[1]=1myg2[2]=1myg2[3]=0myg2[4]=0myg2[5]=1myg2[6]=0myg2[7]=1;
break;
case 9: myg1[0]=1myg1[1]=1myg1[2]=0myg1[3]=1myg1[4]=0myg1[5]=1myg1[6]=1myg1[7]=1myg1[8]=1;
myg2[0]=1myg2[1]=0myg2[2]=0myg2[3]=0myg2[4]=1myg2[5]=1myg2[6]=1myg2[7]=0myg2[8]=1;
break;
}
}
else{//手动输入编码矢量
cout<<“输入g1“< for(j=0;j cin>>myg1[j];
cout<<“输入g2“< for(j=0;j cin>>myg2[j];
}
cout<<“连接矢量1为“< for(j=0;j cout< cout< cout<<“连接矢量2为“< for(j=0;j cout< cout< cout<<“stalen: “< cout< }
/*计算卷积码的状态转移图*/
void creatsta(void){
int ijkmyi;
int tembits[10];
for(i=0;i stan1[i][0]=0; //当前状态为i,输入为1时,编码器的两个输出
stan1[i][1]=0;
stan0[i][0]=0;//当前状态为i,输入为0时,编码器的两个输出
stan0[i][1]=0;
stachn[i][0]=i/2;//当前状态为i,输入为0时下一状态stachn[i][0]为i/2
myi=i;//myi为当前状态+输入的数0,0放在最左边
for(j=0;j if(myi>=pow(2.0myn-1-j)){
tembits[j]=1;
myi=myi-pow(2.0myn-1-j);
}
else{
tembits[j]=0;
}
}
for(k=0;k stan0[i][0]+=myg1[k]*tembits[k];//将myi和编码矢量相乘并累加
stan0[i][1]+=myg2[k]*tembits[k];
}
stan0[i][0]=stan0[i][0]%2;//计算编码器的实际输出,输出为乘加所得结果的最后一位
stan0[i][1]=stan0[i][1]%2;
myi=i+int(pow(2.0myn-1));//myi为当前状态+输入的数1,1放在最左边
stachn[i][1]=myi/2;//当前状态为i,输入为1时下一状态stachn[i][1]为(i+int(pow(2.0myn-1)))/2
for(j=0;j if(myi>=pow(2.0myn-1-j)){
tembits[j]=1;
myi=myi-pow(2.0myn-1-j);
}
else{
tembits[j]=0;
}
}
for(k=0;k stan1[i][0]+=myg1[k]*tembits[k];//将myi和编码矢量相乘并累加
stan1[i][1]+=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-01-14 10:37 convolution\
文件 472 2018-01-14 00:00 convolution\convolution.h
文件 5236 2018-01-14 10:35 convolution\convolution_encoding.cpp
文件 12735 2018-01-14 00:02 convolution\convolution_encoding.out
文件 74 2018-01-14 00:09 convolution\decoded_data.txt
文件 1182 2018-01-14 00:08 convolution\encoded_data.txt
文件 96 2018-01-14 10:37 convolution\raw_data.txt
文件 871 2018-01-14 10:45 convolution\readme.txt
文件 17026 2018-01-14 00:07 convolution\viterbi.out
文件 840 2018-01-14 00:04 convolution\viterbiH.h
文件 9392 2018-01-14 10:36 convolution\viterbi_decoding.cpp
- 上一篇:学分管理系统 c++
- 下一篇:mfc 修改密码对话框
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论