0

我即将开始开发一个应用程序(可能在 C# 中),它具有与 GNU radio 相似的机制,但目的完全不同。

GNU Radio 有一个类似于典型流程图类型编辑器/绘图工具的 GUI,但“画布”上显示的每个对象都是反应式控制流图(而不是流程图框)的一部分。

基本上,它们是黑匣子,每个都有特定的内部用途,并且每个都在需要时具有输入和输出。

为了解释的简单,假设我的范围是创建一个 GUI 画布,我可以将对象拖到上面和一个运行/停止按钮(运行“程序”)。我想在某些方面有点像编程 Scratch 儿童编程工具中的 GUI。

我最初有 3 个对象。

1)某种类型的键盘输入框,我将在其中输入一些 Base64 编码的文本。这只有一个进入对象编号 2 的输出。

2)这个对象接受输入给它(上面的编码文本)并将其转换回 UTF-8(它的唯一目的)并将其输出到对象号 3。

3) 这个对象接受输入给它的输入(来自对象编号 3)并将其输出到屏幕(在它的小盒子里)。

这些对象做什么并不重要,这只是举例。这基本上是 GNU Radio 的工作方式,除了它传递数字信号数据而不是文本。

我的问题是 GNU radio 使用什么样的编程模式(在我把它拆开之前)或者我应该通过寻找这种类型的应用程序来寻找什么样的 OOP 类型模式或想法。甚至是一些好的谷歌链接。

我已经尝试了几个小时,现在试图在谷歌上搜索一些东西,但是真的很难找到合适的词,这些词不会返回数以万计的用于销售流程图软件的广告等。

我还应该补充一点,以后可以添加新对象(黑框)。

4

1 回答 1

1

GNU Radio 是用 C++ 编写的;您认为的“黑”框实际上可以是信号处理或分层块,它们本身包含流程图。

基本概念是每个块类型都是从“母”类继承并重载一个work方法的类,当有新的输入数据(以及输出缓冲区中有足够的可用空间)时调用该方法。每个块都在自己的线程中运行,因此 GNU Radio 在多线程环境中固有地流水线,通常实现完全并行(意味着所有 CPU 内核在不同的块上并行工作)。与单线程信号处理系统相比,这大大提高了吞吐量。

如需快速和肤浅的介绍,请阅读官方 GNU Radio 教程*A 模块化、基于流程图的数字信号处理方法的介绍性章节。

如果您想了解更多关于 GNU Radio 使用(看似)循环缓冲区在块之间交换数据的方式,请参阅我关于该主题的博客文章

通常,您正在构建的应用程序与 GNU Radio 非常不同。所以我认为,更简单的单线程模型更符合您的需求。

除此之外,您甚至可以避免自己编写任何编组代码,而只需编写通过 stdin 接受输入并在 stdout 上生成输出的微型 C# 程序,然后将|它们通过管道传输(非常经典的 Unix 进行文本处理的方式)。

于 2018-03-30T22:07:10.200 回答