增强管道数据流转(EPDR)技术的设计局限和替代

news2024/11/18 19:38:12

在前文中,我们介绍了EPDR技术的起源,以及使用该技术驱动的业余软件无线电平台专栏。已有玩家通过踩坑证明,进程管道交换数据时间延迟大,构造时间敏感系统难。除非采用传统的紧耦合设计及更大的颗粒度,否则很难在期望的时刻执行正确的动作。典型的系统包括:

  1. 带有 TDMA 收发同步的通信系统
  2. 超过20MHz采样率的CPU算法程序
  3. 驱动X310等超宽带采样

为了不给读者造成困扰和不必要的尝试,通过此文明确这个技术以及相应平台的局限,并给出可能满足上述需求的解决构想。

1 EPDR设计理念

EPDR based taskBus的设计初衷是为了用跨进程的方式黏合不同开发工具开发的程序,以解决一些灵活性和学习曲线不可兼得的问题。在开发之初,它甚至不是一个用于业余SDR的平台,而是用于矿脉勘探传感器数据处理等弱实时性的领域。

设计理念参考这个文档。需要强调的是,尽管taskBus看起来类似一些图标拖拽的产品,实际上它既不是GNU-Radio、Pothos Flow,也不是Simulink、Labview——taskBus的理想颗粒度更大。举例子,对于一个仿真通信系统,在模块里实现到什么颗粒度,是有讲究的。有的工具,可能一个滤波器、1个加法器就弄了1个模块,而taskBus希望颗粒度略大一些,这样便于优化模块内性能,并降低管道IO。

以simulink的QPSK理想范例为例,如果使用taskBus实现功能,典型的划分是下图的7个模块,而不是30个Blockset。

7 simu  task
上图底图来自网络搜索。

  • 模块1 完成调制仿真,包含simulink中的13个Blockset。
  • 模块2 完成解调仿真, 包含simulink中的12个Blockset。
  • 模块3\4\5\6完成显示、数据生成等工作,与Simulink粒度一致。

2 管道实时性短板

taskBus设计时,希望通过管道跨进程共享的工具主要包括文件、影音、GUI绘图、串口、键鼠、数据库等通用非实时模块。有了这些模块,强实时性的独立进程就只用负责算法,无需了解更多的知识。在设计场景中,1个实验小组由3-4个人组成,独立的用自己喜欢的程序构造紧耦合模块,所有的实时性都在模块内解决。换句话说:taskBus 不支持强实时算法的复用,TDMA的发射、接收同步需要紧耦合写在一起。

对弱实时性的应用,比如听广播、对讲机,典型的颗粒度类似基于taskBus的通信课程里的范例。在这些范例里,对一个教学QPSK的波形处理、信道处理是两个不同的模块,允许不同波形和纠错之间进行组合。即使是弱实时应用,一个模块内还是包含很多步骤。比如DDC、下抽、插值等等。这些步骤是用C语言紧耦合在一起的,并没有分开。

对强实时性的应用,比如TDMA在毫秒级别对准时间,使用管道是不切实际的。一个事件循环以及跨进程的流转缓存所经历的延迟,基本在10毫秒级别,且受到操作系统当前状态的影响,并不稳定。经过现场测试,在后台弹出某杀毒软件升级信息时,整体延迟高达500ms以上。这是因为虽然模块可以采用fflush(stdout)确保进程出口的延迟小,但管道数据进入操作系统后,就不受控制。如果采用Linux的实时内核,情况会有改观,但在大吞吐下,依旧存在问题。

stdout
stdin
进程1
操作系统内核
进程2

3 替代方案

  1. 采用传统的单进程大颗粒度设计,以协议栈的粒度实现重用。如1个进程完成整体的GSM协议栈,只是话筒、声卡、波形质量指示等信息通过管道输出。至于协议栈内的各级处理算法,还是传统的紧耦合设计。
  2. 采用基于UDP等即时协议的通信协议,或者中间件。典型的包括UDP套接字、The enhanced Communication Abstraction Layer (eCAL)等。但在通用OS下,还是会遇到丢包的问题。
  3. 采用FPGA而非通用CPU进行开发。FPGA的上位机(PC端)程序可以兼容taskBus,作为模块嵌入。代价是学习和培训成本高。

