摩尔斯电码是二进制,三进制还是五进制的?


27

我正在阅读《代码:计算机硬件和软件的隐藏语言》这本书,在第二章中作者说:

莫尔斯电码被认为是二进制(字面意思是二乘二)代码,因为该代码的组成部分仅由两点组成-点和破折号。

另一方面,维基百科说:

严格来说,它不是二进制的,因为它有五个基本元素(请参阅quinary)。但是,这并不意味着摩尔斯电码不能表示为二进制代码。从抽象的意义上讲,这是电报运营商在传输消息时执行的功能(请参阅五进制)。

但话又说回来,另一个Wikipedia 页面在“二进制代码列表”中包含了摩尔斯电码。

我很困惑,因为我认为摩尔斯电码实际上是三元的。您有3种不同的“可能性”:静默,短蜂鸣或长蜂鸣。

用“搅拌二进制”表示莫尔斯电码是不可能的,不是吗?

“严格二进制”是指二进制流:1010111101010 ..我应该如何表示静音,短蜂鸣和/或长蜂鸣?

我能想到的唯一方法是计算机实现的“字号”。如果我(和CPU /代码的解释器)知道每次将读取8位,那么我可以代表摩尔斯电码。我可以简单地用1表示一个短蜂鸣声,或用0表示一个长蜂鸣声,而沉默将由单词长度隐式表示。(假设是8位。)因此,我又有了这个第3个变量/第3个资产我的手:字号。

我的想法是这样的:在一个8位的字中,我可以为要读取的位保留前3位,为莫尔斯电码保留后5位。就像00110000代表'A'。而且我仍然处于“二进制”状态,但是我需要使它变为三进制的字长,不是吗?前3位表示:接下来的5位仅读取1位。

代替二进制,如果我们使用三进制,我们可以显示摩尔斯电码,例如:101021110102110222等。其中1是:dit 0是:dah,2是静默。通过使用222,我们可以对长时间的静音进行编码,因此,如果您具有*-* --- *-之类的信号,则可以显示为:102100022210,但是除非直接使用1和0,否则不可能直接使用就像我提到的“固定”字长一样,但这很好解释,而不是以二进制形式保存摩尔斯电码。想象一下像钢琴之类的东西,您只有钢琴按钮。您想用摩尔斯电码给某人留言,可以将按钮涂成黑色。您无法留下清晰的信息,不是吗?您还需要至少一种颜色,以便您可以设置静音(字符和单词之间的静音。这就是三叉戟的意思)。

我不是问您能否用57进制数或其他任何形式表示摩尔斯电码。

我已经通过电子邮件发送给作者(Charles Petzold);他说,他在“代码”的第9章中演示了摩尔斯电码可以解释为二进制代码。

我的想法哪里出问题了?我在读的书是摩尔斯电码是二进制吗?是否值得商bat?为什么在一个维基百科页面上将摩尔斯电码告诉成五进制,并且在“二进制码列表”页面中也列出了摩尔斯电码?

编辑:我已经通过电子邮件发送给作者并得到了回复:

- - -原始信息 - - -

发件人:Koray Tugay [mailto:koray@tugay.biz]

发送:2015年3月3日,星期二,下午3:16

至:cp@charlespetzold.com

主题:莫尔斯电码真的是二进制的吗?

主席先生,您能否在这里看看我的问题:摩尔斯电码是二进制,三进制还是五进制的?五进制?

此致,Koray Tugay

来自:“查尔斯·皮佐尔德”

致:“'Koray Tugay'”

主题:RE:莫尔斯电码真的是二进制的吗?日期:3

2015年3月23:04:35 EET

在“代码”的第9章结尾处,我演示了莫尔斯电码可以解释为二进制代码。

- - -原始信息 - - -

发件人:Koray Tugay [mailto:koray@tugay.biz]

发送:2015年3月3日,星期二,下午3:16

至:cp@charlespetzold.com

主题:莫尔斯电码真的是二进制的吗?

主席先生,您能否在这里看看我的问题:摩尔斯电码是二进制,三进制还是五进制的?五进制?

此致,Koray Tugay

我不会隐藏他的电子邮件,因为无论如何在网上都很容易找到。


请移动任何进一步的谈话chat.stackexchange.com/rooms/21638/...
漫步逻辑

评论不作进一步讨论;此对话已转移至聊天
拉斐尔

我修复了我不小心删除的链接(whoops);请不要再回滚到更差的版本。
拉斐尔

