要求的简要说明
(这里有很多好的答案,谢谢大家,如果我能飞,我会更新)。
探测器沿着轨道运行,实时测量几个不同的物理参数(确定性),作为曲线距离的函数。在此过程中,用户可以单击一个按钮来“标记”航点,然后使用 GUI 输入每个航点的详细信息(以人工方式,但在数据采集继续时)。
在此之后,系统对获取的数据执行一系列计算/过滤/修改,同时考虑到为每个航路点输入的约束条件。该过程的输出是一系列校正,也是曲线距离的函数。
该过程的第三部分涉及再次沿着轨道运行,但这次将校正写入校正轨道的物理系统(仍然是曲线距离的函数)。
我目前对您的输入/评论/警告的想法
我想确定的是我是否可以用 PC + FPGA 做到这一点。FPGA 会进行“数据采集”,我会在 PC 上使用 C# 从缓冲区读取数据。航路点信息可以通过 WPF/Winforms 应用程序输入,并存储在数据库/平面文件/任何待处理的“处理”中。
对于处理,我会使用 F#。
FPGA 将用于将信息“写入”回物理机器。
我目前可以预见的一个问题是,处理算法是否需要一个采样频率,这会使要缓冲的数据量太大。这意味着将一些处理卸载到 FPGA - 至少是不需要用户输入的位。不幸的是,唯一的预处理算法是卡尔曼滤波器,根据我的谷歌搜索,很难用 FPGA 实现。
如果您愿意提供任何反馈,我将不胜感激。
更新(此处添加的额外信息)
在卡尔曼滤波器的入口处,我们每 1 毫秒查看一次。但在卡尔曼滤波器的另一边,我们将每 1m 采样一次,在我们所说的速度下,采样速度约为每秒 2 次。
所以我想更精确的问题是:
我也不确定卡尔曼的 FPGA 实现是否能够每 1ms 循环一次——尽管我想应该没问题。
如果我理解正确的话,FPGA 没有大量的内存。对于该过程的第三部分,我将发送一个(大约)4 x 400 的双精度数组以用作查找表,这可行吗?
此外,两个进程之间的交换(读/写数据)是否意味着每次都重新编程 FPGA,或者是否可以指示在两者之间切换?(也许只是可以并行运行并忽略其中一个)。
我见过的另一个选择是使用Avalda FPGA Developer将 F# 编译为 VHDL ,我想我很快就会尝试。