01信号压缩
一、为什么进行信号压缩?
对声音信号进行压缩,并不是对信号整体进行衰减, 而只是对于其中幅度超过某些阈值的部分进行衰减。 这样就可以防止由人耳朵的“遮蔽”效应,使得小的音乐信号无法听清。
▲ 图1.1.1 信号没有被压缩之前的波形
经过压缩之后,音乐中各种乐器动态范围比较接近,听起来音乐的层次更加丰富。
▲ 图1.1.2 信号被压缩后的波形
二、信号压缩参数
下图所示信号压缩四个主要参数。 上面是输入待压缩音频信号。 下面是压缩后输出音频信号。 虚线表示信号压缩的阈值,所有超过这个阈值的信号 在输出中它们都被进行了压缩。不过它们幅值仍然超过了阈值。 为什么呢?是因为规定了压缩的比率 。即对超过阈值信号进行多大比率的压缩。 通过修改这个比率,可以改变信号超出阈值后所剩余的幅值。 调整比率滑块上下移动,可以看到输出信号最大幅度的变化。当比率趋于无穷大时,输出信号就被阈值严格限制。如果比率趋于1比1,则信号实际上没有被压缩。
▲ 图1.2.1 信号压缩的参数
信号压缩的第二个参数是启动时间参数,它表示在信号幅度超过阈值之后多长时间开始对信号进行压缩。 启动时间越小,信号被压缩越快速。 启动时间越大,信号被压缩越慢。在启动时间内的信号保留原来的幅度。
最后一个压缩参数是释放时间参数。它的含义恰好与启动时间相反。表明信号回落到阈值以下之后多长时间停止信号压缩。 当释放时间很小时,信号幅度降低到阈值以下之后,就立即停止了压缩。 当释放时间增加时,信号回落阈值以下之后,幅度仍然被按相同比率压缩。 这就是信号压缩的四个参数,分别是压缩阈值、压缩比率、启动时间、释放时间。
三、信号压缩硬件电路
1、系统框图
下面讨论一下使用硬件电路实现信号压缩的方法。 首先需要一个能够控制输入信号幅度的电路,它根据输入的控制电压改变输出信号的幅度。 第二部分电路用于检测输出信号的幅度。由于信号是一个快速变化信号,不能够直接使用信号的瞬态幅值代表信号的变化范围。 电路第三部分是对比输出信号幅值与给定阈值电压,给出信号超出阈值的大小。 最后将幅度比较输出信号连接到第一个电路控制信号输入端口,用于控制输出信号的幅度。 这就形成了一个反馈控制电路系统。
▲ 图1.3.1 信号压缩硬件电路
通过这种反馈硬件电路, 完成对输入信号进行幅值压缩。 下面从音量控制电路开始分别介绍这三个硬件电路实现方案。
2、音量控制电路
实现音量控制电路的一种方法为VCA控制电路, 即电压控制放大倍数电路。 这里给出了利用二极管实现的VCA的电路。 电路核心功能是由这六个串联的二极管 以及输入100k欧姆电阻完成的。 根据电路设计,施加在串联二极管上下两端的电压极性相反,幅度相等。 输入信号通过100k电阻输入到二极管中间, 如果它的幅值没有超过二极管上下两端控制的导通电压, 输出信号与输入信号相等。 如果二极管上下偏置电压使得二极管导通,那么它的中间节点的电压就维持在0V附近, 输出信号的幅值就变为0V。 这是因为通过100k欧姆信号电流非常微弱,远小于流过二极管的电流。所以输出信号就由二极管中点电压决定。因此越多的电流流过二极管,输出信号的幅度就越小。
▲ 图1.4.1 音量控制电路
电路中由四个运放组成的外围电路是来支持二极管电路功能的。 首先输入信号经过电阻分压,幅度降低到串联二极管导通电压范围之内。经过运放跟随接到串联二极管中点。 电压跟随可以将分压电路与后级电路隔离。 最上面运放是将控制电压信号进行跟随,避免电路对前一级电路影响。下面运放是反相电路,产生二极管下面对称偏置电压信号。 上面运放输出的1k欧姆电阻是限制流过二极管电流。 最右边运放是对二极管中点信号进行放大,补偿前面分压电阻对信号的衰减, 使得信号的输出幅值与输入相同。 这里设计信号衰减和放大的倍数为8,可以使得中间信号幅度不要过低,否则会降低电路的信噪比。 中间选择六个二极管串联,也是保证信号不失真的动态范围, 避免过小受到噪声影响。 通过控制CV输入电压,可以控制输出信号的幅度。
下面通过在面包板上搭建的电路测试一下VCA的功能。 改变控制电压,从0V增加到3V,可以看到输出信号的幅值逐步降低到0。
▲ 图1.4.2 VCA电路的测试效果
3、信号幅度检测电路
下面讨论一下信号幅度检测电路。它输出反映信号外包络线的幅值信号。 对于一个声音信号, 似乎它的上下幅度比较容易确定。 信号中心为0V,信号在0V上下波动。 如果确定任意时刻的幅度, 似乎只要将信号最大值求出即可。 但是如何将信号沿是时间轴拉宽,可以看到信号出现上下剧烈的波动。 因此为了需要获得信号的峰值,需要使用二极管峰值检波电路。 二极管峰值检波电路原理很简单,当输入信号超过二极管导通电压时, 输出信号便会给滤波电容充电,直到与输入信号峰值相同。 当输入信号降低, 二极管截止。电容上的电压便会通过电阻放电,进而输出电压也降低了。 二极管峰值检波电路输出信号就会随着输入信号的幅度变化而变化。
▲ 图1.5.1 峰值检波电路
检波电路中电阻和电容的乘积,是电路的时间常数。经过实验测试,时间常数选择100ms比较符合音乐信号幅度检测。这里给出了电路中的RC取值。 通过面包板上搭建电路进行测试。示波器上黄色信号为输入信号, 蓝色信号是输入信号幅值信号。 可以看出电路的输出信号与期望值还是有很大的差异。 对于小的信号,电路输出为0。这主要是受到二极管导通电压的影响。 对于二极管检波电路来说,输入电压小于0.3V时,它的输出为0。 使用运放与二极管组成一个理想检波电路,便可以解决这个问题。
▲ 图1.5.2 普通二极管检波电路输出信号
这里展示了利用理想二极管检波电路给出的结果。可以看到小信号对应的幅值非常不错了。 对于幅度检波电路先介绍到这里。
4、阈值比较电路
阈值比较电路是判断输入信号的幅度是否高于给定的阈值电压, 并给出高出电压的大小。 这个功能可以通过一个简单的减法电路来实现。比如输入5V信号,设定阈值为4V, 那么它的输出信号就应该为1V。 输出正电压,表示信号幅度超过阈值电压。输出负电压则表示信号幅度小于阈值。它的绝对值则表示两者之差。
▲ 图1.6.1 阈值比较电路
这是一个标准的减法运放电路。 通过一个电位器设定压缩阈值电压。 通过上面串联20k电路,可以限定阈值电压最高为6V。
▲ 图1.6.2 阈值电压检测电路
这是在面包板上搭建电路的测试信号, 其中蓝色波形就是阈值比较电路输出信号。 它的幅值大于0, 表示信号幅度超过了设定电压阈值。 小于0, 表示信号幅度小于设定的阈值电压。
▲ 图1.6.3 面包板测试电路输出信号
5、完整电路
下面将三个电路按照电路框图连接起来,就形成了最终的电路。 这里给出了信号压缩电路的完整电路图。
▲ 图1.3.9 完整的信号压缩电路图
如果输入信号的幅度不超过阈值电压,那么串联二极管基本上就截止, 输出信号幅度基本上没有改变。 这是整个电路测试结果。蓝色信号为输入阈值电压。随着它降低,输出信号的幅值也降低。 可以看到信号的输出峰值和阈值之间存在一个恒定的差值。 这个恒定的差值还是来自于二极管导通电压的影响。只有当输入电压和阈值电压的差值超过了二极管的导通电压,输出电压才能够最终稳定在 一个固定的值。
▲ 图1.3.10 电路测试结果
为了解决这个问题,可以借鉴峰值检波电路中理想检波器的方案。 在控制电压跟随器电路中,将三个相同的二极管串联施加在反馈电路中。 这样就可以在输入电压刚刚超过0V时,输出电压就可以让三个二极管导通了,从而克服了二极管导通电压所带来的影响。 使用三个而不是六个二极管,是因为下面的运放反相放大器还提供了相同负电压施加在串联二极管下端。
▲ 图1.3.11 音量控制电路的改进
为了避免输入电压小于零时造成跟随放大器输出饱和负电压, 对三个二极管反向并联一个二极管,可以使得控制电压不小于-0.7V。 测试改进后的电路,可以看到输出信号峰值与设定阈值电压基本上相同了。
▲ 图1.3.12 电路改进后的输出信号
四、压缩参数
通过在CV信号前增加一个电压衰减电路,可以控制压缩比率。 电路中通过一个电位器来对CV信号进行衰减。 实际测试可以看到,当电位器调整之后,可以改变信号超过阈值的比例大小。当电位器调整到0,实际上电路就不在进行压缩了。
▲ 图1.4.1 电路中增加压缩比率电位器
通过对峰值检波电路中电阻阻值的改变,可以调整压缩电路释放时间参数。 通过实际测试可以看到检波电路的时间常数对于信号幅度检波衰减速度的影响,从而影响到整个压缩电路释放时间参数。 在检波电路中增加一个串联电阻,可以改变启动时间参数。 将增加的电阻放在运放反馈回路中,可以使得启动时间更加精确。 启动时间与设定电位器 呈现线性关系。 通过实际电路测试,验证了电路的功能。
▲ 图1.4.2 改变启动时间和释放时间电路
这里给出了整个音频压缩硬件电路原理图。 搭建实际电路测试可以验证它可以对多种输入信号工作良好。 增加一个开关,可以根据实际音乐特性确定是否进行信号压缩。
▲ 图1.4.3 音频信号压缩电路
总 结
本文讨论了对于音频信号进行压缩硬件实现的方案。 设计并优化了电路设计。 通过实际测试验证了电路的有效性。