در حال بارگذاری 0%
// منو.exe
خانه رزومه بلاگ تماس سفارش
English فارسی
~/blog / technology / morse-code

کد مورس چگونه کار می‌کند؟ وقتی دو علامت برای ارتباط کافی بودند

تصور کنید سال‌ها قبل، یک خبر فوری دارید که باید به شهری در فاصله صدها کیلومتری برسد. نه اینترنتی وجود دارد، نه موبایلی، نه ماهواره‌ای و نه حتی تلفنی. یک نامه می‌تواند روزها یا هفته‌ها در راه باشد. اما یک سیم دارید که دو نقطه را به هم وصل کرده است. سؤال ساده‌ای پیش می‌آید: چطور می‌توان با همین یک سیم، یک پیام کامل فرستاد؟ جواب شگفت‌انگیز است: لازم نیست برای هر حرف یک سیم جدا داشته باشیم؛ کافی است یک قرارداد بسازیم. همین ایده ساده، یکی از مهم‌ترین جهش‌های ارتباطی تاریخ را ساخت.

# یک سیم و یک قرارداد ساده

روی آن سیم، عملاً فقط می‌توانیم دو حالت متفاوت از هم تشخیص دهیم: سیگنال کوتاه و سیگنال بلند. در نگاه اول به نظر می‌رسد دو حالت برای انتقال یک پیام کامل خیلی کم باشد. اما کافی است یک قرارداد بسازیم:
contract.txt
.  = سیگنال کوتاه  // Dot
-  = سیگنال بلند  // Dash
 
A = .-
B = -...
C = -.-.
D = -..
E = .
و ناگهان متوجه می‌شویم برای ساختن یک سیستم ارتباطی کامل، اصلاً به تعداد زیادی علامت نیاز نداریم. دو علامت کافی هستند. این ایده ساده، یکی از مهم‌ترین روش‌های ارتباط از راه دور در قرن نوزدهم را ساخت: کد مورس.

# مورس اصلاً چیست؟ کدگذاری است، نه رمزنگاری

کد مورس یک روش کدگذاری اطلاعات است؛ یعنی ما حروف و اعداد را به مجموعه‌ای از سیگنال‌های کوتاه و بلند تبدیل می‌کنیم. در مورس بین‌المللی دو عنصر اصلی داریم: نقطه . و خط -. مثلاً حرف S این است: ... و حرف O این است: ---. بنابراین عبارت معروف SOS به شکل ... --- ... نوشته می‌شود.
اما نکته مهم اینجاست: مورس رمزنگاری نیست. اگر این پیام را برای شما بفرستم — .... . .-.. .-.. --- — چیزی را مخفی نکرده‌ام. هر کسی که جدول مورس را داشته باشد می‌تواند آن را به HELLO تبدیل کند. پس مورس بیشتر شبیه Encoding است تا Encryption؛ درست مثل اینکه یک کاراکتر را با UTF-8 به چند بایت تبدیل کنیم: داده تغییر شکل می‌دهد، اما مخفی نمی‌شود.

# چرا فقط دو علامت کافی است؟ توان ریاضیِ ترکیب

برای نمایش اطلاعات، مجبور نیستیم برای هر حالت یک علامت متفاوت داشته باشیم. می‌توانیم از ترکیب چند علامت ساده استفاده کنیم. با دو حالت نقطه و خط، اگر n جایگاه داشته باشیم و در هر جایگاه دو انتخاب ممکن باشد، تعداد ترکیب‌ها می‌شود:
combinations.txt
// یک جایگاه → دو حالت:
.  -
 
// دو جایگاه → چهار حالت:
..  .-  -.  --
 
// سه جایگاه → هشت حالت:
...  ..-  .-.  .--  -..  -.-  --.  ---
 
