01 // System Architecture
CPFSK/MSK در لبهی باند صوتی روی رپیتر و دستگاه FM آنالوگ
دستگاههای FM آنالوگ (مثل Baofeng UV-5R) و رپیترها صدا را در باند 300–3000 Hz عبور میدهند. مودمهای کلاسیک مثل Bell 202 (1200/2200 Hz) درست وسط حساسترین ناحیهی شنوایی کار میکنند و صدای جیغمانند دارند. SHADOW-MSK تُنها را به لبهی بالای باند میبرد (پیشفرض: Mark 2650 / Space 2950 هرتز) و با فاز پیوسته مدوله میکند: φ[n] = φ[n−1] + 2π·f[n]/Fs.
MSK واقعی یعنی h = (fSpace − fMark) / baud = 0.5. در 600 baud این یعنی فاصلهی ۳۰۰ هرتز. گزینهی قدیمی 2650/2800 در 600 baud فقط h=0.25 دارد: MSK نیست، پهنای باند کمتری میگیرد ولی در شبیهسازیهای ما حدود ۳ تا ۴ dB نسبت به h=0.5 به نویز حساستر بود. پلههای فرکانس با یک boxcar به طول ¼ سمبل نرم میشوند و برست با رمپ کسینوسی ۵ms شروع و تمام میشود.
زنجیرهی پردازش:
TX: متن UTF-8 → Len+Flags+Payload+CRC16 → RS → Preamble/Sync/Postamble → CPFSK 48kHz × شیب پیشتأکید × سطح خروجی
RX: میکروفون/AUX → ریسمپل به 48k → میکس به باند پایه → LPF مرتبه ۴ → دیسکریمیناتور FM arg(z[n]·z*[n−1]) → جمع لغزان یکسمبلی → همبستگی ۹۶ بیتی Preamble+Sync → حذف bias → RS (پروفایل خودکار) → CRC
نکته: مترهای Goertzel و طیف فقط برای نمایشاند؛ رمزگشایی واقعی با دیسکریمیناتور FM انجام میشود، چون با فاصلهی ۱۵۰–۳۰۰ هرتز و سمبل ۱٫۶۷ms فیلتر Goertzel یکسمبلی دو تُن را بهخوبی جدا نمیکند (تفکیک فرکانسی ≈ 600 Hz).
02 // Frame Specification
ساختار برست و کدگذاری Reed-Solomon روی GF(2⁸)
هر ارسال یک برست مستقل است و نیازی به handshake ندارد. در 600 baud هر بیت ۱٫۶۶۷ ms است (۸۰ نمونه در 48 kHz). فریم استاندارد ۴۹۶ بیت است: 0.827 ثانیه.
۱. Preamble (64 bit / 8 B)0xAA ×8 • AGC و قفل کلاک
۲. Sync (32 bit / 4 B)0x1ACFFC1D (CCSDS ASM)
۳. Len+Flags (8 bit)b0–5: Len | b6: ReqACK | b7: IsACK
۴. Payload (۲۹ یا ۴۵ بایت)UTF-8، با صفر تا پر میشود
۵. CRC-16 (16 bit)CCITT: poly 0x1021, init 0xFFFF
۶. RS Parity (۱۶ یا ۸ بایت)GF(2⁸) poly 0x11D • اصلاح t بایت
۷. Postamble (16 bit)0x5555 • محافظت از پریتی هنگام رمپ پایین
| پروفایل | k / پریتی | پیلود | اصلاح | بیت کل | @600 Bd | @1200 Bd |
| RS(48,32) | 32 / 16 | 29 B | 8 B | 496 | 0.827 s | 0.413 s |
| RS(64,48) | 48 / 16 | 45 B | 8 B | 624 | 1.040 s | 0.520 s |
| RS(40,32) | 32 / 8 | 29 B | 4 B | 432 | 0.720 s | 0.360 s |
گیرنده پروفایل را از روی خود جریان بیت تشخیص میدهد: همهی طول کدوردها را امتحان میکند و فقط جوابی را میپذیرد که هم RS و هم CRC را بگذراند.
RS(64,32) (۳۲ بایت پریتی، اصلاح ۱۶ بایت) برای حالتهای کند و متوسط است؛ پیلود همان ۲۹ بایت.