利用c语言实现卷积码编码器示例
实现(2,1,7)卷积码编码
信息序列1001101011111100
生成序列g1=1011011;g2=1111001
初始状态全0.
以上参数可自行在main中修改。
/***Thisisansimpleexampleprogramofconvolutionalencoder.
*Theinformationsequence,theregisterinitialstatesandthegenerationsequence
* canallbemodifiedinthemainfunction.
*/
#include<stdio.h>
#defineLEN(array,len){len=sizeof(array)/sizeof(array[0]);}//Sizeofarray
intencoder(int**gen,intn,intL,intreg[],intm,intinf[],intinf_len,intoutput[])
/*encoder(int**gen,intn,intL,intreg[],intm,intinf[],intinf_len,intoutput[])
*Thisfunctionisaconvolutionalencoder.
*gen isthegenerationsequence,whichisatwo-dimensionarray,
anditisatwo-dimensionpointer,
*n isthenumberofbitsouttheencoderateachclockcycle,
*L isfortheconstraightlength,
*reg isfortheshiftregisters,
*m isforthenumberofregisters,
*inf isfortheinformationsequence,
*inf_lenisfortheinflength,
*output isfortheoutputcode.
*/
{
intinf_ex[inf_len+m];
inti,j;//Index
for(i=0;i<inf_len+m;i++)//Extendtheinformationsequencetoincludethelastmbits
{
if(i<inf_len)
inf_ex[i]=inf[i];
else
inf_ex[i]=0;
}
for(i=0;i<inf_len+m;i++)//Foreachbitinextendinformation
{
for(j=0;j<n;j++)//Outputnbitsateachclockcycle
{
intout_tem=0;//Tempnumber
if(*(gen+L*j)==1)//JudgewhetherthenextinformationbitshouldpaticipateintheModop
out_tem+=inf_ex[i];
intk;
for(k=0;k<m;k++)//Foreachregisters
{
if(*(gen+L*j+k+1)==1)
out_tem+=reg[k];//Modopaccordingtothegenerationsequence
}
out_tem%=2;//Mod2
output[i*n+j]=out_tem;
}
for(j=m-1;j>0;j--)//Registershift
{
reg[j]=reg[j-1];
}
reg[0]=inf_ex[i];//Inputinformationbitsintoregister
}
return1;
}
main()
{
intinf[]={1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,0};//Informationsequence
intinf_len;//Informationlength
LEN(inf,inf_len);
intgen[2][7]={{1,0,1,1,0,1,1},{1,1,1,1,0,0,1}};//Generationsequence
intn;//Thenumberofbitsouttheencoderateachclockcycle
intL;//Constraightlength
LEN(gen,n);
LEN(gen[0],L);
intm=L-1;//Thenumberofshiftregisters
intinit_s[]={0,0,0,0,0,0};//Initialstatesareallzero
intreg[m];//Register
inti;//Index
for(i=0;i<m;i++)
{
reg[i]=init_s[i];
}
intoutput_len=(inf_len+m)*n;//Outputlength,everybitofinputcangeneratenbitsofoutputsequence
intoutput[(inf_len+m)*n];//Outputsequence
encoder(gen,n,L,reg,m,inf,inf_len,output);//Encoder
for(i=0;i<output_len;i++)
{
printf("%d",output[i]);
}
system("pause");
}
相关文章
- adrc过渡过程 c语言,初步认识ADRC与应用「建议收藏」
- Go语言技巧 - 16.【Go泛型】何时使用泛型
- 插入排序(Java语言实现)
- 【说站】c语言中assert函数是什么
- c语言十进制小数转二进制代码_c语言十进制转换成二进制
- Golang语言情怀--第101期 区块链技术-以太坊公链NFT图片去中心化存储-第2节:go语言实现IPFS存储demo
- R语言Fama-French三因子模型实际应用:优化投资组合|附代码数据
- 跟着Nature学作图:R语言ggplot2山脊图添加辅助线/图例添加到左下角
- 跟着Nature Communications学作图:R语言ggplot2画图展示捐赠者的临床概况
- R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资|附代码数据
- p for trend/ p for interaction/ per 1 sd 的R语言实现
- R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较|附代码数据
- Qt Quick实践系列-多语言切换
- 2023-03-17:使用Go语言和FFmpeg库实现音频重采样解码,并将其保存为PCM格式的文件。
- 【C 语言】文件操作 ( 按照文本行的方式读写文件 | fgets 函数 | fputs 函数 )
- 学习小组day5笔记-R语言基础2
- 第一个真正实现智能涌现的国产大语言模型,内测即将开启
- Linux 下使用 C 语言实现文件内存映射:MMap(linuxcmmap)
- Go语言网络爬虫缓冲池工具的实现
- Go语言工厂模式自动注册——管理多个包的结构体
- Go 语言发布 2.x 计划,或将不完全向后兼容
- 开发利用C语言实现MySQL项目开发(c语言mysql项目)
- 以MSSQL语言实现的while循环(mssqlwhile)
- MySQL安装指南一步一步实现C 语言环境的MySQL部署(c mysql安装步骤)
- 利用 Oracle 数据库存储图片的 C 语言实现(c oracle存储图片)
- 利用c语言和oracle odp实现复杂数据处理(c oracle odp)
- PHP实现根据浏览器跳转不同语言页面代码
- c语言实现单链表算法示例分享