资源简介
卷积码的编码和维特比译码程序,使用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 修改密码对话框
相关资源
- 学分管理系统 c++
- C++五子棋源码有AI,先手禁手
- 双语版C++苏小红课后习题参考
- C++大作业之学生管理系统图表
- 基于Windows Socket的安全通信(C++实现)
- 蓝桥杯青少组C++赛前集训包.pdf
- 11个常用OpenCV+C++图像处理
- 吃豆人 c++ 源程序
- 求公式的主合取范式和主析取范式
- C++实现MATLAB的filter函数
- 实验室设备管理系统C++
- C++课程设计之简易英汉字典
- 传热学非稳态热传导问题网格划分数
- 学分管理系统c++课程设计
- 阿伦方差的C++ 版本
- 如何在VC++ 6.0创建RTX项目
- utf8编码解码的纯C++代码
- visualc++下位机温度测量串口通信与实
- c++写的OpenGL程序透明金字塔有加上光
- C++二叉树基于Mfc的程序开发
- C++ blackjack经典21点小游戏 课程设计
- 多用户多级目录文件系统c++源码(含
- libstdc++.so.6.0.22 or GLIBCXX_3.4.22 in tenso
- visual c++ 6.0 完整扫雷源代码
- 数据结构算法与应用 c++语言描述(第
- c++之sha1类
- 信息学奥赛NOIP系列课程之C++部分课程
- VC++ 实现将本地文件通过HTTP上传到网
- PCA融合算法C++代码
- c++版遗传算法基本算法
评论
共有 条评论