文号
950337
阅读
291
回复
0
收藏
1
本文在AI协助下创作,作者声明AI的作用仅限于局部修饰性、辅助性工作,文章内容的严肃性由作者负责。
基于神经网络深度学习的实时CW莫尔斯码解码技术探索
2026/06/01
IP:贵州


 

基于神经网络深度学习的实时CW莫尔斯码解码技术探索

BG8NJW BG8NTC  |  2026年6月


引言

莫尔斯码(Morse Code)作为最早的数字硬编码技术,通常以CW(等幅电报)作为调制方式。至今仍在业余无线电、航海和应急通信中广泛使用。在业余无线电的圈子,多数HAM都默认以掌握CW通信技术作为区分新老HAM的标志,CW拍发容易学,但听抄训练非常费时费力,多数人不是望而却步就是半途而废浅尝辄止,我就是其中之一,拍发很溜,抄听拉跨,我的好友BG8NTC老师还患突发性耳聋,要继续练习CW已无可能。在AI和深度学习技术爆炸的今天,语音语义识别都能做到如此牛逼,我想,单纯解码个CW音频应该不是难事,其实只需要模型能在噪声中“听懂点-划-字符间隔-单词间隔”就行了,虽然在资深HAM眼中利用电子技术实现解码抄听有点不入流,但起码也提供了过瘾的机会,也能持续激发人耳抄听练习的兴趣。说干就干,借助AI工具拓宽知识边界后,经过一周的迭代和训练,果真搞成了雏形,供各位HAM交流探讨。一些图表用AI生成的,有点丑懒得调整将就看了。

先看解码的实测录像,用的解码音频源是国内大神BH5ECE徐老师与日本台JQ2JNQ完整的CW通联录像,用虚拟声卡环回到解码器进行实时解码,除个别字符和空格等解码异常外,准确率超过98%,徐老师的录像原始地址:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

 

真实通联解码测试.mp4 点击下载

我曾经做过很多版本的CW电子化解码器,从LM567音频锁相环,到单片机DSP窄带滤波维特比估算等算法解码,在面对真实通信场景下的解码效果都不理想。究其根本,传统解码器基于简单的DSP算法,采用固定阈值的音调检测,在理想信噪比下效果良好,但对真实短波信道中的噪声、干扰台、频率漂移和码速变化等因素鲁棒性不足。这些年,端到端的深度学习架构在语音识别领域取得了显著进展,其中Conformer等混合架构展现出的特征提取能力,为CW解码提供了新的技术路径。

本贴的项目主要是将深度学习推理与信号处理技术紧密结合。重点阐述音频预处理各环节的设计动机、模型架构的选型依据,以及实时流式推理的关键设计决策。

1 从波形到频谱:音频的数字化表示

1.1 短时傅里叶变换与频谱图

计算机采集的原始音频是时域波形,即声压随时间的变化曲线。对于CW解码任务,时域波形并非最优的模型输入:同一频率的信号,音量不同时波形幅度差异巨大,叠加噪声后波形更加混乱。而在频域表示中,特定频率的能量分布具有更好的稳定性和可分离性——700 Hz的CW信号在频谱上始终出现在700 Hz附近,不受音量幅度影响。

短时傅里叶变换(STFT)是将时域波形转换为时频表示的标准方法。其原理是对音频加窗后分段做离散傅里叶变换,得到每个时间段的频率分布。将所有时间段的结果按时间轴排列,即得到"时间-频率-能量"三维的频谱图,业余无线电中常见的瀑布图就是其一种可视化形式。

1.2 频谱参数的选择依据

采样率选择16kHz,由奈奎斯特采样定理决定:采样率需为待分析最高频率的两倍以上。CW信号关注的频率范围为500-900 Hz,8kHz的采样率足以覆盖,同时为后续处理留出充足的频率分辨空间,较低的采样率和FFT点数是为了便于后续移植到算力紧张的嵌入式平台。

FFT窗口长度N_FFT=1024,决定了频率分辨率为16000/1024=15.625 Hz。这意味着FFT输出的频率轴是离散的,每个频率bin占据15.625 Hz的带宽。后文将详述这一离散分辨率带来的问题及解决方案。