count = 2^n
تعداد جایگاه (n) تعداد حالت‌های ممکن (2ⁿ) برای چه کافی است؟
1 2 دو حرف (مثل E و T)
2 4 چهار حرف (I، A، N، M)
3 8 هشت حرف (S، U، R، W، D، K، G، O)
4 16 بیشتر از حروف الفبا نیست، اما کافی
5 32 پوشش کامل حروف + ارقام
همین ایده، زیربنای کل دنیای دیجیتال است. کامپیوترها هم دقیقاً با همین منطق کار می‌کنند: بیت‌های 0 و 1. با 8 بیت، 256 حالت ساخته می‌شود — کافی برای تمام کاراکترهای ASCII. مورس و CPU از یک ایده مشترک تغذیه می‌کنند: ترکیب چند حالت ساده، دنیای بزرگی از معنا می‌سازد.

# چرا E فقط یک نقطه است؟ هوشمندی پنهان در جدول

اگر تمام حروف را با طول یکسان طراحی می‌کردیم، ارسال پیام می‌توانست بسیار طولانی‌تر شود. اینجا یک ایده مهم وارد می‌شود: حروف رایج‌تر، کوتاه‌تر باشند. در انگلیسی، حرف E بسیار رایج است، بنابراین فقط یک نقطه است: E = . و T که آن هم رایج است، فقط یک خط: T = -. بعد از آن حروف دیگر با ترکیب آن‌ها ساخته می‌شوند:
morse_tree.txt
              start
           /      \
        .        -
      /  \    /  \
   E   T  N   M
  / \  / \  / \  / \
I  A D K S U R W G O
اگر این ساختار را درختی ببینیم، مورس حتی جالب‌تر می‌شود: با هر نقطه یا خط، یک مرحله در این درخت حرکت می‌کنیم. پس مورس فقط یک جدول بی‌قاعده از حروف نیست؛ پشت آن یک ساختار بسیار ساده وجود دارد — ساختاری که امروز آن را با نام درخت پیشوندی (Trie) می‌شناسیم و در جست‌وجو، فشرده‌سازی و مسیریابی داده استفاده می‌شود.

# خودتان امتحان کنید؛ تبدیل‌کننده تعاملی مورس

قبل از اینکه deeper برویم، بیایید ایده را دستی لمس کنیم. در ابزار زیر می‌توانید هر متنی (فارسی یا انگلیسی) تایپ کنید و هم‌زمان معادل مورس آن را ببینید — یا برعکس، یک رشته مورس بنویسید و به متن تبدیل شود. بین حروف فاصله و بین کلمات / قرار می‌گیرد. حتی می‌توانید پیام را با صدای بوق بشنوید.
morse_converter.exe — interactive
یک آزمایش جالب: عبارت HELLO WORLD را تبدیل کنید و به خروجی دقت کنید. حالا EEEEEEE (هفت تا E) را تبدیل کنید. تفاوت طول خروجی، دقیقاً همان هوشموری «حرف رایج = کد کوتاه» است که در بخش قبل گفتیم.

# جدول کامل کد مورس؛ انگلیسی و فارسی

برای مرجع، جدول کامل حروف انگلیسی، ارقام و حروف فارسی را اینجا جمع کرده‌ایم. حروف فارسی طبق استاندارد مورس فارسی (همان مورسی که روزگاری برای تلگراف فارسی استفاده می‌شد) کد اختصاصی خودشان را دارند:
حرفمورسحرفمورسحرفمورسحرفمورس
A.-B-...C-.-.D-..
E.F..-.G--.H....
I..J.---K-.-L.-..
M--N-.O---P.--.
Q--.-R.-.S...T-
U..-V...-W.--X-..-
Y-.--Z--..0-----1.----
2..---3...--4....-5.....
6-....7--...8---..9----.
حرفمورسحرفمورسحرفمورسحرفمورس
ا.-ب-...پ.--.ت-
ث-.-.ج.---چ---.ح....
خ---د-..ذ--..ر.-.
ز--.ژ...-س...ش----
ص-..-ض..--ط..-ظ-.--
ع.-.-غ--.ف..-.ق--.-
ک-.-گ--.-ل.-..م--
ن-.و.--ه..-..ی..
نکته: به تفاوت‌ها دقت کنید — مثلاً «و» در فارسی .-- است اما V در انگلیسی ...-. هر زبان جدول مخصوص خودش را دارد و همین یعنی مورس یک «زبان» نیست؛ یک سیستم کدگذاری است که هر زبانی می‌تواند از آن استفاده کند.

