我即将开始开发一个应用程序(可能在C#中),它具有与GNU无线电相似的机制,但目的完全不同。
GNU Radio有一个类似于典型流程图类型编辑器/绘图工具的GUI,但“画布”上显示的每个对象都是反应控制流图(而不是流程图框)的一部分。
基本上,它们是黑盒子,每个盒子都有特定的内部用途,每个盒子都有输入和输出(如果需要)。
为了简化说明,我们的范围是创建一个GUI画布,我可以将对象拖动到运行/停止按钮(运行“程序”)。我想在某些方面有点像编程Scratch the kids编程工具的GUI。
我最初有3个物体。
1)某些类型的键盘输入框,我将输入一些Base64编码的文本。这只有一个输出进入对象编号2。
2)此对象接受输入的输入(上述编码文本)并将其转换回UTF-8(其唯一目的)并将其输出到对象编号3.
3)此对象接受输入的输入(来自对象编号3)并将其输出到屏幕(在其小框中)。
这些对象的作用并不重要,仅举例来说。这基本上是GNU Radio的工作原理,除了它传递数字信号数据而不是文本。
我的问题是GNU无线电使用什么样的编程模式(在我拆开它之前)或者我应该通过查看这种类型的应用程序来获得什么样的OOP类型模式或想法。甚至是一些好的谷歌链接。
我已经尝试了几个小时,现在尝试谷歌的东西,但很难找到正确的单词,不会返回x zillion广告出售流程图软件等。
我还应该补充说,以后可以添加新对象(黑盒子)。
答案 0 :(得分:1)
GNU Radio是用C ++编写的;您认为“黑色”框实际上可以是信号处理块或分层块,它们本身包含流程图。
基本概念是每个块类型都是一个继承自“mother”类的类,并重载work
方法,当有新的输入数据(以及输出缓冲区中有足够的可用空间)时会调用该方法。 。每个块都在自己的线程中运行,因此GNU Radio固有地在多线程环境中进行流水线操作,通常实现完全并行(意味着所有CPU内核在不同的块上并行工作)。与单线程信号处理系统相比,这大大提高了吞吐量。
有关快速和肤浅的介绍,请阅读官方GNU Radio Tutorials *A modular, flowgraph based Approach to Digital Signal Processing的介绍性章节。
如果您想了解更多关于GNU Radio使用(看似)循环缓冲区以在块之间交换数据的方式,请参阅my blog post on that topic。
通常,您正在构建的应用程序与GNU Radio非常不同;所以我认为,一个更简单的单线程模型更像是你想要的。
除此之外,您甚至可以避免自己编写任何编组代码并编写微小的C#程序,这些程序通过stdin获取输入并在stdout上生成输出,只需管道|
它们(非常经典的Unix方式)文字处理)。