首页
社区
课程
招聘
[讨论]关于密电 " 摩尔斯码" -- roxser 版
发表于: 2009-6-2 01:23 9631

[讨论]关于密电 " 摩尔斯码" -- roxser 版

2009-6-2 01:23
9631

摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它由美国人艾尔菲德·维尔发明,当时(1835年)他正在协助萨缪尔·摩尔斯进行摩尔斯电报机的发明。
摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种:
点dot(.)
划dash(-)
点和划之间的停顿
每个字符间短的停顿(在点和划之间)
每个词之间中等的停顿
以及句子之间长的停顿

摩尔斯电码的历史

最早的摩尔斯电码是一些表示数字的点和划。数字对应单词,需要查找一本代码表才能知道每个词对应的数。用一个电键可以敲击出点、划以及中间的停顿。
虽然摩尔斯发明了电报,但他缺乏相关的专门技术。他与艾尔菲德·维尔签定了一个协议,让他帮自己制造更加实用的设备。艾尔菲德·维尔构思了一个方案,通过点、划和中间的停顿,可以让每个字符和标点符号彼此独立地发送出去。他们达成一致,同意把这种标识不同符号的方案放到摩尔斯的专利中。这就是现在我们所熟知的美式摩尔斯电码,它被用来传送了世界上第一条电报。
这种代码可以用一种音调平稳时断时续的无线电信号来传送,通常被称做“连续波”(Continuous Wave),缩写为CW。它可以是电报电线里的电子脉冲,也可以是一种机械的或视觉的信号(比如闪光)。
一般来说,任何一种能把书面字符用可变长度的信号表示的编码方式都可以称为摩尔斯电码。但现在这一术语只用来特指两种表示英语字母和符号的摩尔斯电码:美式摩尔斯电码被使用了在有线电报通信系统;今天还在使用的国际摩尔斯电码则只使用点和划(去掉了停顿)。
电报公司根据要发的信的长度收费。商业代码精心设计了五个字符组成一组的代码,做为一个单词发送。比如:BYOXO(Are you trying to crawl out of it?);LIOUY(Why do you not answer my question?);AYYLU(Not clearly coded, repeat more clearly.)。这些五个字符的简语可以用摩尔斯电码单独发送。在网络用辞中,我们也会说一些最常用的摩尔斯商用代码。现在仍然在业余无线电中使用的有Q简语和Z简语:他们最初是为报务员之间交流通信质量、频率变更、电报编号等信息服务的;还有在手提电话的讯息铃声中,厂商依然会将“SMS(...--...)”一句的摩斯密码加入,而在香港的无线电视里,自开台1967年起,每次新闻报道亦会在背景音乐中播放“NEWS TODAY”的音频。

1838年1月8日,Alfred Vail公司展示了一种使用点和划的电报码,这是摩尔斯电码前身。
作为一种信息编码标准,摩尔斯电码拥有其他编码方案无法超越的长久生命。摩尔斯电码在海事通讯中被作为国际标准一直使用到1999年。1997年,当法国海军停止使用摩尔斯电码时,发送的最后一条消息是:“所有人注意,这是我们在永远沉寂之前最后的一声呐喊!”

美式摩尔斯电码

做为一种实际上已经绝迹的电码,美式摩尔斯电码使用不太一样的点、划和独特地间隔来表示数字、字符和特殊符号。这种摩尔斯电码的设计主要是针对地面电报务员通过电报电线传输的,而非通过无线电波。
这种古老的、交错的电码是为了配合电报务员接听方式而设计的。不象现在可以从扬声器或者耳机中听到电码的音调,你只能从这些最早期的电报机的一个机械发生装置听到嗒嗒的声音,甚至是从发送电键接听:这种电键在不发送信号时被设置为被动模式,负责发声。
这些报务员大多是为铁路或以后的西联电传等服务。象那时的许多年轻人一样,十几岁的爱迪生就是这样一名话务员。

现代国际摩尔斯电码

