5

要求的简要说明

(这里有很多好的答案,谢谢大家,如果我能飞,我会更新)。

探测器沿着轨道运行,实时测量几个不同的物理参数(确定性),作为曲线距离的函数。在此过程中,用户可以单击一个按钮来“标记”航点,然后使用 GUI 输入每个航点的详细信息(以人工方式,但在数据采集继续时)。

在此之后,系统对获取的数据执行一系列计算/过滤/修改,同时考虑到为每个航路点输入的约束条件。该过程的输出是一系列校正,也是曲线距离的函数。

该过程的第三部分涉及再次沿着轨道运行,但这次将校正写入校正轨道的物理系统(仍然是曲线距离的函数)。

我目前对您的输入/评论/警告的想法

我想确定的是我是否可以用 PC + FPGA 做到这一点。FPGA 会进行“数据采集”,我会在 PC 上使用 C# 从缓冲区读取数据。航路点信息可以通过 WPF/Winforms 应用程序输入,并存储在数据库/平面文件/任何待处理的“处理”中。

对于处理,我会使用 F#。

FPGA 将用于将信息“写入”回物理机器。

我目前可以预见的一个问题是,处理算法是否需要一个采样频率,这会使要缓冲的数据量太大。这意味着将一些处理卸载到 FPGA - 至少是不需要用户输入的位。不幸的是,唯一的预处理算法是卡尔曼滤波器,根据我的谷歌搜索,很难用 FPGA 实现。

如果您愿意提供任何反馈,我将不胜感激。

更新(此处添加的额外信息)

在卡尔曼滤波器的入口处,我们每 1 毫秒查看一次。但在卡尔曼滤波器的另一边,我们将每 1m 采样一次,在我们所说的速度下,采样速度约为每秒 2 次。

所以我想更精确的问题是:

  1. 在 FPGA 上实现卡尔曼滤波器-似乎 可能,但我对这两个主题的了解还不够,无法弄清楚它是如何可能的。

  2. 我也不确定卡尔曼的 FPGA 实现是否能够每 1ms 循环一次——尽管我想应该没问题。

  3. 如果我理解正确的话,FPGA 没有大量的内存。对于该过程的第三部分,我将发送一个(大约)4 x 400 的双精度数组以用作查找表,这可行吗?

  4. 此外,两个进程之间的交换(读/写数据)是否意味着每次都重新编程 FPGA,或者是否可以指示在两者之间切换?(也许只是可以并行运行并忽略其中一个)。

  5. 我见过的另一个选择是使用Avalda FPGA Developer将 F# 编译为 VHDL ,我想我很快就会尝试。

4

7 回答 7

3

你没有提到你的目标、客户、预算、可靠性或最后期限,所以这很难回答,但是......

忘记 FPGA。简化您的设计、开发环境和接口,除非您知道您将使用另一个解决方案来满足您的实时要求。

如果你有预算,我会先看看 LabView。

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView 将在一台 PC 上为您提供数据采集系统和用户 GUI。根据我的经验,开发人员不会选择 LabView,因为它感觉不像是一个“真正的”编程环境,但对于您描述的问题,我绝对会推荐它。

如果您决定使用编译语言,那么我会将实时数据采集组件隔离到具有 RTOS 的嵌入式目标,最好是利用 MMU 进行调度和线程隔离并让您用 C 编写的。如果你得到一个真正的 RTOS,你应该能够真正地安排需要运行的进程,并且如果需要也能够调试它们!使用定义的接口使这个脱靶系统尽可能简单。让它足以获得您需要的数据。

然后,我将使用通用接口文件将接口实现回 PC GUI 以进行维护。使用标准接口将数据传输到 PC,例如 USB2 或以太网。FTDI 芯片非常适合这些东西。

于 2009-02-23T03:01:55.633 回答
2

由于您正在沿着轨道移动,因此我必须假设采样频率不超过 10 kHz。您可以轻松地将数据以该速率卸载到 PC,甚至是 12 Mb USB(全速)。