# سکوت هم بخشی از پیام است؛ زمان‌بندی در مورس

فرض کنید این را بفرستیم: ..... از کجا بفهمیم این H است؟ ساده است. اما حالا فرض کنید بدون هیچ فاصله‌ای این بیاید: ......-...-..---. این دیگر HELLO است یا یک ترکیب کاملاً متفاوت؟ اینجاست که زمان و فاصله وارد سیستم می‌شوند — و این بخش شاید مهم‌تر از خود نقطه و خط باشد.
در استاندارد مورس بین‌المللی، یک نقطه یک واحد زمانی در نظر گرفته می‌شود و بقیه اجزا بر اساس آن تعریف می‌شوند:
عنصر طول استاندارد
نقطه (Dot) 1 واحد
خط (Dash) 3 واحد
فاصله بین اجزای یک حرف 1 واحد
فاصله بین دو حرف 3 واحد
فاصله بین دو کلمه 7 واحد
بنابراین ... --- ... فقط سه مجموعه نقطه و خط نیست؛ بین آن‌ها سکوت‌هایی با طول مشخص قرار دارد که خودشان اطلاعات حمل می‌کنند. در نتیجه اطلاعات مورس علاوه بر شکل سیگنال، در زمان‌بندی هم قرار دارد. سکوت، داده است.

# اگر برق قطع شود چه؟ مورس به سیم وابسته نیست

یکی از جذاب‌ترین ویژگی‌های مورس همین است: ما الزاماً به برق و سیم تلگراف نیاز نداریم. مورس فقط می‌گوید: دو حالت متفاوت را طوری تولید کن که گیرنده بتواند آن‌ها را تشخیص دهد. بنابراین می‌توانیم پیام را با صدا، نور، رادیو، چراغ یا حتی ضربه ارسال کنیم. مثلاً با چراغ‌قوه: یک چشمک کوتاه یعنی نقطه، یک نوردهی طولانی یعنی خط.
رسانه‌های ارسال مورس
  • صدا — بوق کوتاه و بلند
  • نور — چشمک چراغ یا فانوس
  • رادیو — امواج پیوسته (CW)
  • ضربه — کوبیدن روی لوله یا دیوار
  • پرچم یا حتی پلک‌زدن
چرا هنوز مهم است؟
  • در شرایط اضطراری و قطع زیرساخت کار می‌کند
  • با ساده‌ترین ابزار ممکن قابل اجراست
  • پروتکل رادیو آماتور (CW) هنوز زنده است
  • نسبت سیگنال به نویز فوق‌العاده خوبی دارد
فرض کنید بخواهیم SOS بفرستیم: ... --- ... یعنی سه چشمک کوتاه، سه نور طولانی، و دوباره سه چشمک کوتاه. همان پیام — بدون اینترنت، بدون صفحه‌نمایش، بدون حتی یک کلمه.

# داستان از کجا شروع شد؟ ۲۴ مه ۱۸۴۴

در دهه ۱۸۳۰، Samuel Morse روی ایده تلگراف الکترومغناطیسی کار می‌کرد و همراه با همکارانی از جمله Alfred Vail روی سیستم ارسال پیام با نقاط و خط‌ها کار کردند. مشکل اصلی ساده بود: چطور اطلاعاتی که روی یک سیم عبور می‌کند، در مقصد تبدیل به زبان انسان شود؟ راه‌حل، همان زنجیره‌ای بود که امروز کامپیوترها دائماً انجام می‌دهند:
1
حرف — ورودی انسانی
2
کد — تبدیل به نقطه و خط
3
سیگنال — عبور از سیم
4
کد — تشخیص نقطه و خط
حرف — خروجی انسانی
در ۲۴ مه ۱۸۴۴، مورس از واشنگتن به بالتیمور پیام معروفی فرستاد: "What hath God wrought?" — از اتاق دیوان عالی در ساختمان کنگره آمریکا به Alfred Vail در بالتیمور. برای اولین بار، اطلاعاتی که یک انسان در یک نقطه تولید کرده بود، می‌توانست به‌صورت الکتریکی و بسیار سریع‌تر از هر روش قبلی به نقطه‌ای دور منتقل شود. همان اتفاقی که بعدها در شکل‌های پیشرفته‌تری به Telegraph ← Telephone ← Radio ← Internet ← Mobile Networks ← Satellite Internet رسید.
جهش واقعی چه بود؟ قبل از تلگراف، سرعت انتقال اطلاعات محدود به سرعت حرکت یک انسان، اسب، قطار یا کشتی بود. تلگراف این زنجیره را شکست: اطلاعات می‌توانست حرکت کند، بدون اینکه انسانِ حامل آن سفر کند. پیام دیگر لازم نباید فیزیکی جابه‌جا شود؛ فقط باید به سیگنال تبدیل شود.