现代国际摩尔斯电码是由 Friedrich Clemens Gerke 在1848年发明的,用在德国的汉堡(Hamburg)和库克斯港(Cuxhaven)之间的电报通信。1865年之后在少量修改之后由国际电报(International Telegraphy)大会在巴黎标准化,后来由国际电信联盟(ITU)统一定名为国际摩尔斯电码。
在今天,国际摩尔斯电码依然被使用着,虽然这几乎完全成为了业余无线电爱好者的专利。直到2003年,国际电信联盟管理着世界各地的摩尔斯电码熟练者取得业余无线电执照的工作。在一些国家,业余无线电的一些波段仍然只为发送摩尔斯电码信号而预留。
因为摩尔斯只依靠一个平稳的不变调的无线电信号,所以它的无线电通讯设备比起其它方式的更简单,并且它能在高噪声、低信号的环境中使用。同时,它只需要很窄的带宽,并且还可以帮助两个母语不同、在话务通讯时会遇到巨大困难的操作者之间进行沟通。它也是QRP中最常使用的方式。
在美国,直到1991年,为了获得联邦通信委员会(FCC)颁发的允许使用高频波段的业余无线电证书,必须通过每分钟五个单词(WPM)的摩尔斯码发送和接收测试。1999年以前,达到20WPM的熟练水平才能获得最高级别的业余无线电证书(额外类);1999年12月13日,FCC把额外类的这项要求降低到13WPM。
2003年世界无线电通信大会(WRC03,国际电信联盟主办的频率分配专门会议,两年一度)做出决定,允许各国在业余无线电执照管理中自己任选是否对摩尔斯电码进行要求。虽然在美国和加拿大还有书面上的要求,但在一些其他国家正准备彻底去除这个要求。
熟练的爱好者和军事报务员常常可以接收(抄报)40WPM以上速度的摩尔斯码。虽然传统发报电键仍有许多爱好者在使用,但半自动和全自动的电子电键在今天使用越来越广泛。计算机软件也经常被用来生成和解码摩尔斯码电波信号。

在我国电报通信中,每个汉字都有四个数字代表,组成其电文的数字是用的"短码"拍发的。"短码"不可和字码一起混合使用!业余无线电通信中不用"短码"!
数码(短码)
1: .- 2: ..- 3: ...-- 4: ....- 5: .
6: -.... 7: --. 8: -.. 9: -. 0: -

时间控制和表示方法

有两种“符号”用来表示字符:点(.)和划(-),或叫“滴”(Dit)和“答”(Dah)。点的长度决定了发报的速度,并且被当作发报时间参考。下面是时间控制的图示:

-- --- ·-· ··· · / -·-· --- -·· ·
M O R S E(空格) C O D E

这里,“-”表示划,“.”表示点。这是上面消息的准确发报时间(= 表示有信号,. 代表无信号,每个为一个点的长度):

===.===...===.===.===...=.===.=...=.=.=...=.......===.=.===.=...===.===.===
^ ^ ^ ^ ^
| 划 点 | 单词间隔
点划间隔 字符间隔

一点为一基本信号单位,一划的长度=3点的长度,在一个字母或数字内,各点、划之间的间隔应为两点的长度,字母(数字)与字母(数字)之间的间隔为7点的长度。
初学者往往被教导发送点划间隔短小、短而快的字符,并且在符号和单词之间夸大间隔时间。比较起来,这种方式更加容易学会。
熟悉摩尔斯码的人之间经常象这样说话或拼写(其中,“长音 / Dah”是发“awe”的音):

-- --- ·-· ··· · / -·-· --- -·· ·

DahDah DahDahDah DiDahDit DiDiDit Dit, DahDiDahDit DahDahDah DahDiDit Dit.

字母、数字、标点和同一符号

特殊符号(同一符号)
这是一些有特殊意义的点划组合。它们由二个字母的摩尔斯电码连成一个使用,这样可以省去正常时把它们做为两个字母发送所必须的中间间隔时间。

这些并不是真正的同一符号:

···-· (我将重新发送最后一个单词)
·· ·· (同样)
········ 错误
摩斯码对照表.

