FreeDV 700E和压缩

2020-12-28 21:46:49

FreeDV 700D围绕OFDM调制解调器[6]和强大的LDPC代码构建,并于2018年中期发布。从那时起,我们的实际经验表明,它在快速衰落的信道中苦苦挣扎。令我惊讶的是,较早的FreeDV 700C模式实际上在快速衰落的频道上效果更好。令人惊讶的是,700C没有任何FEC,而是使用简单的发射分集方案-信号以两个不同的频率发送两次。

因此,我决定开发具有以下功能的新FreeDV 700E波形[8]:

通过增加导频符号速率来处理快速衰落的能力,以及FEC(对于静态崩溃,干扰和清除随机误码有用)。

使用较短的帧(80毫秒),而不是700D的160毫秒帧。这将减少延迟并加快同步速度。

更快的导频符号速率将意味着700E可以更好地处理频率偏移以及快速衰落。

将循环前缀从2ms增加到6ms,使调制解调器能够处理长达6ms的多径延迟扩展。

RF带宽比700D宽,可以帮助减轻频率选择性衰落。如果频谱的一部分被切掉,我们可以使用FEC从频谱的其他部分恢复数据。另一方面,较窄的信号对某些干扰更鲁棒,并且使用的频谱更少。

压缩OFDM波形,以增加给定峰值功率的平均功率(从而提高接收到的SNR)。

在低SNR性能与快速衰落的信道性能之间进行权衡。较高的导频符号速率和较长的循环前缀意味着数据符号可使用的能量更少,因此低SNR性能将不及700D。

它使用相同的编解码器2 700C语音编解码器,因此当SNR高时,语音质量将与700C和D相同。

在2020年期间,我们对OFDM调制解调器和FreeDV API进行了重构,以简化实施新的调制解调器波形的过程。这确实有帮助–我仅用了一周的时间就设计,模拟并发布了FreeDV 700E模式。 FreeDV 1.5.0的开发版本已在全球范围内使用。

我的基准测试表明700C / D / E在中等衰减信道(1Hz多普勒/ 2ms扩展)上等效。当衰落速度高达2Hz时,700D会掉落,但700C / E的性能会很好。在极快衰落(4Hz / 4ms)时,700E会更好,因为700C会停止工作。 700D在慢衰落信道(1Hz多普勒/ 2ms和更慢)上以较低的SNR更好地工作。

第二项创新是压缩700C / D / E波形,以显着提高平均功率(比FreeDV 1.4.3大约高6dB)。请小心调整Tx驱动器,尤其是启用“工具”“选项”“剪切”。它会非常困难地驱动您的PA。我已经在75W PEP发射器中管理了40W RMS。确保您的发射器可以长时间承受高平均功率。

我还一直在针对压缩SSB进行测试,因为它抗衰落能力非常强,因此很难击败。然而700E具有快速衰落的良好性能,并且与SNR有所不同的是,SSB变得无噪声。在相同的等效峰值功率下,当压缩后的SSB为-5dB SNR且听觉上有些困难时,700D表现良好。

为了在低信噪比下将FreeDV与SSB进行“从头到尾”的比较,我需要SSB压缩器软件,而不是我必须在(虚拟)工作台上运行。因此,我使用一些在线知识[1] [2]开发了一种语音压缩器。事实证明,[2]中的“希尔伯特快船”与我压缩OFDM信号以改善其PAPR的方式非常相似。这对我很有吸引力–在SSB和FreeDV上使用相同的压缩算法。

希尔伯特变压器接收“真实”语音信号,并将其转换为“复杂”信号。它是相同的信号,但是现在用同相和正交信号或矢量围绕原点旋转来表示。事实证明,与限制输入语音信号相比,通过限制矢量的幅度,可以在压缩方面做得更好。任何削波都倾向于在频率上扩展信号,因此我们在输出端设有一个SSB滤波器以限制带宽。好的压缩器可以将SSB的PAPR降低到大约6dB,而我的7-8dB则不是太差劲。