# از کجا بفهمیم پیام کجا تمام شده؟ درسِ فریمینگ

یکی از مشکلات جالب مورس همین است. این را ببینید: .... . .-.. .-.. --- — واضح است پنج حرف داریم و پیام HELLO است. اما اگر فاصله‌ها را حذف کنیم (......-...-..---)، عملاً اطلاعات مهمی از دست رفته است. این یعنی در یک سیستم ارتباطی، فقط خود داده مهم نیست؛ قوانین جدا کردن داده‌ها از یکدیگر هم بخشی از پروتکل هستند.
این مفهوم را امروز تقریباً همه‌جا می‌بینیم و به آن Framing می‌گویند:
سیستم اجزای قاب‌بندی
مورس Signal + Timing + Gap
بسته اینترنت (Packet) Header + Payload + Length + Checksum
فایل‌ها Start + Data + End (Delimiter)
JSON / CSV Braces / Commas / Quotes
پس می‌توان گفت مورس یکی از ساده‌ترین و قدیمی‌ترین مثال‌ها برای فهم این ایده است که: ارتباط فقط ارسال داده نیست؛ دو طرف باید روی نحوه خواندن داده هم توافق داشته باشند.

# بیایید خودمان یک مورس‌انکودر بسازیم

حالا قسمت موردعلاقه برنامه‌نویس‌ها. ابتدا جدول مورس را تعریف می‌کنیم و جدول معکوس آن را می‌سازیم:
morse_table.py — Python
MORSE = {
    "A": ".-",    "B": "-...",  "C": "-.-.",
    "D": "-..",   "E": ".",     "F": "..-.",
    # ... تا Z و 0 تا 9
}
 
REVERSE_MORSE = {
    code: char
    for char, code in MORSE.items()
}
حالا تابع تبدیل متن به مورس — بین حروف فاصله و بین کلمات / می‌گذاریم:
encode.py — Python
def encode(text):
    words = text.upper().split()
 
    return " / ".join(
        " ".join(MORSE.get(char, "?") for char in word)
        for word in words
    )
decode.py — Python
def decode(morse):
    words = morse.strip().split(" / ")
 
    return " ".join(
        "".join(
            REVERSE_MORSE.get(code, "?")
            for code in word.split()
        )
        for word in words
    )
run.py — output
text = "HELLO WORLD"
encoded = encode(text)
decoded = decode(encoded)
 
print("Original :", text)
print("Morse   :", encoded)
print("Decoded  :", decoded)
 
# Original : HELLO WORLD
# Morse   : .... . .-.. .-.. --- / .-- --- .-. .-.. -..
# Decoded  : HELLO WORLD
اتفاقی که اینجا افتاد، خیلی شبیه بسیاری از سیستم‌های واقعی کامپیوتری است: متن ورودی با Encoding به نمایش مورس تبدیل می‌شود، منتقل می‌شود، و در مقصد با Decoding دوباره به متن قابل فهم برمی‌گردد. دقیقاً همان کاری که UTF-8، Base64 و هزاران پروتکل دیگر هر روز انجام می‌دهند.

# مورس را از کامپیوتر بیرون ببریم؛ LED و آردوینو

