FT8 数字通信模式核心DSP算法及原理交互式解析

FT8 模式简介

FT8(Franke-Taylor 8-tone)是由诺贝尔物理学奖得主 Joe Taylor K1JT 和 Steve Franke K9AN 于2017年联合设计的弱信号数字通信模式。它采用8音调高斯频移键控(8-GFSK)调制,每个符号仅占6.25Hz音调间隔和0.16秒时长,总带宽约50Hz。凭借LDPC(174,91)前向纠错和CRC-14校验的强力组合,FT8能在-20dB信噪比下稳定解调——这意味着信号深埋在噪声之下,人耳和肉眼完全无法分辨,但解码器依然能准确还原信息。这种极致的弱信号性能彻底改变了短波通联的玩法:在太阳活动低谷、天线条件不佳的情况下,FT8让全球DX通联成为日常。15秒的QSO周期与79个符号的12.64秒传输窗口精确对齐,三段Costas同步阵列提供稳健的时频估计,使得即使存在多普勒频移和定时误差也能可靠同步。FT8堪称数字通信在效率与鲁棒性之间达到的最优雅平衡之一。
开发者 Joe Taylor K1JT / Steve Franke K9AN
常用频率 1.840, 3.573, 5.357, 7.074, 10.136, 14.074, 18.100, 21.074, 24.915, 28.074, 50.313, 144.174 MHz
参考源码 WSJT-X (SourceForge)
本页面每个步骤均使用真实的JavaScript代码进行计算,不是虚拟仿真。从消息编码到信道模拟再到解码还原,所有DSP算法均在浏览器中实时执行。

✉ 消息源输入