Letter Composed of Name
A  .-  ALFA
B  -...  BRAVO [ **brɑ**'v****]
C  -.-. CHARLIE
D  -..  DELTA [ 'delt**]
E  .     ECHO [ 'ek****]
F  ..-.   FOXTROT
G  --.   GOLF
H  .... HOTEL
I  ..    INDIA
J  .---   JULIETT
K  -.-   KILO
L  .-.. LIMA
M  --    MIKE
N  -.     NOVEMBER
O  ---   OSCAR
P  .--. PAPA
Q  --.-  QUEBEC
R  .-.    ROMEO
S  ...   SIERRA
T  - TANGO
U  ..-   UNIFORM
V  ...-   VICTOR
W  .--   WHISKY
X  -..- X-RAY
Y  -.--  YANKEE
Z  --.. ZULU

1   .----
2   ..---
3   ...--
4   ....-
5   .....
6   -....
7   --...
8   ---..
9   ----.
0   -----

常用缩写

<dl>
<dd>
主条目:Q简语
</dd>
</dl>
缩写和同一符号不同,缩写保留着字符中间的间隔,它们并没有被连成一个使用。

AA All after (used after question mark to request a repetition)
AB All before (similarly)
ARRL American Radio Relay League
ABT About(關於)
ADS Address(地址)
AGN Again(再一次)
ANT Antenna (天線)
BN All between
BUG Semiautomatic key
C Yes(是,好)
CBA Callbook address(呼號手冊)
CFM Confirm(確認)
CLG Calling(撥打)
CQ Calling any station(連絡任一站台)
CUL See you later(待會見)
CUZ Because(因為)
CW Continuous wave(連續波)
CX Conditions(狀況)
DE From(來自)
DX Distance (sometimes refers to long distance contact)(長程通訊)
ES And
FB Fine business (Analogous to "OK")
FCC Federal Communications Commission
FER For
FREQ Frequency(頻率)
GA Good afternoon or Go ahead (depending on context)(午安)
GE Good evening(晚安)
GM Good morning(早安)
GND Ground (ground potential)(地表)
GUD Good(好)
HI Laughter
HR Here(這裡)
HV Have(有)
LID Poor operator
MILS Milliamperes
NIL Nothing
NR Number
OB Old boy
OC Old chap
OM Old man (any male amateur radio operator is an OM)老手-男性
OO Official Observer
OP Operator(操作員)
OT Old timer(老手)
OTC Old timers club
OOTC Old old timers club
PSE Please(請)
PWR Power(功率)
QCWA Quarter Century Wireless Association
R I acknowledge or decimal point (depending on context)
RCVR Receiver(接收器)
RPT Repeat or report (depending on context)
RST Signal report format (Readability-Signal Strength-Tone)(收訊指標)
RTTY Radioteletype
RX Receive(接收)
SAE Self addressed envelope
SASE Self addressed, stamped envelope
SED Said(說)
SEZ Says
SIG Signal(訊號)
SIGS Signals
SKED Schedule(行程)
SN Soon(很快=不久將來)
SOS international distress call(緊急呼救=國際慣用)
SRI Sorry(抱歉)
STN Station(電台)
TEMP Temperature(氣溫)
TMW Tomorrow(明日)
TNX Thanks(感謝)
TU Thank you(感謝你)
TX Transmit(發射器)
U You
UR Your or you&#39;&#39;&#39;&#39;re (depending on context)
URS Yours
VY Very
WDS Words
WKD Worked
WL Will
WUD Would
WX Weather(天氣)
XMTR Transmitter(發射機)
XYL Wife(妻子)
YL Young lady (used of any female)(年輕女子)
73 Best regards(最好的祝福)
88 Love and kisses(愛與吻之告別=注意應該使用在&#39;&#39;&#39;&#39;異性&#39;&#39;&#39;&#39;之間)
99 go way(被要求離開-非友善)

用摩尔斯码交谈

要使用摩尔斯码进行明白无误的交流,只需要字母就够了。为了使交流更有效率,有很多国际上通用的模式。
这是一个连续波通讯的例子,发生在电台一(s1)和电台二(s2)之间:
s1:

CQ CQ CQ de s1 K
呼叫任何人(CQ),这是(de)s1,结束(K)。

s2:

s1 de s2 K
呼叫s1,这是s2,结束
(现在两个电台就建立通讯连接了)

s1:

SK
再见。

s2:

SK
再见。

作为一个例子,上面的电台之间并没有交谈什么内容,这只是演示一次联络的情形罢了。
一些交谈的案例:
Full Stop ( . ) .-.-.- di-DAH-di-DAH-di-DAH

Comma ( , ) --..-- DAH-DAH-di-di-DAH-DAH

Semicolon ( ; ) - .-.-. DAH-di-DAH-di-DAH-dit

Question Mark ( ? ) ..--.. di-di-DAH-DAH-di-dit

Hyphen (Dash) ( - ) - ...- DAH-di-di-di-DAH

Slash ( / ) - ..- . DAH-di-di-DAH-dit

Parenthesis ( ( ) L - .- - .- DAH-di-DAH-DAH-di-DAH
( ) ) R - .- - . DAH-di-DAH-DAH-dit

Colon ( : ) ---... DAH-DAH-DAH-di-di-dit

Quote ( " ) .-..-. di-DAH-di-di-DAH-dit

Apostrophe ( ' ) .---- . di-DAH-DAH-DAH-DAH-dit

Dollar sign ( $ ) ...-..- di-di-di-DAH-di-di-DAH

Invitation to transmit(go ahead) - .- DAH-di-DAH

Attention - .- .- DAH-di-dah-di-DAH

Error ... ..... di-di-di-di-di-di-di-dit

Wait .- ... di-DAH-di-di-dit

AR (end of message) .- .- . di-DAH-di-DAH-dit

International
distress call (SOS) .. .---.. . di-di-di-DAH-DAH-DAH-di-di-dit

Test letter (V) ...- di-di-di-DAH

Received, OK .- . di-DAH-dit

End Broadcasing . . .- .- di-di-di-DAH-di-DAH

引用:百度知道,http://utvikling.com/等


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
2
To roxser 大大~
建議內容再重新 edit 一次,有些內容看起來,無法顯示,我想應該是 HTML 語法所致。
若有引用其它出處,也請一併附上 index 。
謝謝。
2009-6-2 02:31
0
雪    币: 41
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
to rockinuk大大:
感谢rockinuk大大的指正,我晚上会重新编辑一边的。附:morse码的运行程序:

#include<iostreams.h>
#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>


void morse();
int mnu_one();
void mode_line();
void mode_file();
void mode_sett();
void mode_char();

char in;
int FREQ=700; // 700 Hz
int DOT=50; // 12 wpm
void main()
{
int choice;
while(1)
{
choice=mnu_one();
if (choice==1) mode_char();
else
if(choice==2) mode_line();
else
if(choice==3) mode_file();
else
if(choice==4) mode_sett();
else
if(choice==5) break;
}
gotoxy(25,19); cout<<"73's & Good Bye.. de VU3PRX\n\n\n";
}
/**************************** MORSE()*********************************/
void morse()
{
char code[8];
switch(toupper(in))
{
case 'A': strcpy(code,".-"); break;
case 'B': strcpy(code,"-..."); break;
case 'C': strcpy(code,"-.-."); break;
case 'D': strcpy(code,"-.."); break;
case 'E': strcpy(code,"."); break;
case 'F': strcpy(code,"..-."); break;
case 'G': strcpy(code,"--."); break;
case 'H': strcpy(code,"...."); break;
case 'I': strcpy(code,".."); break;
case 'J': strcpy(code,".---"); break;
case 'K': strcpy(code,"-.-"); break;
case 'L': strcpy(code,".-.."); break;
case 'M': strcpy(code,"--"); break;
case 'N': strcpy(code,"-."); break;
case 'O': strcpy(code,"---"); break;
case 'P': strcpy(code,".--."); break;
case 'Q': strcpy(code,"--.-"); break;
case 'R': strcpy(code,".-."); break;
case 'S': strcpy(code,"..."); break;
case 'T': strcpy(code,"-"); break;
case 'U': strcpy(code,"..-"); break;
case 'V': strcpy(code,"...-"); break;
case 'W': strcpy(code,".--"); break;
case 'X': strcpy(code,"-..-"); break;
case 'Y': strcpy(code,"-.--"); break;
case 'Z': strcpy(code,"--.."); break;
case '1': strcpy(code,".----"); break;
case '2': strcpy(code,"..---"); break;
case '3': strcpy(code,"...--"); break;
case '4': strcpy(code,"....-"); break;
case '5': strcpy(code,"....."); break;
case '6': strcpy(code,"-...."); break;
case '7': strcpy(code,"--..."); break;
case '8': strcpy(code,"---.."); break;
case '9': strcpy(code,"----."); break;
case '0': strcpy(code,"-----"); break;
case '.': strcpy(code,".-.-.-"); break;
default: cout<<endl<<"MSG-Switch::Invalid
character \"";
cout<<in<<"\""<<endl; break;
}
int len=strlen(code);
for(int i=0;i<len;i++)
{ sound(FREQ);
if(code[i]=='.') delay(DOT);
else
if(code[i]=='-') delay(3*DOT);
nosound(); delay(DOT);
}
delay(3*DOT);
}

/******************MNU_ONE()********************************************/
int mnu_one()
{
int ch;
clrscr();
gotoxy(30,7); cout<<"MORSE CODE TUTOR";
gotoxy(30,8); cout<<"~~~~~~~~~~~~~~~~";
gotoxy(33,9); cout<<"1. CHARACTER MODE";
gotoxy(33,10); cout<<"2. LINE MODE";
gotoxy(33,11); cout<<"3. FILE MODE";
gotoxy(33,12); cout<<"4. SETTINGS";
gotoxy(33,13); cout<<"5. EXIT";
gotoxy(30,15); cout<<"Enter your choice : ";
gotoxy(25,19); cout<<"A FreeWare From VU3PRX";
gotoxy(50,15); cin>>ch; return ch;
}
/***************************** MODE_LINE() ***********************/
void mode_line()
{
int flag=1;
char line[80];
clrscr();
cout<<"LINE MODE"<<endl;
cout<<"Type '*' to END sending"<<endl;
while(flag)
{
gets(line);
int len=strlen(line);
for(int i=0;i<len;i++)
{
in=line[i];
if(in==' ') { delay(6*DOT); continue; }
else if(in=='*') { flag=0; break; }
morse();
}

}
}
/**************************** MODE_FILE() ********************************/
void mode_file()
{
FILE *fp;
char fname[10];
clrscr();
cout<<"Enter file name : ";
cin>>fname;
if((fp=fopen(fname,"r"))!=NULL)
{
while((in=getc(fp))!=EOF)
{
if(in==' ') { delay(6*DOT); continue; }
morse();
}
}
else
{
char ans;
cout<<endl<<"File not found, Create New (Y/N) ?
";
cin>>ans;
if((ans=='y')||(ans=='Y'))
if((fp=fopen(fname,"w"))!=NULL)
while((ans=getchar())!='\n')
putc(ans,fp);
}

fclose(fp);
}

/************************** void mode_sett();*********************/
void mode_sett()
{
int cho;
clrscr();
cout<<"1. CHANGE FREQUENCY"<<endl;
cout<<"2. CHANGE SPEED"<<endl;
cout<<endl<<"Enter your choice : ";
cin>>cho;
if(cho==1)
{ cout<<endl<<"Current Frequency of tone is
"<<FREQ<<" Hz"<<endl;
cout<<"The valid frequency range is from 100 Hz to
4000 Hz"<<endl;
cout<<endl<<"Enter the new frequency : ";
int tmp;
cin>>tmp;
cout<<endl<<endl;
if((tmp>99)&&(tmp<4001))
{
FREQ=tmp;
cout<<"Now the Frequency is changed to "<<FREQ<<"
Hz"<<endl;
}
else cout<<"Error : Invalid frequency range";
getch();
}
if(cho==2)
{
int speed;
speed=36000/(DOT*60);
cout<<"\nCurrent speed is "<<speed<<"
Words/Minute"<<endl;
cout<<"The valid Speed is from 5 WPM to 20 WPM "<<endl;
cout<<"\n\nEnter new speed : ";
cin>>speed;
if((speed>4)&&(speed<21))
{
DOT=36000/(speed*60);
cout<<"\n\nNow the speed is "<<speed<<"
Words Per Minute";
}
else cout<<"\n\nError : Speed "<<speed<<"
WPM not allowed\n";
getch();
}
}
/*********************** MODE_CHAR() ***********************************/
void mode_char()
{
clrscr();
cout<<"CHARACTER MODE"<<endl;
cout<<"Type '*' to END sending"<<endl;
while(1)
{
in=getche();
if(in==' ') { delay(6*DOT); continue; }
else if(in=='*') break;
morse();
}


学习软件: JustLearnMorseCode.rar
上传的附件:
2009-6-2 12:30
0
雪    币: 445
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习!
2009-6-2 13:55
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
roxser版是什么意思呢?与原来的有哪些不同呢?
2009-6-2 16:17
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
6
沒有不同,我只是區分開來,比較好分辨。
到時候再把所有 Morse code 併在一起。
這樣可以讓版友可以單讀討論 Morse code,一放方面也降低有些版友佔樓的狀況。
2009-6-2 17:53
0
雪    币: 290
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
Morse有什麼應用?
我不小心學會了聽....長短音
好像國際氣象固定時間會發報..
2010-1-4 01:19
0
游客
登录 | 注册 方可回帖
返回
//