می‌توانیم یک قدم جلوتر برویم. فرض کنید یک LED به Arduino وصل کرده‌ایم. می‌توانیم همین ایده را به نور تبدیل کنیم: نقطه یعنی LED روشن برای 100ms و خط یعنی LED روشن برای 300ms — و فاصله‌ها را هم طبق همان نسبت‌های استاندارد رعایت کنیم:
morse_led.ino — Arduino
const int LED = 13;
const int UNIT = 100// ms
 
void dot() { digitalWrite(LED, HIGH); delay(UNIT);       digitalWrite(LED, LOW); }
void dash() { digitalWrite(LED, HIGH); delay(UNIT * 3); digitalWrite(LED, LOW); }
 
// SOS: ... --- ...
dot(); dot(); dot();   delay(UNIT * 3);
dash(); dash(); dash(); delay(UNIT * 3);
dot(); dot(); dot();   delay(UNIT * 7);
و ناگهان چیزی که در قرن نوزدهم برای تلگراف استفاده می‌شد، با یک میکروکنترلر امروزی دوباره زنده می‌شود — این بار به‌جای سیم تلگراف، یک LED داریم. زنجیره هم همان است: پایتون ← مورس انکودر ← نقطه و خط ← آردوینو ← نور.

# مورس «زبان» نیست — و داستان واقعی SOS

گاهی گفته می‌شود «مورس یک زبان است»، اما از نظر فنی بهتر است بگوییم یک سیستم کدگذاری است. مورس خودش چیزی مثل فارسی، انگلیسی یا ژاپنی نیست؛ یک پل بین اطلاعات و سیگنال قابل انتقال است. اگر زبان شما انگلیسی باشد، HELLO را با جدول انگلیسی به مورس تبدیل می‌کنید؛ اگر فارسی باشد، از جدول مورس فارسی (که برای حروفی مثل چ، گ، ژ و پ کد مخصوص دارد) استفاده می‌کنید. زنجیره همیشه یکی است: Language ← Characters ← Morse Encoding ← Signal.
و اما معروف‌ترین رشته مورس تاریخ: ... --- .... نکته جالب این است که SOS مخفف هیچ عبارتی نیست؛ این الگو بیشتر به خاطر سادگی و قابل تشخیص بودنش معروف شد. سه سیگنال کوتاه، سه سیگنال بلند، سه سیگنال کوتاه — الگویی که از نظر شنیداری و بصری به‌سختی با چیز دیگری اشتباه گرفته می‌شود. این پیام در اوایل قرن بیستم به‌عنوان علامت اضطراری دریایی مورد استفاده قرار گرفت.

# از مورس تا اینترنت؛ ایده‌ای که هنوز زنده است

امروز برای فرستادن یک جمله ساده ممکن است این زنجیره طی شود: کیبورد ← سیستم‌عامل ← Encoding ← TCP/IP ← Wi-Fi/5G ← Router ← Internet ← Server ← Database. اما تقریباً دو قرن قبل، کل سیستم به این خلاصه می‌شد: حرف ← نقطه یا خط ← سیم ← سیگنال ← نقطه یا خط ← حرف. از نظر فناوری فاصله این دو دنیا بسیار زیاد است، اما از نظر ایده اصلی، یک چیز تغییر نکرده:
1
اطلاعات پیچیده — متن، صدا، تصویر
2
نمایش ساده — نقطه و خط، یا 0 و 1
3
انتقال — سیم، رادیو، فیبر
بازسازی — پیام قابل فهم در مقصد
کامپیوترها بیت دارند: 0 و 1. مورس دارد: نقطه و خط. در تمام این سیستم‌ها یک اصل مشترک وجود دارد: گیرنده و فرستنده باید روی قواعد نمایش و تفسیر اطلاعات توافق داشته باشند. مورس در ساده‌ترین شکل ممکن، همین مفهوم را نشان می‌دهد.
takeaway.txt
برای انتقال یک پیام پیچیده، همیشه به یک سیستم پیچیده نیاز نداریم؛
گاهی کافی است دو طرف دقیقاً روی معنی چند علامت ساده توافق داشته باشند.