卷积交织/解交织C++程序
交织基数为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++程序的更多相关文章
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- C语言写解一元二次方程程序心得
前言:在网上看到不少解一元二次方程的小程序,在使用时总得出一大堆小数,感觉很不爽,遂自己重新写了一遍. 首先,先回忆一下一元二次方程的求根公式: 分别读取二次项.一次项和常数项系数并且求出delta ...
- 详解微信小程序开发(项目从零开始)
一.序 微信小程序,估计大家都不陌生,现在应用场景特别多.今天就系统的介绍一下小程序开发.注意,这里只从项目代码上做解析,不涉及小程序如何申请.打包.发布的东西.(这些跟着微信官方文档的流程走就好). ...
- 详解微信小程序支付流程
转发博主 https://blog.csdn.net/qq_38378384/article/details/80882980 花了几天把小程序的支付模块接口写了一下,可能有着公众号开发的一点经验,没 ...
- Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...
- Android清单文件详解(三)----应用程序的根节点<application>
<application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...
- 【转】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新 获取"产品付费数量等于0这个问题& ...
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...
- [js高手之路] es6系列教程 - Set详解与抽奖程序应用实战
我们还是从一些现有的需求和问题出发,为什么会有set,他的存在是为了解决什么问题? 我们看一个这样的例子,为一个对象添加键值对 var obj = Object.create( null ); obj ...
随机推荐
- Ionic Js八:头部和底部
1.ion-header-bar 这个是固定在屏幕顶部的一个头部标题栏.如果给它加上'bar-subheader' 这个样式,它就是副标题. <ion-header-bar align-titl ...
- 使用 Python 可以做什么?
翻译自 <Python学习手册(第5版)> Systems Programming Python 对操作系统服务的内置接口使其非常适合编写可移植.可维护的系统管理工具和实用程序 utili ...
- JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现
1 学习回顾 1. Lucene 是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容 顺序扫描法 全文检索 3. 什么是全文检索? 这种先创建索引 再 ...
- CentOS7配置ssh证书登录无效
今天配置A服务器使用root用户ssh免密登录服务器B,配置过程很简单,由于这两台服务器开发人员之前生成过证书,我就直接在A服务器执行如下命令即可 # ssh-copy-id -i ~/.ssh/id ...
- iOS 9应用开发教程之多行读写文本ios9文本视图
iOS 9应用开发教程之多行读写文本ios9文本视图 多行读写文本——ios9文本视图 文本视图也是输入控件,与文本框不同的是,文本视图可以让用户输入多行,如图2.23所示.在此图中字符串“说点什么吧 ...
- ARM 内核
ARM相关知识: ARM核:A8,ARM11,ARM9 指令架构:ARMv7,ARMv6,ARMv4 ARM核分为两个阵营: 经典型:ARM7,ARM9,ARM11 Cortex: Cortex A: ...
- [Luogu4724][模板]三维凸包(增量构造法)
1.向量点积同二维,x1y1+x2y2+x3y3.向量叉积是行列式形式,(y1z2-z1y2,z1x2-x1z2,x1y2-y1x2). 2.增量构造法: 1)首先定义,一个平面由三个点唯一确定.一个 ...
- 【SPFA】POJ1511-Invitation Cards
[题目大意] 给出一张有向图,以1位源点,求“从源点出发到各点的距离”和“与各点返回源点的距离和”相加得到的和. [思路] 毫无疑问是最短路径,但是这数据量就算是SPFA也绝壁会超时啊,抱着必死的心态 ...
- POJ 2104 && POJ 2761 (静态区间第k大,主席树)
查询区间第K大,而且没有修改. 使用划分树是可以做的. 作为主席树的入门题,感觉太神奇了,Orz /* *********************************************** ...
- Android 脚本设计之 SL4A
SL4A的全称为Scripting Layer for Android, 顾名思义就是Android的脚本架构层,它的目的就是可以用熟知的脚本开发语言来开发Android应用程序.其工作原理基于RPC ...