卷积交织/解交织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 ...
随机推荐
- 问题:SpringBoot访问不到Controller
SpringBoot正常启动,其它配置都正常,以下是控制台打印: 解决方法: 将controller与application配置文件同层,是访问时无法扫描到相应的controller,故无法映射到相应 ...
- ASP.NET MVC中在Action获取提交的表单数据方法
有Index视图如下: 视图代码如下: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Mas ...
- 七牛云整合Ueditor的ThinkPHP版本
首先去七牛云官网下载phpSDK工具放在Think/library/Vendor下. ueditor后台调用方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- R语言实战(七)图形进阶
本文对应<R语言实战>第11章:中级绘图:第16章:高级图形进阶 基础图形一章,侧重展示单类别型或连续型变量的分布情况:中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关 ...
- Counter Strike HDU 2443 逆序对数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2443 这个题目尝试了很多种方法都过不去,上网查了一下网友们的的思路,竟然和逆序对数有关系!! 题目大意: ...
- jQuery 插件写法示例
1.插件 taskStaticBar.js /**自定义任务进度条插件,用于发布任务单的显示进度 * 先初始化init() * 配置项type:1,任务发布方:type=2,生产方 * 然后传入sho ...
- python opencv3 cornerHarris 角点检测
git:https://github.com/linyi0604/Computer-Vision 角点也是处在一个无论框框往哪边移动 框框内像素值都会变化很大的情况而定下来的点 如果框框水平方向上移动 ...
- xml javascript
1.XMLHttpRequest对象 创建XMLHttpRequest对象 xmlhttp=new XMLHttpRequest(); ##老版本的 Internet Explorer (IE5 和 ...
- git 相关资料应当查看廖雪峰所写的网站
廖雪峰关于git的网站 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013 ...
- SQLSERVER2014集群实战——DNS的坑
近几日生产环境总是偶发的出现数据库连接失败的错误,一开始并未引起重视,因为反馈的人很少,而且应用服务器与数据库服务器都处在同一机房的内网环境,相互之间的访问应该是很稳定的.直到早上有几分钟的时间里出现 ...