1
@WanderingLogic正确,最有效且无干扰的方法是静默标记问题以进行评论清除,并建议将评论移到标记中进行聊天,而不是公开扮演评论警察,并尝试创建一个聊天室以合并所有评论没有上下文的所有答案。由于Raphael发布了正确的链接,您的链接现在也使事情变得混乱。
杰森C

1
@ J.-E.Pin好吧,我没有给出正式的定义,因为我认为回答这个问题的人会知道这一点是理所当然的,而且我确实对维基百科有一两个参考来设置上下文。即使维基百科远非完美无缺,它也应该能够发挥定义的作用,就像这里经常做的那样。我花了一些时间才意识到这是一个问题,实际上很普遍。我本人正在用一个明确的定义,引号,参考文献和带有内射同态的形式说明来详细重写所有内容。我应该结束吗?
2015年

Answers:


19

摩尔斯电码是在对三个符号进行编码的前缀二进制代码之上的前缀三进制代码(用于编码58个字符)。

当被接受时,这是一个简短得多的答案。但是,考虑到用户之间的巨大误解,并且按照OP的要求,我写了更长的答案。第一个“概述”部分向您介绍了要点。

内容

概括地说

当询问“摩尔斯电码是二进制,三进制还是五进制”时?除非人们为可接受的答案确定一些标准,否则无法比较可能的答案。的确,如果没有适当的标准,人们几乎可以对任何一种结构进行解释。我选择的标准如下:

  • 它应在第二层中以点/破折号表示摩尔斯电码的三层描述;

  • 它应尽可能适合为代码的理论分析开发的表示形式和数学工具;

  • 它应该尽可能简单;

  • 它应该清楚地显示出摩尔斯电码的特性。

这样做的目的是为了防止任意黑客行为,这种行为忽略了科学研究中的代码理论的基本概念,并且尽管给出了非正式的结论,但通过给出系统的分析幻觉可能具有一定的吸引力。该站点应该是关于 计算机科学而不是编程的。我们应该至少使用既有的科学知识和公认的概念来回答技术问题。

Σ1={0,1}

Σ3={A,B,,Z,0,1,,9,?,=,,×,@,[]},最后一个符号是空格。

Σ2dotdash

  • Σ3Σ2

  • Σ2Σ1

Σ1Σ3Σ2

Σ2=dotdashsepC32Σ3Σ2C21Σ2Σ1既是同态的又是前缀,因此两者都是明确的代码,因此能够构成为将58个符号明确地编码成二进制。

{ dotdashsep }

dot 10dash 1110sep 00

注意,所谓的空间连续之间dotdash实际上是包括在所表示dotdash,因为这是这种类型的代码,其通常被定义为字符串同态从源符号与目标符号表示的码字通常的数学表示,就像我刚才那样

这与标准中的某些介绍有所不同,后者的目的更多是直观地为用户指定代码,而不是对其结构特性进行分析。但是两种情况下的编码都是相同的。

即使没有标准的精确时序,模拟信号的解码器仍然可以将其转换为我们建议的三进制字母,因此对三进制代码的上述理解仍然有效。

代码:基本要点

该答案基于2009年10月发布的ITU-R M.1677-1标准(感谢Jason C提供参考)。我将使用术语dotdash,而不是ditdah,因为它是本标准使用的术语。

在开始讨论摩尔斯电码之前,我们需要就代码是什么达成一致。关于这个问题的艰难讨论显然需要它。

从根本上说,信息需要被表示以便被传输或以其他方式处理。代码是一种将信息从一种表示形式转换为另一种表示形式的系统。这是一个非常笼统的定义。我们必须小心不要混淆表示的概念,以及从一个表示()到另一个(目标)的代码的概念。

表示可以采用多种形式,例如可变电压,纸上的彩色圆点,字符串,数字,0和1的二进制字符串等。区分模拟和形式(或逻辑或抽象)表示非常重要。 。

模拟/物理表示形式是图形,变化的电压电平,形状(字母)。

逻辑/形式/抽象表示是具有抽象图,符号字符串或其他数学实体的数学表示。

尽管某些信息最初可能是模拟的,但我们通常会将其转换为逻辑表示,以便能够通过数学方法或人工精确地定义其处理。

相反,我们使用诸如计算机或变送器之类的物理设备处理逻辑表示,我们需要给逻辑表示一个模拟形式。

出于该分析的目的,我们考虑的唯一模拟形式是用于传输的形式,如标准中所述。但是即使这样,我们仍将认为第一步是将这种模拟表示解释为结构相同的逻辑表示的直接实现,然后在此之上我们对摩尔斯码可能是哪种代码进行分析。代码理论是基于逻辑表示分析的数学知识体系。