对于数学数据的严肃处理,Matlab 是要走的路。但由于我没有听说过 F#,我无法发表评论。

4 x 400 双打没有问题。即使是低端 FPGA 也有 100 KB 的内存。

您无需更改图像即可在读取和写入之间切换。这一直在 FPGA 中完成。

于 2009-02-13T19:21:17.947 回答
2

这是一个建议。

转储 FPGA 概念。从 TI 获取 DSP 评估板 选择具有足够 gigaflops 的 DSP 评估板,让您满意。足够的 RAM 来存储您的工作集。

用 C 语言对其进行编程。TI 提供了一个小型 RT 内核。

它通过串行端口或以太网等方式与 PC 通信。

它通过握手发送 PC 熟数据,因此数据不会丢失。DPS 中有足够的内存来存储您的数据,而 PC 有高级时刻。

DSP没有性能问题。

实时位做实时,与 ram 的 MP。处理速度很快,GUI 对时间要求不高。

于 2009-02-23T05:20:16.627 回答
1

你与PC的连接是什么?如果.Net 是基于网络的连接,它将非常适合,因为您可以使用流来处理数据输入。

关于 F# 或任何涉及大型数据集的函数式编程语言,我对您的唯一警告是内存使用。它们很棒并且在数学上可以证明,但是当您从多次递归中获得堆栈溢出异常时,这意味着您的程序将无法运行并且您会浪费时间和精力。

如果您需要开发 GUI,C# 将非常棒,winforms 和 GDI+ 应该让您无需付出巨大努力即可获得可用的东西。

给我们一些关于数据速率和连接的更多信息,也许我们可以提供更多帮助?

于 2009-02-17T12:56:06.547 回答
1

Microsoft Robotics Studio 中可能有一些有用的东西:链接文本,尤其是实时方面。CCR - 并发协调运行时已经有很多这样的想法,模拟工具可能会帮助您构建一个有助于您分析的模型。

于 2009-02-21T13:21:23.383 回答
1

在我看来,您可以离线进行所有处理。如果是这种情况,那么离线是要走的路。换句话说,将过程分为 3 个步骤:

  1. 数据采集
  2. 数据分析
  3. 基于数据分析的物理系统修正。

数据采集

如果您无法使用标准界面收集数据,那么您可能必须使用自定义界面。很难说您是否应该在不了解更多接口的情况下使用 FPGA。构建自定义界面的成本很高,因此您应该进行权衡研究以选择方法。无论如何,如果这是基于 FPGA 的,那么保持 FPGA 简单并将其用于原始数据采集。使用当前的硬盘驱动器技术,您可以轻松存储 100 GB 的数据以进行后期处理,因此将原始数据存储在磁盘驱动器上。如果您不需要的话,您甚至不想在 FPGA 中实现一维卡尔曼滤波器。

数据分析

一旦您将数据保存在硬盘上,您就有很多数据分析选项。如果您已经了解 F#,请使用 F#。Python 和 Matlab 都有很多可用的数据分析库。

与必须实时进行所有处理的解决方案相比,这种方法还使测试数据分析软件变得更加容易。如果结果看起来不正确,您可以轻松地重新运行分析,而无需再次收集数据。

物理系统校正

获取数据分析的结果并沿着轨道运行检测器,再次通过接口卡为其提供适当的输入。

于 2009-02-22T14:48:50.340 回答
1

我做过很多嵌入式工程,包括你描述的那种混合系统。以您需要处理的数据速率和大小,我怀疑您是否需要 FPGA……只需找到现成的数据采集系统即可插入您的 PC。

我认为您将遇到的最大问题与硬件 API 的语言绑定更相关。过去,我不得不用 C 和汇编(甚至一些 Forth)开发很多软件,因为这是从硬件获取数据的最简单方法。

于 2009-02-23T02:00:27.167 回答