交织基数为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. Dubbo的特点

    1.介绍 DUBBO有良好的连通性.健壮性.伸缩性.升级性.结合dubbo可以相对于单体系统提升系统整体的扩展性 2. 连通性 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在 ...

  2. MySQL 大数据量使用limit分页,随着页码的增大,查询效率越低下。

    数据表结构 CREATE TABLE `ad_keyword` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plan_goods_id` int(11) DEFA ...

  3. python入门4(冒泡排序)

    在学习了最基本的python语法后,我们来实践一个最简单的冒泡排序,检验一下自己是否入门. def bubble_sort(lists): # 冒泡排序 count = len(lists) for ...

  4. webview内部跳转判断

    重写webview内的方法 webView.setWebViewClient(new WebViewClient() { @Override // 在点击请求的是链接是才会调用,重写此方法返回true ...

  5. Tensorflow学习:(一)tensorflow框架基本概念

    一.Tensorflow基本概念 1.使用图(graphs)来表示计算任务,用于搭建神经网络的计算过程,但其只搭建网络,不计算 2.在被称之为会话(Session)的上下文(context)中执行图 ...

  6. OSI、TCP、IP、UDP 这些都是啥??

    一个大大的问号首先抛出,计算机之间是如何进行通信的? 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统. 网络协议就是数据按照一定的 ...

  7. 一次ygc越来越慢的问题排查过程

    问题发现场景 某天突然收到线上应用的gc时间过长的告警,刚开始只有一台机器偶尔报一下,后续其他机器也纷纷告警,具体告警的阈值是应用10分钟内ygc的总时长达到了6.6s. 初步排除过程 按照gc问题常 ...

  8. 传递 hdu 5961 拓扑排序有无环~

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...

  9. 容易错的try

    配对方式一:try{}catch{}配对方法二:try{}catch{}finally{}配对方法三:try{}finally{}所以可用看出 catch和finally都不是必须的,try和catc ...

  10. 【Memory】chrome调试面板

    本篇文章以chrome版本67.0.3396.99为例,介绍如何使用Chrome和DevTools查找影响页面性能的内存问题,包括内存泄漏.内存膨胀和频繁的垃圾回收. 一.参考链接 https://d ...