拼接输出
BA1AAA BD2BBB OL26
信噪比 (SNR) -10 dB
-25 dB0 dB+25 dB
载波频率 (Carrier) 1000 Hz
300 Hz1500 Hz3000 Hz
频偏 (Freq Offset) 0 Hz
-3 Hz0 Hz+3 Hz
时移 (Time Offset) 0.0 s
-1.0 s0 s+1.0 s
1
消息源拼接
等待输入
FT8 Type 1消息由三部分按顺序拼接:被叫呼号(c28) + 保留位r1 + 主叫呼号(c28) + 保留位r1 + 保留位R1 + 网格/信号报告(g15) + 类型标识i3,共77位。
拼接顺序:c28[0-27] → r1[28] → c28[29-56] → r1[57] → R1[58] → g15[59-73] → i3[74-76] = 77位。
网格地址格式:两位大写字母+两位数字(如OL26);信号报告取SNR滑条值(如-10)。
输入
被叫: BA1AAA | 主叫: BD2BBB | 网格: OL26
输出 - 拼接消息
2
Pack77 压缩编码
等待输入
Pack77压缩原理:将文本消息压缩为77位二进制。核心是pack28混合基数编码,每个呼号用28位表示。
呼号格式规则:6位字符 = 前缀(1-2位字母) + 区号(1位数字) + 后缀(1-3位字母/数字),不足6位用空格右补。
1×N格式(如K1JT、W1AW):数字在第2位,编码时左补1个空格把数字推到第3位(A3=数字),右补空格到6位→" K1JT "。
2×N格式(如BA1AAA、BD2BBB、RS1K):数字已在第3位,直接右补空格到6位→"RS1K "。
编码顺序:先计算被叫呼号的pack28值(0~261,349,575),占bit[0-27];再计算主叫呼号,占bit[29-56];最后计算g15(网格1-32400或报告32401-32430),占bit[59-73]。
字符集分层编码:A1(37字符)×A2(36字符)×A3(10字符)×A4³(27字符) = 255,091,680 < 2³°,加上NTOKENS和MAX22偏移,总范围0~261,349,575 < 2²⁸。
bit=1(蓝色) bit=0(深色)
输入 - 拼接字符串
输出 - 77位压缩码
3
CRC-14 校验附加
等待输入
CRC-14多项式 0x6757,对77位信息计算14位循环冗余校验,附加到信息位后得到91位。
编码顺序:77位原始信息 → 计算CRC-14 → 14位校验附加到末尾 → 输出91位。
bit=1(蓝色) bit=0(深色) CRC校验位(橙色)
发送顺序:从左到右 = MSB先发。
输入 - 77位压缩码
输出 - 91位(含CRC)
4
LDPC(174,91) 前向纠错编码
等待输入
LDPC(低密度奇偶校验码)原理:利用稀疏校验矩阵进行前向纠错。系统码结构:前91位为信息位(含CRC),后83位为校验位,共174位。
编码顺序:91位信息 → 与生成矩阵G相乘 → 得到83位校验位 → 拼接为174位码字。校验矩阵H满足 H·cᵀ=0。
解码使用置信传播(BP)算法:在变量节点和校验节点之间迭代传递软信息(LLR),逐步修正每个比特的可信度,最多30次迭代收敛。
bit=1(蓝色) bit=0(深色) 信息位(橙色) 校验位(绿色)
发送顺序:从左到右 = MSB先发。
输入 - 91位(含CRC)
输出 - 174位LDPC码字
5
Gray 映射(3bit → 音调)
等待输入
174位LDPC码字从左到右每3位一组,通过Gray映射表 [0,1,3,2,5,6,4,7]映射到8个音调索引(0-7)。
Gray码特性:相邻音调值只差1位(如0=000,1=001,3=011,2=010),减少相邻符号误码的比特错误数。
映射顺序:174位 → 58组×3位 → 每组查Gray表 → 58个音调(0~7)。
数据音调(蓝色)每列=1个符号,高亮行=该符号的音调索引。
输入 - 174位LDPC码
输出 - 58个音调(2D bin网格,X=时间/符号,Y=音调索引)
6
Costas 同步阵列插入
等待输入
Costas阵列原理:FT8在三个位置插入已知的伪随机同步序列[3,1,4,0,6,5,2],每段7个符号。
插入顺序:前导Costas(符号0-6) → 数据段1(7-35, 29符号) → 中间Costas(36-42) → 数据段2(43-71, 29符号) → 尾部Costas(72-78),共79符号。
Costas同步符号(红色) 数据符号(蓝色)
作用:(1) 接收端匹配已知序列实现时间和频率同步;(2) Costas差分特性使得任意频偏下仍可检测;(3) 三段插入提供分集增益,抵抗突发干扰。
输入 - 58个数据音调(2D bin)
输出 - 79个符号(方形bin网格,红色=Costas,蓝色=数据)
7
8-GFSK 调制
等待输入
8-GFSK调制(8值高斯频移键控):每个符号对应一个音调频率,载波基频由滑条设定(默认1000Hz),音调0~7分别偏移 -21.875Hz ~ +21.875Hz(间隔6.25Hz)。
调制顺序:符号0 → 符号1 → ... → 符号78,连续相位调制,相邻符号间高斯脉冲成形平滑过渡,减少频谱旁瓣。
参数:采样率12000Hz,每符号1920采样点(0.16秒),79个符号共151,680采样点(12.64秒)。
码元背景色(按音调索引着色,深浅灰交替区分码元边界)
输入 - 79符号音调序列
输出 - 调制波形 / 频谱(滚轮缩放,拖动平移)
🔍 滚轮缩放 | 拖动平移
🔍 滚轮缩放 | 拖动平移
8
短波信道模拟
等待输入
模拟短波信道,依次叠加三种失真:
(1) 频偏:载波频率偏移(模拟多普勒频移/本振误差),频偏由滑条控制,直接叠加到调制载波上;
(2) AWGN白噪声:噪声强度 σ = 10^(-SNR/20),由SNR滑条控制;
(3) 时移:信号延迟/提前到达(模拟定时误差),由时移滑条控制,正时移=信号延迟(前端补噪声),负时移=信号提前(头部截断)。
原始信号(蓝色) 信道输出(红色)
输入信号(原始)
🔍 滚轮缩放 | 拖动平移
🔍 频谱
输出信号(加噪+频偏)
🔍 滚轮缩放 | 拖动平移
🔍 频谱
带通300-3000Hz · 12kHz采样
9
Goertzel 频率检测
等待输入
Goertzel算法:针对特定频率的高效DFT计算,复杂度O(N)而非FFT的O(NlogN)。
检测顺序:符号0 → 符号1 → ... → 符号78,对每个符号的1920采样点分别计算8个音调频率(载波±21.875Hz, 间隔6.25Hz)的复数幅度,得到79×8幅度矩阵。
注意:此处使用标称载波频率(由滑条设定)检测(未校正频偏),频偏较大时检测准确率会下降,需由步骤10进行频偏校正。
信道波形(红色)热力图每列=1个符号,纵轴=8个音调,亮度=幅度。
输入 - 信道输出波形
输出 - 79×8 幅度色谱图
10
Costas 同步(时频偏估计)
等待输入
利用已知Costas序列[3,1,4,0,6,5,2],在时偏±8符号、频偏±3.5Hz范围内进行2D网格搜索,用Goertzel计算三段Costas位置在各时频偏组合下的相关峰值,确定时间偏移频率偏移
搜索顺序:粗搜(频偏步进0.25Hz) → 精搜(步进0.05Hz, 范围±0.4Hz) → 输出最优时频偏。三段Costas联合估计提高精度和抗噪能力。
时频偏估计结果将传递给步骤11,用于校正载波频率和符号位置。
误差<阈值(绿色=同步成功) 误差>阈值(红色=同步异常)
输入 - 检测幅度矩阵(同步骤9)
时频偏移坐标图
同步结果
11
Gray 逆映射 + 软判决 LLR
等待输入
使用步骤10估计的时频偏校正后,从信道信号重新检测(而非使用步骤9的结果),剔除Costas符号后得到58×8幅度矩阵,通过Gray逆映射将每个符号的8个幅度转换为3位软信息(LLR)。
处理顺序:对58个数据符号逐个处理 → 每个符号用Goertzel计算8个音调幅度 → 按Gray逆映射分3位 → 计算LLR = 0.5×log(P(bit=0)/P(bit=1))。
LLR含义 正值(蓝) → 倾向bit=0 负值(红) → 倾向bit=1 条形高度代表可靠度——|LLR|越大,判决越可信。
输入 - 58×8幅度色谱图(剔除Costas)
输出 - 174个LLR值(蓝=正/红=负,高度=可靠度)
12
LDPC BP 迭代解码
等待输入
将174个LLR软信息输入LDPC置信传播解码器,最多30次迭代。
迭代过程:初始化变量节点信息 → 校验节点更新(求外信息) → 变量节点更新(合并所有校验信息) → 校验H·cᵀ=0 → 若通过则提前终止。
收敛曲线纵轴=校验不满足的个数,应随迭代单调递减至0。若30次迭代后仍未收敛,解码失败。
输入 - 174个LLR值
来自步骤11
输出 - 收敛曲线
13
CRC 验证 + Unpack77 解压还原
等待输入
验证顺序:(1) 对解码后的91位进行CRC-14校验 → (2) 校验通过则取前77位进行Unpack77解压 → (3) 还原原始文本消息 → (4) 与发送端原始消息比对。
如果CRC校验通过且解码消息与原始输入一致,则端到端链路验证成功!从步骤1的消息输入到步骤13的消息还原,完整走通了FT8的编解码流水线。
输入 - 解码后bit流
输出 - 还原消息
本工具由 BG8NJW 借助AI开发 版权归 BG8NJW 所有。AI生成产物可能存在错误,仅供参考。