帧移(hop length)选择160个样本,即每10毫秒产生一帧频谱数据,每秒100帧。这一参数的选择基于CW信号的时间特征:莫尔斯码中最短的"点"约60毫秒,10毫秒的帧移保证一个点被采样为6帧以上,既能充分描述点划边界,又避免产生过多冗余帧。

2 CW信号频率检测:通断评分算法

2.1 传统FFT峰值检测的局限性

在干净信道中,通过查找频谱峰值即可定位CW信号频率。但真实短波环境中,这一方法存在严重缺陷:邻台干扰的载波往往比目标CW信号更强,在频谱上表现为更高的峰值;大气噪声和电气干扰会抬高频谱底层;而CW信号本身的频率也会随时间缓慢漂移。因此,简单的峰值检测无法可靠地从复杂频谱中定位目标信号。具体表现就是在信号跟踪时,如果一段时间没有CW信号,跟踪点会在噪声上漂移。

2.2 基于变异系数的通断评分

CW信号的核心时域特征是"OOK"的键控模式,而干扰载波是持续的,噪声是随机波动的。利用这一差异,本系统采用了"通断评分"算法来实现噪声中的信号检测。

算法流程如下:首先对输入音频计算STFT频谱,沿时间轴对各频率bin的能量求和,得到频域能量分布E(f)。然后对每个频率bin,计算其时域能量的变异系数(CV,即标准差/均值)和平均能量(E_avg)。最终评分公式为:

score(f) = CV(f) × E_avg(f)^0.15

该评分的设计逻辑在于:变异系数反映信号的通断特征,CW信号因为时开时关而具有较高的CV,稳态载波的CV接近0,随机噪声的能量很低。E^0.15的0.15次幂起到动态范围压缩的作用,避免评分被少数强信号主导。三类信号的评分特征:

信号类型

CV

E_avg

评分特征

CW信号

高

中-高

CV×E^0.15得分最高

稳态载波

低(≈0)

高

CV接近0,被排除

随机噪声

中

低

E很低,被排除

image.jpg 

图1:通断评分算法流程。CV反映信号的时域波动程度,E_avg反映信号强度,两者乘积可有效分离CW信号与干扰。

3 子频bin插值:突破FFT分辨率限制

3.1 频率bin跳动问题

FFT的频率输出是离散的,相邻bin的间距为15.625 Hz。当实际信号频率落在两个整数bin之间时(例如708 Hz介于703.125 Hz和718.75 Hz之间),取最近整数bin会引入近似误差。更严重的是,当信号频率缓慢漂移时,取整数bin的策略会导致频率取值在相邻bin之间跳动,使得模型输入分布发生突变,降低解码稳定性。

3.2 分数bin线性插值

解决方案是允许bin索引为小数,在相邻整数bin之间进行线性插值。具体而言,对于目标频率f,计算其对应的分数bin索引cbin = f × N_FFT / SAMPLE_RATE,然后以cbin为中心提取N_BINS=14个bin的特征,每个输出bin的值由相邻整数bin按分数偏移加权平均得到。

该方法将有效频率分辨率从15.625 Hz提升至约5 Hz,计算量仅为每个输出点一次乘加运算,但显著消除了频率漂移时的bin跳动现象,保证模型输入的平滑过渡。

image.jpg 

图2:子频bin线性插值示意。分数bin索引使得频谱提取不再受限于整数bin位置,实现平滑的频率跟踪。

4 PCEN:自适应频谱归一化

4.1 传统对数变换的不足

从频谱中提取的窄带特征,其能量动态范围可达数个数量级。传统的处理方式是取对数,压缩动态范围。但对数变换是静态的——它不会根据当前环境噪声水平调整增益,在噪声环境变化时归一化效果会退化。

4.2 PCEN的工作原理

PCEN(Per-Channel Energy Normalization,每通道能量归一化)是一种可训练的自适应前端归一化方法。其核心思想是用指数移动平均(EMA)跟踪每个频率通道的背景能量,将当前帧能量与背景能量的比值作为归一化基础,再经过幂压缩将动态范围压缩到稳定的输出范围。