但是,在最后的讨论中,我们将回到模拟/逻辑转换。

代码:定义

ST

但是,摩尔斯电码的目的只是提供一种将大字母的字符串表示为基于小得多的字母(实际上是二进制)的字符串的方法,使用几乎是二进制的中间字母(点和破折号)来更好地适应人类知觉和操纵能力。这是通过所谓的 可变长度代码实现的

STC:STSTCST

C(s)TsS

CSTTS

w

很容易证明,在代码组成下,唯一的可解码性和prefix属性是封闭的。

注意,作为同构的定义意味着码字之间没有特殊的分隔。正是它们的结构(例如prefix属性)可以明确地标识它们。

实际上,如果存在这样的分隔符号,则它们将必须是目标字母的一部分,因为它们对于从目标字母中解码字符串是必需的。然后,通过将分隔符附加到前面的代码字来恢复可变长度代码的理论模型将是非常简单的。如果那会增加上下文难度(例如由于多个分隔符),那仅是暗示代码比看似复杂。这是坚持上述理论模型的一个很好的理由。

摩尔斯电码

标准中从三个级别描述了摩尔斯电码:

  • 3。它旨在提供自然语言文本的编码,使用57个字符(27个字母,10个数字,20个合成符号和键)和一个词间空格将字符串切成单词。词间空间的使用就像一个特殊字符,可以与其他字符混合使用,我会注意SEP

  • 2。所有这些字符都应使用字母间空格(应注意)将dash 和编码,以将一个字母的and和下一个字母的字母和dot空格sep分开。dashdot

  • 1。的dashdot,以及sep要与在一些接受单元而言精确限定的长度被编码为信号或不存在信号(称为间隔)的。特别 要注意的是,字母dashdot编码字母之间必须用元素间的空格隔开σ

这已经需要一些结论。

以模拟形式发送和接收的消息是一系列长度单位(空间长度或时间长度),因此,如附件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.

这显然是在所谓的比特流,其可以被以二进制表示由一串逻辑地表示一个模拟编码0ANS 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。字母串作为一个字符串的编码dotdashsep
  • 1。将这三个级别中的2级字符串编码symbols为二进制字符串。

我们可能会以什么样的符号可能讨论什么是编码,但它的莫尔斯电码的一个重要方面,它有这三个层次表示,在顶部的字符,dotS和dashES在中间,位01底部。

这意味着必须要有两个代码,一个从3级到2级,另一个从2级到1级。

分析三种表示形式

为了对这个三层编码系统进行一致的分析,我们应该首先分析在每个级别上相关的信息。

  • 1。根据定义及其模拟表示的必要性,该位串仅由0和组成1

  • 3。在文本级别,我们需要58个符号的字母,包括57个字符和词间空格SEP。它们中的全部58个最终都必须具有二进制编码。但是,尽管摩尔斯电码标准指定了这57 + 1个字符,但并未指定应如何使用它们来编码信息。那就是英语和其他自然语言的作用。摩尔斯电码为其他系统提供58个符号的字母,它们可以在其上构建一些58进制的代码,但是摩尔斯电码本身并不是58进制的代码。

  • 2。在dotand dash级别,我们只需要这两个符号即可对这57个字符进行编码,即为每个字符提供一个码字作为dotand 字符串,以及dash一些分隔符sep以标记一个字母何时结束以及另一个字母的开始。我们还需要一些编码词间空间的方法SEP。我们可能会尝试直接在leaf 1上提供它,但这会弄乱代码的其他层级组织。

确实,这样做的标准可能会受到批评。但是作者可能认为,对于普通用户而言,他们的演示文稿将更容易掌握。它还遵循了对摩尔斯电码的传统描述,该描述早于这种数学分析。

这需要一些说明:

  • 在3级(字母级)上,字母间的空间sep不再有意义。这是很正常的,因为在字母的宇宙中,它没有比在纸上分隔两个书写字符的空格更多的含义。在2级有必要识别代表字母的代码字,仅此而已。

  • 同样在第2层,元素间的空间σ不再有意义。它在世界上没有任何意义dotdash,但只在1级必要确定代表二进制码字dotdash。但是在1级,它与bit不能区分0

因此,元素间空间σ不再是什么特别的地方。这只是的一种用途0

Σ2Σ1

dot10dash1110

Σ2sep0000dotdash00sep0dotdash0

