1 整体设计方案
莫尔斯码的原理是以长短信号及间隔的不同组合代表数字、字母等字符。训练器以MSP430单片机为核心处理携带此信息的电键信号,如图1所示。
训练器设计了两种训练方式:发报训练和收报训练。
l.1 发报训练
发报训练是指报务人员根据指示的一组报文拍发,手电键敲击的信号由训练器采集、处理并识别出莫尔斯码,在数码管上显示或通过TUSB3410芯片提供的USB接口传至电脑上位机软件。
在发报训练时,分别使用高、低电平表示间隔和点划。这样拍发出的电键信号实际上就是一组时长不等的高、低电平组合,如图2所示。
图2中td,th,tm,tz分别表示点码、划码、码间隔、字间隔信号的时长。
用单片机的I/O口对整形后的电键信号进行不间断采样,根据高、低电平持续时间,通过识别算法解析出码符号。同时,在电键信号的控制下给出频率为500 Hz的方波作为发报监听音送往耳机。
1.2 收报训练
收报训练是指训练器在电脑的控制下发出莫尔斯码对应的电键音,报务人员通过耳机或喇叭监听并同时记录报文。
在收报训练时,将TUSB3410传来的报码实时翻译为点、划和间隔码,并在此信号的控制下发出500 Hz单音。
2 电键信号预处理电路
电键信号的预处理电路如图3所示。
设计中,用一个上拉电阻将电键开关跳线J4的一脚拉至高电平,另一脚接地。这样,在发报训练中,当电键抬起时,输出高电平,表示间隔信号;当电键被按下时,输出低电平,表示点划信号。为了消除高低电平交替过程中可能出现的毛刺,消除抖动,用CD4011芯片中的两级与非门(U6A和U6B)对此信号进行整形处理,此时来自MSP430 P3.1脚的KEY_CTL控制信号为应高电平。在4脚输出的信号连接到MSP430的P3.0脚,利用定时器A进行周期为1 ms的查询,以获取各信号的时长,再通过译码算法译出字符。电键信号的拍发过程中还需要提供电键音反馈给操作者。同样利用定时器在每次查询的同时对P3.2脚取反,能够得到500 Hz的方波,提供给CD4011的8脚。利用经过U6A一次取反后的电键信号(3脚)作为输出使能,控制与非门U6C的开启和关闭,保证只有在按下电键开关时才输出电键音。电键音通过LM386芯片放大后,由耳机或喇叭输出。
收报训练时,电键是一直抬起的,而KEY_CTL信号受MSP430的控制。当MSP430解析出点划或间隔信号时,使KEY_CTL相应的拉低或拉高,从而使KEY_SND电键音同步输出或断开。
3 码识别算法的设计
3.1 算法难点分析
莫尔斯码中,点码时长td、划码时长th之比一般为1:3,码间隔tm、字间隔tz、词间隔tc之比通常为1:3:5。人工拍发的摩尔斯码信号,由于报务人员熟练程度和使用习惯的不同,码速和各信号实际时长都相差很大,比例也不可能非常标准,在拍发过程中还会不断变化,因此,算法对信号时长阈值的选取要因人而异,在运行中自动调整适应。以往的算法要么采取固定时长阈值的方法,牺牲了适应性,如绝对比较法;要么采取固定修正因子的方法牺牲了初期的识别率,如冈瑟算法,难以取得识别速度、识别准确度和适应性之间的平衡。
3.2 判定阈值基准值的选取
电键刚开始拍发时程序不知晓报务人员的情况,因此必须选取合适的判定阈值基准值,以保证此时识别的准确性。按照一般的拍发速度和规定,选择点码时长基准值td=50 ms,划码时长基准值th=3td=150 ms,点划码的判定阈值Tdh=(td+th)/2=2td=100 ms,码间隔时长基准值tm=50 ms,字间隔时长基准值tz=3tm=150 ms,码、字间隔的判定阈值Tmz=(tm+tz)/2=2tm=100 ms。
3.3 码识别方法
莫尔斯码中的字符由一系列点、划信号的组合惟一表示。算法中采用改进的查表法来进行莫尔斯码的译码。设计一个定长表,将莫尔斯码放入表项值中。由于莫尔斯码中长码、短码的长度不一,为了方便比较为每项预留16 b,用10表示点码,用11表示划码,剩余用OO补齐,如图4所示。