我有一个无线电接收器。收音机的声音输出到我的电脑。声音输出包含大约440赫兹的莫尔斯电码。莫尔斯电码的速度范围从2到20WPM我知道如何判断另一个电台是否正在发送,但如何获取该发送/不发送状态并将其转换为文本?我想也许有比暴力更好的解决办法。
复杂因素:
我希望程序能够计算出另一个电台的传输速度,而不是像大多数莫尔斯电码程序那样由用户指定。
有噪音
莫尔斯电码发射器不会立即打开和关闭上升和下降的时间约为4毫秒。
这种莫尔斯电码大部分是由人发送的,因此并不完美:
例如,单词之间的停顿应该由7个元素组成,但可以是5到8之间的任意值。
一个人的发送速度在一次谈话中可以变化大约20%
我想在或多或少的实时性。如果程序输出了一些东西,意识到这是一个错误,并纠正了它,这是可以的。
Source code
到目前为止程序的输出示例。它可以将音频解析为keyed/notkeyed,但将其解析为dots/dashes不起作用。

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

关于决定发送/不发送和/或决定发送到莫尔斯电码的部分的任何电码/建议将不胜感激。

最佳答案

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

10-06 01:57