Σ2=dotdashsepC21:Σ2Σ1

  • dot10

  • dash1110

  • sep00

我们很惊讶地发现,没有一个码字是另一个的前缀。因此,我们有一个前缀代码,它是明确的并且易于解码。

C32:Σ3Σ2

dotdashΣ3dot dot dash dotf

f dot dot dash dot sep

Σ3SEP00000000sep0dotdashSEP0000

SEPΣ2sep00SEPsep sep

Σ3={A,B,,Z,0,1,,9,?,=,,×,@, SEP}C32:Σ3Σ2

  • A dot dash se

  • B dash dodot dot sep

  • Z dash dash dot dot sep

  • 7 dash dash dot dot dot sep
  • SEP sep sep

C32

CMorse=C21C32

因此,我们可以得出结论,莫尔斯电码可以理解,和容易地分析,作为前缀二进制编码3个符号字母表{的的组合物dotdashsep}成二进制字母表,和前缀编码58符号字母表的(57个字符和一个空格)放入3个字母的字母表中。

合成本身是将58个符号编码为二进制表示形式的前缀。

关于此分析的说明。

始终很难确定一种结构的呈现是可以提出的最佳结构。但是,上面的分析似乎满足了在此答案开始时设置的标准:与3层定义的紧密性(根据当前的编码理论正式提出),简单性并证明了代码的主要属性。

请注意,寻找错误校正属性毫无意义。莫尔斯电码甚至可能无法检测到单个误码,因为它可能会将两个简单地dot变成一个dash。但是,它仅导致本地错误。

关于压缩,以近似的霍夫曼编码形式,将三进制编码设计为大约减少点和破折号的数量。但是,可以容易地使这两个组成的代码更密集。

关于字母的大小,二进制和58个符号的字母别无选择。中间字母可以包含更多符号,但是目的是什么?

但是,有些人倾向于识别第DET2级的空间,从而使字母成为四进制,然后直接在第3级使用它,并在第2级将其自身编码。

DET0000C21CMorse

确实,这样的选择会使二进制字符串变得0000模棱两可,可解码为as SEP或as sep sep。模棱两可必须使用sep无法跟随自身的上下文规则来解决,从而使形式化更加复杂。

模拟到逻辑转换的重要性。

该分析在很大程度上取决于以下事实:将开/关信号分解为等长的单位显然表示二进制字符串的模拟表示。此外,以单位为单位的长度对于上述分析是完全正确的,这似乎不太可能是偶然发生的(尽管有可能)。

但是,从(过于粗略的)来看原始专利1647,它看起来并没有那么精确,例如(第2页顶部):

当在单词或数字的句子中使用时,不同数字或复合数字的符号由字符之间的距离或间隔组成,该距离或间隔的程度大于用于分隔构成任何此类不同字符的字符的距离或复合数字。

后来用手发送或通过耳朵接收的人也不太可能那么精确。确实,他们的拳头(即时机)通常是可以识别的。并非总是考虑间距长度的事实也支持了这种观点,尤其是在学习摩尔斯电码时。

这些情况对应于代码的模拟视图,如短信号(点),中信号(破折号)以及短,中和长暂停。直接转换为逻辑字母自然会得到一个五进制字母,必须将58个符号编码为该五进制字母。当然,这不再是莫尔斯电码的3层表示。

但是,为了有意义(并可能避免歧义),应将此字母与两个信号符号(dotdash)不能彼此跟随,并且暂停符号也不能彼此跟随的约束一起使用。对代码及其属性的分析将变得更加复杂,并且简化代码的自然方法是做已做的事情:引入适当的时机将其变成两个代码的组合,从而导致上面给出的相当简单的分析(请记住,其中包括显示代码为前缀)。

此外,在模拟表示中不必严格遵循精确的时序。由于模拟转换的解码器可以通过任何方式区分短暂停,中暂停和长暂停,因此它应仅模仿二进制情况下的操作。因此,短信号和中信号(必要时紧随其后)被识别为逻辑dotdash。短暂的停顿被遗忘了,因为仅用于标记dot或的结尾dash。中暂停被识别为sep,长暂停被识别为sep连续的两个。因此,模拟信号以三进制字母表示,可以像以前一样使用它来编码58个符号字母。即使不严格遵守时间安排,也可以使用我们的初步分析。

或者,可以使用信号暂停交替将五进制字母表转换为三进制字母表,仅将三个持续时间作为字母表的符号,并使用上下文分析来确定给定的持续时间是信号还是暂停。但这又有点复杂分析。