与对数变换的关键区别:PCEN的归一化基准是动态的——它随背景能量的变化而自适应调整。在高噪声环境下,背景能量估计升高,自动压低增益;在低噪声环境下,背景能量估计较低,保留更多微弱信号细节。更重要的是,PCEN的参数(平滑系数、偏移量、压缩指数)均为可训练参数,由模型在训练过程中自行学习最优值,无需人工调参。

5 模型架构:Conformer-CTC

5.1 为什么选择Conformer

CW解码任务对模型提出了两个看似矛盾的需求:既需要局部的精确时间建模(精确区分点划边界),又需要全局的上下文理解(识别字母/单词间隔)。纯卷积网络擅长局部特征提取但感受野有限,纯自注意力机制能捕捉全局依赖但对局部细节不够敏感。Conformer通过将卷积模块和自注意力模块串联,使模型同时具备两种能力。

5.2 网络结构

本系统采用6层Conformer编码器,每层包含以下组件:

组件

功能与设计意图

前馈模块(FFN)

初步特征变换,扩展因子2,半步残差连接

多头自注意力

4头,相对位置编码,捕捉全局时序依赖

卷积模块

因果卷积,核大小15,深度可分离+GLU,提取局部时序特征

前馈模块(FFN)

二次特征细化,扩展因子2,半步残差连接

 

其中因果卷积的选择尤为关键:因果卷积只看当前时间步及之前的输入,不看未来帧,这是实时流式解码的必要条件——实时场景下未来帧尚不存在,模型不能依赖未来信息做判断。

5.3 CTC训练目标

连接时序分类(CTC)是一种无需逐帧标注的序列学习方法。对于CW解码,训练数据只需提供音频对应的文字序列,而不需标注每个字符的精确时间位置。CTC通过引入空白标记和重复合并机制,允许模型自行学习音频帧与字符之间的对齐关系。推理时采用贪心解码:对每帧取argmax得到最可能字符,合并连续相同字符后去除空白标记,得到最终文本。

image.jpg 

图3:系统整体架构。音频经过STFT频谱提取、子频bin插值、PCEN归一化、Conformer编码、CTC解码五个阶段。

6 有状态流式推理

6.1 流式解码的挑战

实时监听场景要求系统增量式处理连续音频流,而非等待完整音频后再解码。分块处理的核心问题是块边界效应:卷积操作在块边界处缺少历史上文,注意力机制无法看到前块的信息,导致解码质量在块边界降低。

6.2 状态传递机制

本系统通过在连续块之间传递以下四类状态,实现与全文件解码等价的流式输出,目前单块长度3秒,也是模拟人耳吵听的“压码稳抄”技术,听一两个单词后再记录:

状态类型

形状

作用

PCEN缓存

1×1×2×14

背景能量估计的跨块连续性

卷积缓存

1×128×50

因果卷积历史输入,保证卷积输出连续

注意力KV缓存

1×4×T×32

保存历史键值对,使新块能利用历史上下文

位置计数器

每层一个

位置编码跨块连续递增

 

关键约束:流式数据块的帧数必须是CHUNK_SIZE(40帧)的整数倍。这一约束避免了填充帧引入的分布偏移,确保流式解码与全文件解码的输出一致性。

image.jpg 

图4:有状态流式解码流水线。音频源源不断流入,通过分块处理和状态传递实现连续解码。

7 频率同步机制

7.1 频率漂移的影响

短波信号的频率并非严格恒定,老式电台的振荡器温飘、电源电压波动和多普勒效应等因素均会导致频率缓慢变化。如果解码器始终使用初始检测频率提取频谱特征,几分钟后频率偏差可能达到数十赫兹,导致频谱提取中心偏移,解码质量下降。

7.2 双层同步策略

本系统采用前后端协同的双层频率同步策略:

 

前端快速跟踪:

前端快速跟踪:前端每秒运行一次通断评分算法,将检测到的频率随PCM数据发送给后端。后端通过_update_freq方法仅更新频谱提取的中心频率参数(peak_bin、cbin),不重置模型状态、PCEN或logits。这样的轻量级更新保证了频率跟踪的实时性,同时不丢失模型的累积时序上下文。2 Hz的更新阈值避免了EMA平滑引起的无效更新。

