在使用VHF和HF调制解调器的一年后,我又回到了讲话编码。这对我来说有点令人生畏,因为语音编码是R& D,这往往是非常开放的;没有明确的结果可以工作几个月。相比之下,调制解调器工作是直接前锋的工程,我经常获得“有东西工作”的积极反馈。
所以我正在尝试将语音编码项目的时间盒到几天。这是一个非常个人挑战,因为只有这么多的变量和途径。在切线上休息并观看几个月的通行证很容易!
在这个特殊的项目中,我正在查看编解码器2 700c向量量化器(VQ),并探索在频谱边缘处更加固有的高通量和低通滤波的方法。广泛的目标是以给定的比特率提高语音质量,或者支持相同的语音质量的较低比特率。我定位在600位/ s范围内的比特率,以及质量范围的下端(通信质量语音)。
众所周知,最重要的言语信息在300到3000 Hz之间。在该范围之外的能量使语音听起来更好,但没有能力很多。模拟模式,如SSB通过限制语音的频带利用这一点,使得发射机电源仅用于打扫信息中的窄带宽中的信息。
通过数字语音,RF带宽与解码语音的带宽无直接相关联。例如,Freedv 700D使用大约1100 Hz的RF带宽,但解码的语音具有覆盖大部分0到4000 Hz范围的能量。
编解码器2编码并定期发送语音频谱。除了编码可懂度所需的频谱部分的部件,它还必须编码其他特征,例如高通,低通滚动声卡中的麦克风和模拟滤波器。这些功能不会携带任何可懂度,但是消耗位以对其进行编码。当你有28位/框架时 - 每一个都很重要!
事实证明,来自不同语音源的语音频谱中的一些Wild的变化位于0-300Hz和3000-4000Hz区域,例如不同的高通或用于特定麦克风或声卡的低通滤波。这可能会扰乱编解码器2量子,例如编解码器2。它可能会降低特定的低通滤波器响应的位 - 降低感知重要的300-3000 Hz信息的质量。
所以我已经原样为刚刚使用300-3000 Hz范围内的信息来定量传染媒介量化器(VQ)来量化语音频谱。然而,VQ接受了全部范围的培训,因此它使用该全范围来合成语音,希望恢复一些扩展频谱。 VQ之前还有一个限制器,以减少帧的动态范围。
以下是使用NewAMP1两个阶段VQ处理的一些样本,以及新子集VQ。与NewAMP1算法一样,它适用于K = 20熔融间距幅度样本的载体。语音编解码器仅被部分量子化(10ms帧,原始相位,未表示的间距),因此它在真实世界完全量化的编解码器中听起来更糟。 “Newamp1”算法用于编解码器2 700c [1](并在Freedv 700c / d / e中使用),并使用22位/帧(以40ms帧速率为550位/ s)。子集VQ仅使用12位帧(以40ms帧速率为300位/秒)。
有一些样本,NewAMP1声音越响亮 - 这可能是由于在限制动态范围的子集算法中的增益限制器阶段。似乎还具有更高的频率响应,NewAMP1,指示子集不是恢复我希望的高频语音能量。两者都非常可理解,并且可以接受通信质量言论。
除了低比特率,样本和目标结果都显示了Subset VQ在参考Newamp1旁边的OK。我发现大约9dB * DB光谱失真为我的(低通信质量)用例提供了可接受的结果。
我尝试在3400 Hz以上添加一个人工低通滤波器到几个输入样本,以模拟不同麦克风可能发生的情况。
低通滤波的输入样本似乎正常工作,它们声音与使用原始源(这项工作的目标之一)相当类似的样本:
我很惊讶单一阶段的VQ工作很好,只需12位/框架。它还编码平均帧能量和光谱形状(我在Newamp1中使用单独的标量定器进行帧能)。从VQ理论的角度来看,这是完全的,但有时由于单级VQ的存储/ CPU要求等实际问题而无法实现。
尝试更多的样本,并将这项工作推到完全量化的语音编解码器。 看到它表现得很好,单一阶段是有趣的,看起来它是否有多个阶段更好。 单级VQ使其他技巧(例如非FEC技术)使VQ稳健地使VQ稳健性,例如用位错误对VQ索引[2]或神经网络样式训练进行排序。 [1]编解码器2 700c [2]编解码器2以450位/ s。 另一种单个VQ编解码器2模式,可以使用类似方法生成高频信息。 [3]编解码器2 700C均衡器部分2.先前处理类似问题的方法,在这种情况下,语音在击中满频带VQ之前均衡。 [4]本GitHub PR中的脚本Train_Sub_Quant.sh用于执行本帖子中记录的实验。