这只是表明有很多看待事物的方法,但是它们不一定很方便,并且可能并非所有人都容易使用已开发的用于分析代码的数学工具来进行分析。

可以在Internet上找到有关专利的更多参考

结论

给定标准的精确时间,似乎一个好答案是将摩尔斯电码视为将三进制前缀编码(由58个字符组成)组成为3个符号的字母表,并由这三个符号的二进制前缀编码组成。

没有标准的精确时间,就不能再考虑二进制级别。然后该模拟到逻辑解码自然发生在中间字母表的水平dotdash。但是,模拟到逻辑解码器可以将解码转换为之前的3个符号字母,从而保留了我们分析的适用性。


1
请移动任何进一步的谈话chat.stackexchange.com/rooms/21638/...
漫步逻辑

1
评论不作进一步讨论;此对话已转移至聊天
拉斐尔

问题:在三元参数中,您以字母{0,1}开头,由此构造四个符号{dot = 10,dash = 1110,sep1 = 00,sep2 = 000000},由此构造三元代码字集通过允许sep2 = sep1 sep1 sep1。选择代码字集是因为它隐式地将符号与编码绑定在一起,这很方便,并且OP正在询问二进制存储。但是,为什么不能改为使用代码字集{rest = 0,on = 1}然后说“ dot = on”,“ dash = on on on”,sep0 =“ off”,sep1 =“ off off off” ,sep2 =“ off off off off off off off off”(其中sep0是信号间休止符)?
杰森C

^在这种情况下,自变量是针对在三元组上设置的二进制代码字,但使用的参数与此处给出的三元组相似且相等。也就是说,选择对一行中的多个分隔符赋予特殊含义,而对其他任何东西都不赋予特殊含义,则是三元参数的基础,但似乎也是任意的。
杰森C


28

这个答案看起来并不长。这个站点只是在列表项之间留了很多间距!更新:其实它已经相当长了...

摩尔斯电码不是“正式的”二进制,三元,四元,五进制,甚至不是57进制(如果我没有做错的话)。在没有上下文的情况下争论哪一个是无效的。它是由来定义它的五个它是根据您的应用程序,并为您的具体情况的编码要求。为此,每种符号集的大小各有利弊,在做出决定之前应考虑自己的情况。

作为基础,国际摩尔斯电码标准M.1677第2节将计时定义为:

2信号的间距和长度
2.1破折号等于三个点。
2.2形成相同字母的信号之间的间隔等于一个点。
2.3两个字母之间的间距等于三个点。
2.4两个单词之间的间隔等于七个点。

请注意,这仅定义了计时,例如,破折号并不意味着与三个点相同,而是长度相同。时间的基本单位是一个点。


二元

如果愿意,我们可以选择二进制。正如您所说的那样,可以用“严格二进制”来表示摩尔斯电码-作者的方法是将数字分配给“点”和“破折号”。这种方法行不通,我认为作者没有对摩尔斯电码的牢固掌握。但是,有另一种有效的方法。如果选择二进制,则本质上表示信号是高电平还是低电平,每个符号占用单个点延长的时间片。请注意,这也是您引用的“二进制代码列表”页面上描述的方法。

还可以选择其他二进制编码(例如Bob Jarvis的答案),但会增加解码回可听莫尔斯电码的难度(例如,不能无状态地解码Bob的编码,例如,折衷方案是提供较短的编码序列)。

符号:

  • 低,关等(0)
  • 高,上等(1)

编码示例:

  • 信号分离器:0
  • 字母分隔符:000
  • 分词器:0000000
  • 三点数:10101
  • 三横线:11101110111
  • 单词“儿子”:101010001110111011100011101
  • 短语“是”:10100010101000000010111

优点:

  • 最小符号集大小
  • 使用典型的数字逻辑轻松管理
  • 易于解码成可听的摩尔斯电码(假定未完成验证);无状态解码,不需要存储有关符号时序的信息(每个符号的长度相同)。

缺点:

  • 长编码。
  • 无效编码的机会很多。
  • 各个符号的含义(0,1)取决于上下文。


三元

通过这种选择,我们将字母和单词的间距定义为休止符,而信号间距是隐式的(尽管您可以选择在信号之间要求点长休止符,如果更适合您的话)。

符号:

  • 点长休息(0)
  • 点(1)
  • 短跑(2)

编码示例:

  • 字母分隔符:000
  • 分词器:0000000
  • 三点数:111
  • 三横线:222
  • 单词“儿子”:11100022200021
  • 短语“是”:11000111000000012

