交织基数为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. Ionic Js十一:模态

    ionicModal 可以遮住用户主界面的内容框. 你可以在你的 index 文件或者是其他文件内嵌入以下代码(里面的代码可以根据你自己的业务场景相应的改变). <script id=" ...

  2. Java 内存模型基础

    一.并发编程模型的两个关键问题 1. 线程之间如何通信 通信是指线程之间以何种机制来交换信息. 在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的并发模型里,线程之间共享程序 ...

  3. CSUOJ 1979 古怪的行列式

    Description 这几天,子浩君潜心研究线性代数. 行列式的值定义如下: 其中,τ(j1j2...jn)为排列j1j2...jn的逆序数. 子浩君很厉害的,但是头脑经常短路,所以他会按照行列式值 ...

  4. Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法

    在做Hibernate框架数据库的关联关系映射练习中出现了Could not get constructor for org.hibernate.persister.entity.SingleTabl ...

  5. 学会使用DNSPod,仅需三步

    学会使用DNSPod,仅需三步   第一步:在DNSPod添加记录 1.访问 https://www.dnspod.cn网站,在DNSPod官网首页的右上角,有[注册],如下图所示,点击[注册]按钮 ...

  6. [MySQL-笔记]创建高性能索引

    索引,MySQL中也叫“键”,是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别. 一.索引分类 B-Tree索引: 优点: MyISAM中,索 ...

  7. Go Web编程 第四章--处理请求

    请求和响应 Request结构 URL字段 Header字段 Body字段 Form, PostForm, MultipartForm字段 在处理器函数中,我们可以通过Request获取各个字段的详细 ...

  8. bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...

  9. Codeforces Round #354 (Div. 2) A. Nicholas and Permutation 水题

    A. Nicholas and Permutation 题目连接: http://www.codeforces.com/contest/676/problem/A Description Nichol ...

  10. codevs 1073 家族 并查集

    家族 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1073/ Description 若某个家族 ...