正如您在此图中所看到的(在低SNR通道中)以及以下示例所示,它肯定会对嘈杂的语音有所影响:

这是一些模拟样本。它们都被归一化为相同的峰值功率,并且所有波形(SSB和FreeDV)都被压缩。噪声功率N以dB为单位,但是存在一些任意缩放(出于历史原因)。 N越大,意味着噪声越小。对于给定的噪声功率N,SNR会有所不同,因为不同的波形具有不同的峰均功率比。我采用的惯例是比较相同(峰值功率)/(噪声功率)比率的信号。这与现实世界的发射机相匹配-我们需要在给定的PEP(峰值功率)下尽最大的努力。因此,下面的想法是比较噪声功率N和信道类型相同的样本,因为已知峰值功率是恒定的。 AWGN信道只是普通噪声,MPP是1Hz多普勒,延迟扩展为2ms。 MPD为2Hz多普勒,延迟扩展为4ms。

这是在MPP通道中SNR为8dB的模拟的无线700E调制解调器信号700E的示例。实际上,它的工作频率高达4 Hz多普勒和6ms延迟扩展。听起来像不明飞行物着陆。

使用数字技术,当您处于淡入淡出状态时,您就是淡入淡出!你失去了那段话语。短的FEC代码(少于两次衰落持续时间)不会对您有太大帮助。由于等待时间(这是PTT语音),我们无法延长代码长度。叹。

这就解释了为什么700C(没有FEC)表现得如此出色–我们在深度衰减(无论如何FEC破裂)期间会丢失语音,但随着多普勒旋转并在“反衰落”中听起来不错,它会“挂起”。语音编解码器本身就对百分之几的BER都很鲁棒,这很有帮助。

无论速度有多快,模拟SSB几乎都不会衰减。开发在“快速衰落”信道中“挂起”的调制解调器需要大量的工作。

模拟SSB随着SNR的降低而缓慢降低,但随着SNR的提高而缓慢提高。高信噪比时仍然很吵。 DSP降噪可以提供帮助。

让我们看一下压缩的效果。这是我的频谱分析仪在零跨度模式下的屏幕截图。 FT-817由两个波形驱动,显示功率随时间变化。黄色是先前未压缩的700D波形,紫色是最新的经过压缩的700D。您可以真正感受到平均功率有多高。在我的收音机中,我从5-10W RMS跳升到40WRMS。

何塞,LU5DKI向我发送了一个波形文件样本,其中包含他在阿根廷和新西兰之间的12,500公里路径上“穿越模式”的信息。 SSB位于2:30标记:

何塞的TK-80收音机已有40年的历史,没有用于SSB的任何压缩功能。

FreeDV将“通过”的无线广播噪声衰减约6dB,因此SSB的水平将低于FreeDV音频。但是,考虑到所有这些噪声,这可能是一个好主意。

某些降噪DSP可能会有所帮助,尽管它倾向于在低SNR时掉落。我没有一个方便的命令行工具。如果您愿意-这是Jose的样本。请与我们分享输出。

我对使用露天样品进行FreeDV和SSB的客观比较感兴趣。我对主观意见不太感兴趣。给我看看样品……。

我对我们最近的调制解调器波形开发尤其是压缩感到满意。开发新的波形并随着FreeDV API软件的成熟变得越来越容易也很有趣。现在,我们在各种渠道上都取得了不错的效果。学习如何使用于数字语音的调制解调器在HF频道上良好地播放。我觉得我们的SSB与FreeDV的比较也日趋成熟。

主要限制是Codec 2 700C声码器-尽管实际上可以使用,但它并不是完全HiFi。不幸的是,语音编码很难-比调制解调器难得多。与工程相比,研发投入更多,这意味着需要付出更多努力–不能保证会有有用的结果。 Anyhoo,让我们看看我能否在2021年实现低SNR的语音质量方面的进步!