优点:

  • 小符号集大小。
  • 不再需要信号分离器。
  • 编码长度比二进制短。
  • 删除一些无效的编码(例如,不再有二进制选择的0110)。

缺点:

  • 仍然很长的编码。
  • 对于无效编码,还有许多可能性,尤其是其余的可能性。
  • 不能无状态解码除非您选择在信号之间放置明确的点长休息。
  • 信号分隔符是隐式的除非您选择在信号之间放置明确的点长休止符。
  • 一些单独的符号含义(0)取决于上下文。


第四纪

符号:

  • 字母分隔符(0)
  • 分词器(1)
  • 点(2)
  • 短跑(3)

编码示例:

  • 三点数:222
  • 三横线:333
  • 单词“儿子”:2220333032
  • 短语“是”:220222123

优点:

  • 编码长度很短。
  • 减少了无效编码的可能性。
  • 符号在语义上是准确的。
  • 可以说,它更具人类可读性。

缺点:

  • 大符号集大小。
  • 无法无状态解码。
  • 信号分隔符是隐式的。


五进制

维基百科列表的直接解释。请注意,这与二进制选择非常相似,不同之处在于二进制0或1的各种有效组合都有自己的符号。

符号:

  • 信号分离器(0)
  • 信分隔符(1)
  • 分词器(2)
  • 点(3)
  • 短跑(4)

编码示例:

  • 三点数:30303
  • 三横线:40404
  • 单词“儿子”:303031404041403
  • 短语“是”:3031303032304

优点(与四元相比):

  • 可以无状态解码。
  • 唯一,直接,简洁地表示标准第2节中提到的五个对象的符号集大小:“点”(所有定时都相对于此),“破折号”,“信号之间的间隔”,“信号之间的间隔”两个字母”,“两个单词之间的空格”。

缺点(相比四元):

  • 无效编码的可能性更高。
  • 在不增加额外信息的情况下增加了编码长度(权衡是简化解码)。
  • 不像二进制选择那样容易解码,因为每个符号的时间长度不同,并且这种关联必须保持在某个位置。


57元:

包括在内是为了完整性。

符号:

  • 26个字母
  • 10个数字
  • 20个标点符号和其他符号
  • 分词(空格)

编码示例:

  • 单词“儿子”: son
  • 短语“是”: is a

优点:

  • 最短编码
  • 可读
  • 无效的编码是不可能的。

缺点:

  • 最大符号集
  • 难以解码成莫尔斯电码;维护每个符号的摩尔斯电码输出序列表所必需的,以及检测单词边界和相邻字母以确定在何处插入各种其余部分所必需的。
  • 不可能在不添加新符号的情况下扩展到摩尔斯电码规范之外(权衡是为了避免使用无效编码)。
  • 信号和字母分隔符是隐式的。

终止

对于作为符号流存储在设备上,如果需要这样做,值得注意的是M.1677定义了消息和传输终止序列。从第二部分:

5每个电报均应以交叉信号(。–。–。)终止
。6传输的结束应由交叉信号(。–。–。)表示,其后是发送信号K(–。–。)的邀请
7工作结束应由发送最后电报的电台指示。正确的指示是工作信号结束(。。–。–)

不幸的是,该标准没有能力区分序列中的字符串“ + K”(电报结尾发送邀请)。但是,工作结束是唯一的。如果要存储摩尔斯电码,则必须选择如何指示存储序列的结尾。

例如,如果要存储整个对话并使用二进制符号集,则可以合理地认为工作结束是序列结束指示符,表示为唯一位序列101010111010111。您需要考虑类型决定之前要存储的数据(例如,消息片段,整个消息,整个对话)以及存储介质为您提供的功能(例如,消息长度前缀)。我想您可以定义自己的序列结束指示器。无论如何,这些都是基础存储的问题,这里有太多的可能性。根据您的情况,选择实际上取决于您。


无法无状态解码:这些编码需要保持某种状态才能解码为可听的摩尔斯电码。它们都要求“如果前面的符号是点/破折号,而当前符号是点/破折号,则插入信号分隔符”。尽管可以尝试“欺骗”并自动将信号分隔符附加到所有符号,同时将单词分隔符减少到5个休止符,将字母分隔符减少到1个,M.1677 afaict并未明确禁止连续的单词分隔符,这会打破这种混淆。

