摩尔斯电码是在对三个符号进行编码的前缀二进制代码之上的前缀三进制代码(用于编码58个字符)。
当被接受时,这是一个简短得多的答案。但是,考虑到用户之间的巨大误解,并且按照OP的要求,我写了更长的答案。第一个“概述”部分向您介绍了要点。
内容
概括地说
当询问“摩尔斯电码是二进制,三进制还是五进制”时?除非人们为可接受的答案确定一些标准,否则无法比较可能的答案。的确,如果没有适当的标准,人们几乎可以对任何一种结构进行解释。我选择的标准如下:
这样做的目的是为了防止任意黑客行为,这种行为忽略了科学研究中的代码理论的基本概念,并且尽管给出了非正式的结论,但通过给出系统的分析幻觉可能具有一定的吸引力。该站点应该是关于
计算机科学而不是编程的。我们应该至少使用既有的科学知识和公认的概念来回答技术问题。
Σ1={0,1}
Σ3={A,B,…,Z,0,1,…,9,?,=,…,×,@,[]},最后一个符号是空格。
Σ2dot
dash
Σ∗3Σ∗2
Σ∗2Σ∗1
Σ1Σ3Σ2
Σ2=dot
dash
sep
C3→2Σ3Σ2C2→1Σ2Σ1既是同态的又是前缀,因此两者都是明确的代码,因此能够构成为将58个符号明确地编码成二进制。
{ dot
dash
sep
}
dot
→10dash
→1110sep
→00
注意,所谓的空间连续之间dot
或dash
实际上是包括在所表示dot
和dash
,因为这是这种类型的代码,其通常被定义为字符串同态从源符号与目标符号表示的码字通常的数学表示,就像我刚才那样
这与标准中的某些介绍有所不同,后者的目的更多是直观地为用户指定代码,而不是对其结构特性进行分析。但是两种情况下的编码都是相同的。
即使没有标准的精确时序,模拟信号的解码器仍然可以将其转换为我们建议的三进制字母,因此对三进制代码的上述理解仍然有效。
代码:基本要点
该答案基于2009年10月发布的ITU-R M.1677-1标准(感谢Jason C提供参考)。我将使用术语dot
和dash
,而不是dit
和dah
,因为它是本标准使用的术语。
在开始讨论摩尔斯电码之前,我们需要就代码是什么达成一致。关于这个问题的艰难讨论显然需要它。
从根本上说,信息需要被表示以便被传输或以其他方式处理。代码是一种将信息从一种表示形式转换为另一种表示形式的系统。这是一个非常笼统的定义。我们必须小心不要混淆表示的概念,以及从一个表示(源)到另一个(目标)的代码的概念。
表示可以采用多种形式,例如可变电压,纸上的彩色圆点,字符串,数字,0和1的二进制字符串等。区分模拟和形式(或逻辑或抽象)表示非常重要。 。
模拟/物理表示形式是图形,变化的电压电平,形状(字母)。
逻辑/形式/抽象表示是具有抽象图,符号字符串或其他数学实体的数学表示。
尽管某些信息最初可能是模拟的,但我们通常会将其转换为逻辑表示,以便能够通过数学方法或人工精确地定义其处理。
相反,我们使用诸如计算机或变送器之类的物理设备处理逻辑表示,我们需要给逻辑表示一个模拟形式。
出于该分析的目的,我们考虑的唯一模拟形式是用于传输的形式,如标准中所述。但是即使这样,我们仍将认为第一步是将这种模拟表示解释为结构相同的逻辑表示的直接实现,然后在此之上我们对摩尔斯码可能是哪种代码进行分析。代码理论是基于逻辑表示分析的数学知识体系。
但是,在最后的讨论中,我们将回到模拟/逻辑转换。
代码:定义
ST
但是,摩尔斯电码的目的只是提供一种将大字母的字符串表示为基于小得多的字母(实际上是二进制)的字符串的方法,使用几乎是二进制的中间字母(点和破折号)来更好地适应人类知觉和操纵能力。这是通过所谓的
可变长度代码实现的:
STC:S→T∗STCS∗T∗
C(s)∈T∗s∈S
CS∗T∗T∗S∗
w
很容易证明,在代码组成下,唯一的可解码性和prefix属性是封闭的。
注意,作为同构的定义意味着码字之间没有特殊的分隔。正是它们的结构(例如prefix属性)可以明确地标识它们。
实际上,如果存在这样的分隔符号,则它们将必须是目标字母的一部分,因为它们对于从目标字母中解码字符串是必需的。然后,通过将分隔符附加到前面的代码字来恢复可变长度代码的理论模型将是非常简单的。如果那会增加上下文难度(例如由于多个分隔符),那仅是暗示代码比看似复杂。这是坚持上述理论模型的一个很好的理由。
摩尔斯电码
标准中从三个级别描述了摩尔斯电码:
3。它旨在提供自然语言文本的编码,使用57个字符(27个字母,10个数字,20个合成符号和键)和一个词间空格将字符串切成单词。词间空间的使用就像一个特殊字符,可以与其他字符混合使用,我会注意SEP
。
2。所有这些字符都应使用字母间空格(应注意)将dash
和编码,以将一个字母的and和下一个字母的字母和dot
空格sep
分开。dash
dot
1。的dash
和dot
,以及sep
要与在一些接受单元而言精确限定的长度被编码为信号或不存在信号(称为间隔)的。特别
要注意的是,字母dash
和dot
编码字母之间必须用元素间的空格隔开σ
。
这已经需要一些结论。
以模拟形式发送和接收的消息是一系列长度单位(空间长度或时间长度),因此,如附件1第I部分的规定,信号在每个单位的整个持续时间内都是开/关标准 2 :
2 Spacing and length of the signals
2.1 A dash is equal to three dots.
2.2 The space between the signals forming the same letter is equal to one dot.
2.3 The space between two letters is equal to three dots.
2.4 The space between two words is equal to seven dots.
这显然是在所谓的比特流,其可以被以二进制表示由一串逻辑地表示一个模拟编码0
ANS 1
,静置模拟断和上。
为了抽象化与模拟表示有关的问题,我们可以考虑将摩尔斯电码消息作为位串进行传输,我们将用0
和加以注意1
。
因此,以上摘自标准的内容可以在逻辑上表示为:
- 0。A
dot
由表示1
。
- 1。A
dash
由表示111
。
- 2。元素间的空间用
σ
表示0
。
- 3。字母间的空间用
sep
表示000
。
- 4。词间空间用
SEP
表示0000000
。
因此,我们可以看到摩尔斯电码是使用5个二进制代码字对这5个符号进行编码。从天真的或数学的观点来看,除了这不是系统的描述方式外,还有很多其他功能,并且它并不是最方便的方法。
还请注意,此说明仅针对外行,而不是代码理论专家。因此,它描述的可见外观多于证明外观的内部结构。尽管在数学上更加结构化,但没有理由排除与此描述兼容的其他描述以强调代码的属性。
但是首先,我们应该注意,代码的完整描述涉及3种表示形式,可以立即识别:
- 3。文本,由字符串组成,包括
SEP
。
- 2。字母串作为一个字符串的编码
dot
,dash
和sep
。
- 1。将这三个级别中的2级字符串编码
symbols
为二进制字符串。
我们可能会以什么样的符号可能讨论什么是编码,但它的莫尔斯电码的一个重要方面,它有这三个层次表示,在顶部的字符,dot
S和dash
ES在中间,位0
和1
底部。
这意味着必须要有两个代码,一个从3级到2级,另一个从2级到1级。
分析三种表示形式
为了对这个三层编码系统进行一致的分析,我们应该首先分析在每个级别上相关的信息。
1。根据定义及其模拟表示的必要性,该位串仅由0
和组成1
。
3。在文本级别,我们需要58个符号的字母,包括57个字符和词间空格SEP
。它们中的全部58个最终都必须具有二进制编码。但是,尽管摩尔斯电码标准指定了这57 + 1个字符,但并未指定应如何使用它们来编码信息。那就是英语和其他自然语言的作用。摩尔斯电码为其他系统提供58个符号的字母,它们可以在其上构建一些58进制的代码,但是摩尔斯电码本身并不是58进制的代码。
2。在dot
and dash
级别,我们只需要这两个符号即可对这57个字符进行编码,即为每个字符提供一个码字作为dot
and 字符串,以及dash
一些分隔符sep
以标记一个字母何时结束以及另一个字母的开始。我们还需要一些编码词间空间的方法SEP
。我们可能会尝试直接在leaf 1上提供它,但这会弄乱代码的其他层级组织。
确实,这样做的标准可能会受到批评。但是作者可能认为,对于普通用户而言,他们的演示文稿将更容易掌握。它还遵循了对摩尔斯电码的传统描述,该描述早于这种数学分析。
这需要一些说明:
因此,元素间空间σ
不再是什么特别的地方。这只是的一种用途0
。
Σ∗2→Σ∗1
dot
→10
dash
→1110
Σ2sep
000
0
dot
dash
00
sep
0
dot
dash
0
Σ2=dot
dash
sep
C2→1:Σ2→Σ∗1
dot
→10
dash
→1110
sep
→00
我们很惊讶地发现,没有一个码字是另一个的前缀。因此,我们有一个前缀代码,它是明确的并且易于解码。
C3→2:Σ3→Σ∗2
dot
dash
Σ3dot
dot
dash
dot
f
f→ dot
dot
dash
dot
sep
Σ3SEP
0000000
0
sep
0
dot
dash
SEP
0000
SEP
Σ∗2sep
00
SEP
sep
sep
Σ3={A,B,…,Z,0,1,…,9,?,=,…,×,@, SEP
}C3→2:Σ3→Σ∗2
C3→2
CMorse=C2→1∘C3→2
因此,我们可以得出结论,莫尔斯电码可以理解,和容易地分析,作为前缀二进制编码3个符号字母表{的的组合物dot
,dash
,sep
}成二进制字母表,和前缀编码58符号字母表的(57个字符和一个空格)放入3个字母的字母表中。
合成本身是将58个符号编码为二进制表示形式的前缀。
关于此分析的说明。
始终很难确定一种结构的呈现是可以提出的最佳结构。但是,上面的分析似乎满足了在此答案开始时设置的标准:与3层定义的紧密性(根据当前的编码理论正式提出),简单性并证明了代码的主要属性。
请注意,寻找错误校正属性毫无意义。莫尔斯电码甚至可能无法检测到单个误码,因为它可能会将两个简单地dot
变成一个dash
。但是,它仅导致本地错误。
关于压缩,以近似的霍夫曼编码形式,将三进制编码设计为大约减少点和破折号的数量。但是,可以容易地使这两个组成的代码更密集。
关于字母的大小,二进制和58个符号的字母别无选择。中间字母可以包含更多符号,但是目的是什么?
但是,有些人倾向于识别第DET
2级的空间,从而使字母成为四进制,然后直接在第3级使用它,并在第2级将其自身编码。
DET
0000
C2→1CMorse
确实,这样的选择会使二进制字符串变得0000
模棱两可,可解码为as SEP
或as sep
sep
。模棱两可必须使用sep
无法跟随自身的上下文规则来解决,从而使形式化更加复杂。
模拟到逻辑转换的重要性。
该分析在很大程度上取决于以下事实:将开/关信号分解为等长的单位显然表示二进制字符串的模拟表示。此外,以单位为单位的长度对于上述分析是完全正确的,这似乎不太可能是偶然发生的(尽管有可能)。
但是,从(过于粗略的)来看原始专利1647,它看起来并没有那么精确,例如(第2页顶部):
当在单词或数字的句子中使用时,不同数字或复合数字的符号由字符之间的距离或间隔组成,该距离或间隔的程度大于用于分隔构成任何此类不同字符的字符的距离或复合数字。
后来用手发送或通过耳朵接收的人也不太可能那么精确。确实,他们的拳头(即时机)通常是可以识别的。并非总是考虑间距长度的事实也支持了这种观点,尤其是在学习摩尔斯电码时。
这些情况对应于代码的模拟视图,如短信号(点),中信号(破折号)以及短,中和长暂停。直接转换为逻辑字母自然会得到一个五进制字母,必须将58个符号编码为该五进制字母。当然,这不再是莫尔斯电码的3层表示。
但是,为了有意义(并可能避免歧义),应将此字母与两个信号符号(dot
或dash
)不能彼此跟随,并且暂停符号也不能彼此跟随的约束一起使用。对代码及其属性的分析将变得更加复杂,并且简化代码的自然方法是做已做的事情:引入适当的时机将其变成两个代码的组合,从而导致上面给出的相当简单的分析(请记住,其中包括显示代码为前缀)。
此外,在模拟表示中不必严格遵循精确的时序。由于模拟转换的解码器可以通过任何方式区分短暂停,中暂停和长暂停,因此它应仅模仿二进制情况下的操作。因此,短信号和中信号(必要时紧随其后)被识别为逻辑dot
或dash
。短暂的停顿被遗忘了,因为仅用于标记dot
或的结尾dash
。中暂停被识别为sep
,长暂停被识别为sep
连续的两个。因此,模拟信号以三进制字母表示,可以像以前一样使用它来编码58个符号字母。即使不严格遵守时间安排,也可以使用我们的初步分析。
或者,可以使用信号暂停交替将五进制字母表转换为三进制字母表,仅将三个持续时间作为字母表的符号,并使用上下文分析来确定给定的持续时间是信号还是暂停。但这又有点复杂分析。
这只是表明有很多看待事物的方法,但是它们不一定很方便,并且可能并非所有人都容易使用已开发的用于分析代码的数学工具来进行分析。
可以在Internet上找到有关专利的更多参考。
结论
给定标准的精确时间,似乎一个好答案是将摩尔斯电码视为将三进制前缀编码(由58个字符组成)组成为3个符号的字母表,并由这三个符号的二进制前缀编码组成。
没有标准的精确时间,就不能再考虑二进制级别。然后该模拟到逻辑解码自然发生在中间字母表的水平dot
和
dash
。但是,模拟到逻辑解码器可以将解码转换为之前的3个符号字母,从而保留了我们分析的适用性。