4

我有一个无线电接收器。那台收音机的声音输出到我的电脑。声音输出包含 440 Hz 或大约 440 Hz 的摩尔斯电码。该莫尔斯电码的速度范围为 2 到 20 WPM。我有点知道如何判断对方是否在传输,但是我如何将传输/未传输状态转换为文本?我认为可能有比蛮力更好的解决方案。

复杂因素:

  • 我希望程序能够计算出另一个站的传输速度,而不是像大多数摩尔斯电码程序那样由用户指定。
  • 有噪音
  • 莫尔斯电码发射器不会立即打开和关闭。上升和下降时间约为 4 毫秒。
  • 这种莫尔斯电码大部分是由人发送的,因此并不完美:
    • 例如,单词之间的停顿应该由 7 个元素组成,但它可以是 5 到 8 个之间的任何元素。
    • 在一次对话中,一个人的发送速度可能会发生大约 20% 的变化
  • 我想或多或少实时地做到这一点。如果程序输出一些东西,意识到这是一个错误并纠正它,那就没关系了。

源代码

到目前为止的程序示例输出。它可以将音频解析为键控/非键控,但将其解析为点/破折号不起作用。

###########################################################__________________________
_________________________________####################################################
#####################################################################################
#######################################______________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_________________________

任何关于确定传输/不传输和/或将其解析为莫尔斯电码的部分的代码/建议将不胜感激。

4

1 回答 1

1

关于将点与破折号和空格分开,一个想法是在对话开始时开始收集统计数据,并将所有“键控的 XXms”事件放入一个数组(或其他东西),将所有“未键控的 YY 毫秒”放入另一个数组(或者其他的东西)。然后,您最终将得到一个直方图概率(t),用于键控和相同的未键控。这些直方图应该有一些最大值和最小值,对人类和某些算法都是可见的。因此,您对曲线进行了一些舍入,将它们拆分为这些最小值,以将左侧的点与右侧的破折号分开,与可能不止一个带有空格的最小值相同。这种方法确实可以很好地融入对话,但不需要调整。

于 2012-06-01T05:04:54.050 回答