信号分离器是隐式的:这是直接关系到上面的注释,但更多的语义为导向。这些编码在其符号中具有隐式信号分隔符。也就是说,“ zzz”直观上是三个单独的z,无论在编码本身中是什么符号,边界都是“ ggy带的”。考虑描述“连续三个点”;直观上,我们将其表示为三个独立的点,但如果不暗示分隔符,则可以认为它与破折号没有区别。只有Wikipedia风格的二进制和五进制(或带有显式信号分隔符选项的三进制)表示形式才能消除此处的所有歧义和“快捷方式”,根据情况的不同,它们可能具有很大的价值。出于这个原因,对五进制选择有一个强烈的争论。


TL; DR:

如您所见,每种方法都有优点和缺点,您可以根据自己的需要决定如何处理它。没有正确的答案。您可能会争辩说,一个总体上比另一个更合适,但是这些论点会归结为学问偏好,因为没有上下文,就没有正确的答案。

现在,所有这些,就我个人而言,五进制的选择是摩尔斯电码本身对我而言最“正确”的表示(最初我赞成四元)。它是提供以下所有功能的唯一选择:

  • 上下文无关的符号(符号本身包含有关其含义的所有信息,而无需检查相邻的符号)。
  • 表示M.1667中定义的所有原语。
  • 分隔符(信号,字母,单词)没有用符号或底层编码来暗示(这很重要,如果我写的话{ dot, dot, dash },这些,是重要的并且易于忽略)。

但是,所有人都有很强的理由。与编码有关的论点也适用于莫尔斯本身的处理。目前尚无100%的具体答案,但无疑可以成为与您的朋友在酒吧辩论的一个好话题。

。。。–。–


1
请移动任何进一步的谈话chat.stackexchange.com/rooms/21638/...
漫步逻辑

1
评论不作进一步讨论;此对话已转移至聊天
拉斐尔

您不断在参数中引用无状态解码。在编码理论中,在卷积码中很少使用状态,卷积码是纠错码家族。这完全是题外话,因为莫尔斯电码除了纠错之外什么都不是。实际上,它甚至无法检测到一点点的错误,更不用说纠正它们了。您将各种任意代码视为莫尔斯电码的一种形式,但它们并没有带来任何理解。为什么要介绍他们?不需要状态,即同态编码,似乎是最低要求。您会错过有趣的编码。cc @KorayTugay
boubou 2015年

@babou无状态解码参数?
Koray Tugay,2015年

@babou我不介意有几个偏离主题的观点。当然,符号集是任意的。这正是我要回答的重点。同样,在二进制前缀代码参数顶部设置的三进制字也是任意的。乍看之下,但从根本上讲,您可以随意选择将自变量基于具有两个字母的字母(0和1)的代码字集。这是一个任意选择,因为赋予“ sep sep sep”特殊含义但不对“ unit 1”赋予特殊含义的选择是任意的。您可以很容易地说“破折号”是“点圆点”,并主张二进制而不是三进制。
杰森C

5

尽管我对此有最初的想法,但事实证明,可以以允许一个相当精确的答案的方式将这个问题形式化(对几个定义问题进行模运算)。答案是3或4,即三元或四元。群众讨好“从2到57的一切”答案是正确的,只有在有人要求您表征阿贝尔族的情况下,您才告诉他它们是集合。

让我们从查看摩尔斯电码的物理编码开始。这实际上是B ASK,即二进制幅度偏移键控,这只是一种精心设计的方式,可以说存在两个物理(电/光等)幅度级别供我们编码消息。因此,直接的问题是:这是否意味着答案是摩尔斯电码是二进制的?好吧,它只是以一种非信息性的方式是二进制的,从某种意义上说,通过电线发送的二进制开/关信号既不直接对应于线也不是点。在这种模糊的对应关系下,我们甚至可以发送ASCII码(使用直接的,明显的位编码)并将其称为“摩尔斯”和/或“二进制”。对于任何霍夫曼码(而不是ASCII)也是如此。

Mc:MTTTT{0,1}c

TTTTT有任何不同的术语,其中任何映射都是代码,但是可以唯一解释的是这样,并缩写为UD代码。在这里,我只是后面的术语。稍后您还会看到为什么我说“理想”。)

cTTT

TT

just-dotjust-lineunit-spaceletter-spaceword-spaceunit-spacejust-dotjust-line0just-dotjust-line

  • dit= just-dot unit-space= 10并且
  • dah= just-line unit-space= 1110。

所以这是季摩尔斯电码:ditdahletter-spaceword-space。下一个观察结果是word-space可以近似(甚至假设为)2 letter-spaces,即六个零。因此,如何获得三进制码字集?作为这一推理的参考,请参见例如[1] [2]