4. 非计算机团队黏合最佳策略

非计算机专业教研的黏合是一个非常具有挑战性的问题。这些困难包括:

  1. 团队中的核心不具备完整的计算机知识,可能只熟悉1个开发工具的一小部分,并无法独立完成调试。
  2. 团队成员掌握的知识链条差异很大,开发能力交集小,交流中无法Get到彼此的关键点。一些新进的硕士在学校内只学过C语言且只会写Hello world。一些博士几乎不具备基础的命令行能力。
  3. 团队成员价值主要靠论文、毕业答辩来体现,学习开发技术的动力不足,也不愿意涉足新的非相关知识领域。
  4. 团队的成员更替频繁,可能1个博士没干满3年就毕业了,硕士更短。

目前看来,对于这样的情况,代码集成+消息队列是最佳选择。这些年探索DLL、COM、Qt插件、EPDR(taskBus)、eCAL、Kafka等特定技术链条建立规范的努力并没有白费,这些尝试显著开拓了视野、增长了见识。未来taskBus将继续作为业余SDR小众平台开发下去,并逐步加入一些好玩的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算实训34——docker环境配置、镜像基本操作、容器基本操作、设置远程连接管理

一、配置docker环境 写入模块 [rootdocker ~]# cat << EOF | tee /etc/modules-load.d/k8s.conf > overlay > br_netfilter > EOF 加载模块 #内核模块 [rootdocker ~]# modprobe overlay #桥接模块 [rootdocker ~]# modprobe br_netfilter #查看所添加的模…

物联网安装调试员:振兴杯全国青年职业技能大赛背后的人才培养

一、物联网安装调试员职业概述 1.1 职业定义 物联网安装调试员是信息时代下新兴的职业之一&#xff0c;他们利用先进的检测仪器和专用工具&#xff0c;负责物联网产品的安装、配置和调试工作。这项工作的核心是确保物联网设备能够高效、稳定地运行&#xff0c;实现数据的互联…

【精选】基于数据可视化的智慧社区内网平台

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

简单的jar包重打包Failed to get nested archive for entry 报错处理

简单的jar包重打包Failed to get nested archive for entry 报错处理 1. 需求 公司有一个后端项目&#xff0c;项目已经打好了jar包&#xff0c;现在我们发现jar包依赖的子包有问题&#xff0c;其中的一个mybatis xml文件查询数据不正确&#xff0c;我们需要替换项目&#xf…

使用Blender进行3D建模—基础操作笔记

Blender 3D 建模&#x1f680; 在博0阶段&#xff0c;目前已经完成立创EDA的PCB绘制的基础学习&#xff0c;树莓派的系统安装远程控制能学习&#xff0c;加上我本硕阶段学习的单片机和深度学习人工智能算法的知识&#xff0c;这里打算补上一块比较重要的能力拼图&#xff0c;就…

集团数字化转型方案(八)

集团数字化转型方案是一项全面而系统的工程&#xff0c;旨在通过构建基于云计算、大数据、人工智能等现代信息技术的企业级数字化平台&#xff0c;对传统的组织结构、业务流程、管理模式实现根本性革新。方案将围绕数据驱动的决策机制、智能化业务流程、数字化的客户体验、平台…

编程实现基于信息熵/基尼指数划分选择的决策树算法

编程实现基于信息熵/基尼指数划分选择的决策树算法 手动建立一个csv文件 #csv的内容为 Idx,color,root,knocks,texture,navel,touch,density,sugar_ratio,label 1,dark_green,curl_up,little_heavily,distinct,sinking,hard_smooth,0.697,0.46,1 2,black,curl_up,heavily,disti…

Linux驱动学习之点灯(五,设备树没用平台设备总线)

创建一个设备树节点 /{led:led{compatible"led";led_pin<&gpio0 22 GPIO_ACTIVE_HIGH &gpio0 21 GPIO_ACTIVE_HIGH>;status"okay";} } OF函数介绍 查找属性 of_gpio_named_count of_gpio_named_count 函数用于获取设备树某个属性里面定…

Calendar 控件 自定义重汇效果

自定义样式代码&#xff1a; <UserControl.Resources><c:MarginWithScheduleConverter x:Key"MarginWithScheduleConverter"/><Style TargetType"GroupBox" BasedOn"{StaticResource GroupBoxStyle}"/><Style x:Key"C…