[1]压缩-AB4OJ的精彩介绍。 [2] 2012-2020年DSP语音处理器实验–先进的语音处理器。 [3]使用PAPR –我从2020年初开始的最初模拟。[4] Jim Ahlstrom N2ADR在Fr​​eeDV过滤器C代码上做了一些出色的工作–对于该项目再次非常有用。谢谢吉姆! [5] HF数字语音调制解调器的第1部分和第2部分– HF调制解调器的简要介绍。 [6] Steve将OFDM调制解调器从Octave移植到C(这是我和Steve构建的OFDM调制解调器),而且情况越来越好! [7] FreeDV 700E使用Bill优良的LDPC码之一。 [8]调制解调器波形设计电子表格。

写下这些内容,以便将来剪切和粘贴以重复这些测试…。

./src/freedv_tx 700E ../raw/ve9qrp_10s.raw---clip 1 | ./src/cohpsk_ch---23 --mpp --raw_dir ../raw --Fs 8000 | sox -t .s16 -r 8000 -c 1-〜/ drowe / blog / ve9qrp_10s_700e_23_mpd_rx.wav

查看信号强度的PDF(直方图)很有趣。让我们生成一些压缩的FreeDV 700E:

./src/freedv_tx 700D ../raw/ve9qrp.raw---clip 1 | ./src/cohpsk_ch---100 --Fs 8000 --complexout> ve9qrp_700d_clip1.iq16

现在获取复数值输出信号,并绘制PDF和CDF的大小(以及时域和频谱):

八度:1> s = load_raw(" ../ build_linux / ve9qrp_700d_clip1.iq16"); s = s(1:2:end)+ j * s(2:2:end);图1);情节(摘要); S =绝对(fft(s));图(2):clf;情节(20 * log10(S));图(3); clf; [hh nn] = hist(abs(s),25,1); cdf = empirical_cdf(1:max(abs(s)),abs(s)); plotyy(nn,hh,1:max(abs(s)),cdf);

这是在裁剪之后,因此100%的样本的幅度小于16384。另请参见[3]。

使用真实的无线电进行测试时,以与被测调制解调器信号相同的PEP电平播放正弦波很有用。使用此测试(13.8VDC电源),我可以从IC-7200中获得75WRMS(和PEP):

./misc/mksine-1000 10 | ./src/cohpsk_ch-/ dev / null -100 --Fs 8000ohpsk_ch:Fs:8000 NodB:-100.00 foff:0.00 Hz衰减:0 nhfdelay:0 clip:32767.00 ssbfilt:1 complexout:0cohpsk_ch:SNR3k(dB):85.23 C / No ..:120.00cohpsk_ch:峰值....:10597.72 RMS ...:9993.49 CPAPR ....:0.51 cohpsk_ch:Nsamples .:限幅80000 .: 0.00%OutClipped:0.00%

CPAPR = 0.5dB,应该为0dB,但我认为Hilbert Transformer FIR滤波器的存储空间会充满瞬态。足够近。

通过将cohpsk_ch链接在一起,我们可以采用多种方式来构建SSB压缩器,并通过注入噪声和衰落来模拟信道: ./src/cohpsk_ch ../raw/ve9qrp_10s.raw--100 --Fs 8000 | ./src/cohpsk_ch---100 --Fs 8000-剪辑16384-增益10 | ./src/cohpsk_ch---100 --Fs 8000-剪辑16384 | ./src/cohpsk_ch---17 --raw_dir ../raw --mpd --Fs 8000 --gain 0.8 | aplay -f S16_LE cohpsk_ch:峰值...:16371.51 RMS ...:7128.40 CPAPR .....:7.22 7.2 dB的PAPR对于几个小时的工作来说是相当不错的-冷静的孩子得到6dB左右[1] [2]。