后端自动校验:当累积8秒音频且未收到前端频率更新时,后端独立运行完整的find_cw_freq算法进行频率校验。若偏差超过10 Hz则自动纠正。这一机制为前端未能正确锁定频率的情况提供了安全保障。

8 模型训练

8.1 训练数据生成

深度学习需要大量带标注的训练数据。由于难以获取大规模标注好的真实CW音频,本系统采用软件模拟方式生成训练数据。训练分为粗调V1和精调V2两个步骤。V1模型的训练集包含约3000段模拟CW音频,时长7-15秒,并注入以下干扰因素以提高模型的泛化能力:

这里放几个训练样本,大家可以听听,还是大体上模拟了真实通联场景的。

cw_000031.mp333.02KB立即下载

cw_000032.mp338.40KB立即下载

cw_000033.mp339.35KB立即下载

cw_000034.mp337.24KB立即下载

cw_000035.mp338.08KB立即下载

这个是训练用的标签jsonl文件:

attachment iconmetadata.txt337.42KBTXT2次下载


干扰因素

参数范围

模拟目标

主台信噪比

-10~+3dB

模拟强噪声环境

邻台干扰

-6~-3 dB

模拟临台的干扰

字符内频偏

±25 Hz

模拟发射端频率不稳定

衰落效应

30%–70%

模拟电离层变化导致的信号强度波动

发报停顿

40%概率, 0.5-2s

模拟发报者的思考间隙

码速范围

15-30 WPM

覆盖常见的业余无线电报文码速

侧音频范围

400-900 Hz

覆盖常见CW音调频率窗口

8.2 V2模型的训练收敛过程

V2模型基于已训练好的基础模型进行2000个样本的微调(fine-tune),采用较小的学习率(1e-4)和频率抖动增强(±10 Hz)策略。微调的优势在于利用基础模型已学到的通用特征表示,在新场景上快速收敛。训练结果如下:

轮次

训练损失

验证CER

阶段特征

0

0.062

0.04%

初始微调,基础模型已较好

1

0.035

0.03%

快速改进阶段

3-5

0.030→0.016

0.02%→0.01%

损失半衰减期

11

0.008

0.00%

基本完全收敛

20-29

0.003-0.007

0.00%

微调收尾,进一步细化

 

训练显示了典型的微调收敛特征:由于基础模型已具备良好的特征提取能力,第0轮验证CER即达0.04%,第11轮后基本完全收敛。这表明模拟训练数据的质量能够支撑模型的有效学习,同时验证了基础模型的迁移学习价值。这里在后面几轮次的训练中,CER直接搞到了0,这是验证集与训练集未分离导致的,可能出现了过拟合,后续会改进。

9 局限性与展望

慢码速解码:模型在15 WPM下解码效果较差,原因在于慢码速下单个划的持续时间较长,模型倾向于将其解读为多个重复字符。增加慢码速样本的训练比例或引入显式时长建模可能改善此问题。

低频段麦克风响应:测试中使用的Logi C270网络摄像头麦克风在500 Hz以下响应不足,导致450 Hz的CW信号在声学测试中无法解码。这属于硬件限制,模型本身并非无法处理低频信号。

多信号并发解码:当前系统的多频率候选机制可列出多个候选频率,但不支持同时解码多个信号。未来可引入分离技术以应对拥挤频段。

语言模型集成:当前采用CTC贪心解码,仅取每帧最可能字符而不考虑语言层面的约束。引入浅层RNN语言模型或n-gram模型进行重评分,可进一步降低错误率,尤其对业余无线电Q简语和操作符号效果显著。

10 下一步

一是抓取更多的真实通联录音,继续进行微调训练,完善模型权重。优化解码路径上的算法,降低对处理器算力的依赖。

二是将此模型部署到RK3588等嵌入式环境中,做成小型化的解码器实体。

[ 修改于5个月1天前 - 2026/06/01 17:57:55 ]
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的