Linux系统管理体系-服务管理

1、管理命令 systemctl 管理服务 开机自启动管理正在运行的服务 1&#xff09;检查sshd远程连接服务状态 systemctl status sshd systemctl status 单个或者多个服务名2&#xff09;如何设置服务开启 #运行服务 systemctl start sshd #开机自启动 systemctl enable sshd #…

【opencv】SIFT(尺度不变特征变换)算法?

关键词&#xff1a;SIFT Algorithm 文章目录 一、介绍二、什么是 SIFT 算法&#xff1f;三、人类与机器识别3.1 SIFT 在计算机视觉中的应用3.2 SIFT 关键点的优势3.3 示例演示 四、关键点定位关键点选择 五、入学指导任务5.1 计算大小和方向5.2 创建震级和方向的直方图5.3 关键…

【LLM大模型论文日更】| QAEA-DR:一个用于密集检索的统一文本增强框架

论文&#xff1a;https://arxiv.org/pdf/2407.20207代码&#xff1a;未开源机构&#xff1a;鹏城实验室领域&#xff1a;稠密检索发表&#xff1a;arXiv 研究背景 研究问题&#xff1a;这篇文章要解决的问题是密集检索&#xff08;Dense Retrieval&#xff09;中&#xff0c;将…

Windows:Node.js下载与安装教程

1、进入nodejs官网&#xff1a;https://nodejs.org/en 2、配置系统参数 3、运行cmd&#xff0c;输入 node -v 出现安装版本即安装成功

Keil C51 插件 检测所有if语句

此插件解决的问题 Keil 插件 -- Python 代码 import chardet, sys, glob, re from pathlib import Pathfrom collections import deque# 变量名字典 key--数据名 value--数据s类型 variable_dic {}# 初始化一个空的二维数组 matrix [] # 列表的头数据 header_list [] # 列表…

Tina5 Linux开发

准备开发环境 首先准备一台 Ubuntu 20.04 / Ubuntu 18.04 / Ubuntu 16.04 / Ubuntu 14.04 的虚拟机或实体机&#xff0c;其他系统没有测试过出 BUG 不管。 更新系统&#xff0c;安装基础软件包 sudo apt-get update sudo apt-get upgrade -y sudo apt-get install build-ess…

保护网站安全,了解常见的几种网络攻击

随着互联网技术的迅猛发展&#xff0c;网站作为信息展示和交互的重要平台&#xff0c;面临着日益复杂的网络攻击威胁。从简单的口令入侵到复杂的分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;网络攻击手段层出不穷&#xff0c;给网站所有者带来了巨大的挑战。今…

sqlilabs less21-25关手工注入

第21关 一.登录页面 二 .Burp Suite 抓包&#xff0c;进入重放器 三.查询数据库 先进行编码 )and updatexml(1,concat(1,database()),1)# 四.查表&#xff0c;先进行编码 )and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where…

王老师 linux c++ 通信架构 笔记(五)编译后生成的 nginx 可执行程序的启动与 nginx 选项

&#xff08;22&#xff09; 启动 nginx &#xff1a; 上网测试一下&#xff1a; 端口号 介绍&#xff1a; &#xff08;23&#xff09; 因为 nginx 监听知名端口号 80 &#xff0c;http 服务。也可以知名端口号&#xff0c;格式如下&#xff1a; 生产环境下可以设置 ngi…

扬中网站建设创建网站

扬中网站建设&#xff1a;打造企业更强大的数字名片 随着互联网的发展&#xff0c;网站已经成为企业不可或缺的一部分。对于扬中市的企业而言&#xff0c;建设一个专业的网站不仅能提升品牌形象&#xff0c;更能拓展市场&#xff0c;提高竞争力。本文将为您介绍扬中网站建设的重…

【jetson交叉编译(1)】nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

资源 Toolchain Information jetson-linux jetpack 文章目录 资源1 方案1 qemu-aarch64-static和docker 容器编译jetson2 方案2 模拟器交叉编译器2.1 应对库缺失的情况&#xff0c;进行环境准备2.1.1 模拟器(方案1)2.1.2 在jetson上面进行安装&#xff08;方案2&#xff09; 2…