交织基数为M,交织深度为I的卷积交织/解交织程序,延时为I*(I-1)*M.

 #include <iostream>
#include <vector>
#include <list>
#include <cstdint> using namespace std; vector<uint8_t> interleaving(vector<uint8_t> &sym_din, size_t M, size_t I)
{
list<uint8_t> sym_fifo[I];
vector<uint8_t> sym_itlv; // Initialize Data FiFo
for(size_t i = ; i < I; ++i) {
for(size_t j = ; j < M*i; ++j)
sym_fifo[i].push_back(uint8_t());
} // Interleaving
for(size_t i = ; i < sym_din.size(); ++i) {
sym_fifo[size_t(i%I)].push_back(sym_din[i]);
sym_itlv.push_back(sym_fifo[i%I].front());
sym_fifo[i%I].pop_front();
} return sym_itlv;
} vector<uint8_t> deinterleaving_fifo(vector<uint8_t> &sym_din, size_t M, size_t I)
{
list<uint8_t> sym_fifo[I];
vector<uint8_t> sym_itlv; // Initialize Data FiFo
for(size_t i = ; i < I; ++i) {
for(size_t j = ; j < M*(I - - i); ++j)
sym_fifo[i].push_back(uint8_t());
} // DeInterleaving
for(size_t i = ; i < sym_din.size(); ++i) {
sym_fifo[size_t(i%I)].push_back(sym_din[i]);
sym_itlv.push_back(sym_fifo[i%I].front());
sym_fifo[i%I].pop_front();
} // DeInterleaving Delay Should be I*(I-1)*M
return sym_itlv;
} vector<uint8_t> deinterleaving(vector<uint8_t> &sym_din, size_t M, size_t I)
{
size_t branch = ;
size_t wraddr = ;
size_t rdaddr = (I - ) * M;
vector<uint8_t> sym_ram(I*(I-)*M/+);
vector<uint8_t> sym_itlv; // Initialize Data RAM
for(size_t i = ; i < I*(I-)*M/ + ; ++i) {
sym_ram[i] = uint8_t();
} // DeInterleaving
for(size_t i = ; i < sym_din.size(); ++i) {
branch = i % I; sym_ram[wraddr] = sym_din[i];
wraddr = wraddr + (I-)*M - branch * M;
wraddr = wraddr >= (I*(I-)*M/ + ) ? wraddr - (I*(I-)*M/ + ) : wraddr; sym_itlv.push_back(sym_ram[rdaddr]);
rdaddr = rdaddr + (I-)*M - ((branch + ) % I) * M;
rdaddr = rdaddr >= (I*(I-)*M/ + ) ? rdaddr - (I*(I-)*M/ + ) : rdaddr;
} // DeInterleaving Delay Should be I*(I-1)*M
return sym_itlv;
} int main(int argc, char **argv)
{
size_t deint_delay = ;
vector<uint8_t> sym_din;
vector<uint8_t> sym_itlv;
vector<uint8_t> sym_deitlv; for(size_t i = ; i < ***; ++i)
sym_din.push_back(i+); sym_itlv = interleaving(sym_din, , );
sym_deitlv = deinterleaving(sym_itlv, , ); cout << "Interleaving:" << endl;
for(vector<uint8_t>::iterator itr = sym_itlv.begin(); itr != sym_itlv.end(); ++itr) {
cout << int(*itr) << ' ' << flush;
}
cout << endl; cout << "DeInterleaving:" << endl; for(vector<uint8_t>::iterator itr = sym_deitlv.begin(); itr != sym_deitlv.end(); ++itr) {
cout << int(*itr) << ' ' << flush;
if(*itr == && deint_delay == )
deint_delay = itr - sym_deitlv.begin();
}
cout << endl;
cout << "Deint Delay is " << deint_delay << endl; return ;
}

卷积交织/解交织C++程序的更多相关文章

  1. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  2. C语言写解一元二次方程程序心得

    前言:在网上看到不少解一元二次方程的小程序,在使用时总得出一大堆小数,感觉很不爽,遂自己重新写了一遍. 首先,先回忆一下一元二次方程的求根公式: 分别读取二次项.一次项和常数项系数并且求出delta ...

  3. 详解微信小程序开发(项目从零开始)

    一.序 微信小程序,估计大家都不陌生,现在应用场景特别多.今天就系统的介绍一下小程序开发.注意,这里只从项目代码上做解析,不涉及小程序如何申请.打包.发布的东西.(这些跟着微信官方文档的流程走就好). ...

  4. 详解微信小程序支付流程

    转发博主 https://blog.csdn.net/qq_38378384/article/details/80882980 花了几天把小程序的支付模块接口写了一下,可能有着公众号开发的一点经验,没 ...

  5. Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)

    实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...

  6. Android清单文件详解(三)----应用程序的根节点<application>

    <application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...

  7. 【转】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程

    http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题& ...

  8. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

    转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...

  9. [js高手之路] es6系列教程 - Set详解与抽奖程序应用实战

    我们还是从一些现有的需求和问题出发,为什么会有set,他的存在是为了解决什么问题? 我们看一个这样的例子,为一个对象添加键值对 var obj = Object.create( null ); obj ...

随机推荐

  1. 在VMware虚拟机中安装Mac OS 操作系统

    1. 安装VMware 我这里是安装VMWARE12.exe,其他的版本我不知道是否可以正常运行,最好大家安装12版本的比较好. 2. 安装 Mac OS X Unlocker for VMware ...

  2. 如何使用django显示一张图片

    django显示图片对新手来说真的算是一个坑.. 这里记录下小白爬坑的历程. 首先,你需要一个可以运行的django服务器,能显示正常的html文本,无法显示图片 这是html的文本,可以显示文字,无 ...

  3. Mermaid 学习

    基础 在 VS code 中安装插件 Markdown Preview Mermaid Support,则便可支持 Mermaid 流程图 flowchart graph LR; A-->B; ...

  4. sublime text3安装Package Control和Vue Syntax Highlight

    一.下载Sublime3 https://www.sublimetext.com/3 二.安装Package Control 在线安装: https://packagecontrol.io/insta ...

  5. Markdown的简介(转)

    欢迎使用 Cmd - 在线 Markdown 编辑阅读器 *我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人, Cmd Markdown 是我们给出的答案 -- ...

  6. [SPOJ-LCS]Longest Common Substring

    题目大意: 求两个字符串的LCS. 思路: 对其中一个字符串构建SAM,然后用另一个字符串在里面匹配,按照SAM的边一直往下走,匹配到的连续的字符数就是公共字串的长度. #include<str ...

  7. JavaScript数组中的22个常用方法

    数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细介绍. ...

  8. C# 7.0特性与vs2017

    下面是关于在C#7.0语言中计划功能的说明.其中大部分功能在Visual Studio “15” Preview 4中能运行.现在是最好的试用时期,请记录下你们的想法. C#7.0语言增加了许多的新功 ...

  9. windows下tomcat的安装配置

    一.下载相应的JDK以及tomcat的版本 JDK:jdk-8u131-windows-x64 tomcat:apache-tomcat-8.5.23-windows-x64.zip 二.JDK的安装 ...

  10. git pull的时候出错: Git Couldn't reserve space for cygwin's heap

    具体: 1. 运行CMD,以管理员身份打开 2. 运行:rebase.exe -b 0x50000000 msys-1.0.dll 再次git pull的时候,不再报错 转自:http://doc.o ...