T={10,1110,000}{10,1110,000,07}010=0307=0703因此存在非唯一的因式分解。尽管从理论上讲这是一个问题,但是由于人类的“节拍器”无论如何都很难测量很长的静默,因此实际上并没有实际的问题,因此基本上(人类)认为任何超过一定长度的静默都属于某种word-space类型。

00000T1420T0

ditdahletter-spaceletter-spacejust-linejust-dotunit-space0ditdah000

您也可以使用trit方法,假设a dahditand letter-space与trits [3]相等,则可以计算熵,例如,“ e”需要2个trits,而“ y”需要5个trit。如果您关心每个符号以行上的真实BASK Morse编码实际传输的代价是多少,那么抽象的Trit方法就不太有用。对于后者,您需要深入了解3(或4)个符号的实际位长,这被视为自动机中的过渡。例如,字母“ e”需要5位进行编码(如dit letter-space),而字母“ y”则需要17位(三个dahs,一个dit和a letter-space)。这种思路可以追溯到香农(请参阅第3-4页)。可以找到更多详细信息在Blahut的“信息理论与编码”一书中,例如,他使用英语中字母出现的(无条件)概率计算出了摩尔斯电码的“每个源输出字母的平均9.296个信令时间单位”。对于一个稍微不同的展览(由动物学家!),您可以看一下JP Hailman的作品。他得出的平均值(10.2)是不同的,因为他假设英文字母的概率略有不同,但是他的分析在概念上是相同的。

总结一下:您可以对摩尔斯电码有几种看法,但是有些人在讲任何有趣的事情方面比其他人更有成果。我不了解使用“五进制”视图进行的任何分析,并且为了使该模型不能简化为四个符号,您必须对在实际的摩尔斯条件下不存在的单位空间的出现做出一些假设,例如您可以有两个但不一定是三个相邻的单位空间(这是无效的莫尔斯电码)。三元视图使您可以快速分析独特的可解码性。最深刻/最有成果的观点是看到3个或4个符号实际上由不相等的位数表示,就像它们在真实的摩尔斯电码中一样(| dit| = 2,| dah| = 4,| letter-space| = 3和|word-space| = 6或7); 在这个低层次上,将三元/四元符号视为自动机的过渡仍然很有见地。

至于为什么维基百科对此感到厌恶……在某些主题上确实如此。他们在http://en.wikipedia.org/wiki/Coding_theory上发表的主要文章也不是我建议阅读的内容。除了您提到的(Petzold)书没有由信息理论专家撰写之外,我不能说太多。Petzold仅在以下意义上是正确的:如果摩尔斯电码消息仅包含一个字母,您可以合理地说它们是某种二进制代码。但是,如果您想发送单词,则需要一个字母分隔符,否则,这将是可怕的,而不是UD,以至于不切实际。


letter-spaceletter-spaceditdahletter-spaceT={10,1110,00}。这也意味着(例如)“ e”的大小仅为4位,而不是5位。


请移动任何进一步的谈话chat.stackexchange.com/rooms/21638/...
漫步逻辑

评论不作进一步讨论;此对话已转移至聊天
拉斐尔

-1

最初,莫尔斯电码原本是打算在纸上写标记,但是电报操作员很快就能够“读取”设备的喀哒声。此版本的摩尔斯(美国或“陆地”摩尔斯)具有三个“标记”元素,即点,破折号和长破折号。

上个世纪,通过无线电传输对国际摩尔斯的使用,通常是通过手工(在电报键上)进行编码,然后通过听接收器发出的蜂鸣声通过耳朵进行解码。熟练的操作员比不熟练的操作员能收到更好的收益,并且某些人可能会产生比其他人更容易理解的代码。据说一个好的发射器操作员“拳头不错”。一个无能的运算符称为LID。(关于“盖”的起源,我认为这是美国摩尔斯公司的一个常见错误,即为DD,daaahh,dit dit,dah dit dit发送LID而不是dah dit dit,dah dit dit发送LID -请参阅以下参考资料:https://english.stackexchange.com/questions/31818/how-did-the-word-lid-come-to-mean-poor-operator-in-the-context-of-telegraph。)

因此得出结论,将莫尔斯电码“编码”为二进制格式取决于目的,因此是否要保留“拳头好”与“拳头差”的质量。一串通断开关是否要与时钟匹配,并针对信号各部分的相位或持续时间方面的困难进行“校正”?还是要以足以保留随机或令人困惑的变化的速率采样,以备日后检查或取悦?


1
抱歉,这如何回答问题?
Koray Tugay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.