本文首发于:行者AI
随着数字音频技术的不断发展,音乐版权问题受到重视。用于音频版权保护的技术得到越来越多的研究与关注,无声水印技术就是其中之一。同时互联网在线会议越来越受到欢迎,音频无声水印技术也可以在保证会议的保密性的同时追踪泄密源头。
由于人类听觉系统(HAS)
极为灵敏,音频感知冗余较小,水印同时满足隐蔽性和鲁棒性的困难很大,同时音频压缩算法例如MP3
因为其出色的压缩率和音质,随着网络时代的到来已经成为数字音频的主流压缩方式。然而MP3
编码有损压缩,音频经过压缩后水印信息也将被破坏,因此音频水印的研究相对于图像水印算法更具有挑战性。
本算法目的在于提供一种自适应混合域音频水印嵌入方法,在保证隐蔽性的同时,能够在相同音频信号的情况下嵌入更多的水印信息,从而在一定程度上提高音频水印的抗剪辑攻击性。
1. 基础知识
1.1 量化
将值映射在坐标系上,然后按照一个量化因子(也称之为步幅),对坐标系进行划分并假设其每一个步幅中所代表的值。水印算法中通常使用转换成二进制编码的嵌入信息,该嵌入信息的原始信息可以是图片也可以是文本等,那么假设量化因子为Δ
,0-Δ
代表0
,Δ-2Δ
代表1
,则有如图所示的量化结果。从下图中可以看出-Δ-0
代表1
,0-Δ
代表0
,Δ-2Δ
代表1
,2Δ-3Δ
代表0
,3Δ-4Δ
代表1
。
1.2 掩蔽效应
掩蔽效应是在人类听觉系统( HAS
)中存在的一种效应:短时间内能量高的将遮蔽能量低的,使得人类只能听到能量高的部分。掩蔽效应根据高低能量部分出现的情况不同分为超前掩蔽、同时掩蔽和滞后掩蔽。 超前掩蔽即后部分能量高于前部分那么只能听到后部分,反之即有滞后掩蔽;同时掩蔽即前后能量高于当前部分,那么当前部分将不会被听见而被前后的声音所掩蔽。掩蔽效应如下图所示。
1.3 MP3压缩
MP3
压缩会导致时域偏移和频域幅值变化。
音频经过MP3
有损压缩后,时域上的表现不仅仅只是幅度的变化还存在时序上的偏移。因为MP3
压缩正交重叠变化时头尾帧需要补0
,从而产生边缘效应,解码后这部分数据也加入到音频之中,即压缩后产生了时序上的偏移。
利用声音的频域掩蔽效应使量化噪音处于频域掩蔽阈值之下,去除了音频感知的冗余部分。这就会导致高频压缩后变化大,而低频变化相对较小。
1.4 DWT变换
(1) 小波转换后将得到低频的近似系数和高频的细节系数。
(2) 可以进行多次(阶)小波转换,最大阶level=log2(n)
,n
为时域采样点。
(3) 经过多阶转换后将得到level+1
个系数。
1.5 预处理
针对音频文件格式参数不同,我们统一将文件转变为44.1kHz
、立体声
位宽为16bit
的wav
文件,并将文件读取到内存转变为2
个int16
的数组。2
个int16
的数组表示左右声道、位深为16bit
,即采样点的值占用16bit
大小。
同时将要嵌入的水印信息构造为灰度图片,以增加系统的鲁棒性,此处用二进制表示水印信息。
2. 实现步骤
2.1 音频分帧
a. 嵌入单元
前面提到了为了解决MP3
压缩时间偏移的问题,采用计算每个嵌入段的能量,过滤能量低的段,这里我们将每个嵌入段称之为嵌入单元。而每个嵌入单元我们又按照长度均分为两个小区域:嵌入区和定位区。
对于DWT
,每一阶变换就会得到一个近似和细节系数。假设有一段长度为x
的信号,最大能进行的变换次数(阶)level
为:
因为低频下鲁棒性更好,因此我们采用3kHz
以下区域进行嵌入取level=4
。
为了保证嵌入的鲁棒性,参与嵌入的采样点更多,鲁棒性越好。因此设置一个常量α
代表嵌入区的扩容因子,α
可以取8,16,32
等。
我们定义一个常量值N
,用以描述每个小区域的采样点个数(长度),并称之为嵌入长度。那么一个嵌入单元的长度即为2N
,其中:
其中DWT
变换的阶为4
,因此一个嵌入单元长度设为fl
有:
如果取α
为8
,那么嵌入一个信息位需要采样点的个数为256
个,一秒音频能够嵌入172
个信息位。
嵌入区属于用来进行水印的嵌入区域,定位区域的作用是通过计算每个单元的定位区能量大小筛选出真正用来嵌入的区域和嵌入顺序,且提供嵌入强度的参考值。
b. 嵌入帧
假设水印图片长和宽分别为h
和w
,那么水印数据长度为h×w
。
根据嵌入单元的定义,一个嵌入单元长度为2N
。我们就可以计算嵌入一次水印至少需要采样点长度L
为:
又由于我们的音频采样率为fs=44100Hz
,可以计算嵌入一个完整的水印需要音频的时间t
:
对于t
和一个常量n
(本文n=10
)的余数向上取整得到一个帧的长度,他代表了需要至少多少个n
秒才能嵌入一个完整的水印信息。这样来确保一个嵌入帧拥有大于嵌入所需的单元数量进而可以存储完整的水印信息。
下面计算一帧中每一个嵌入单元中定位区的能量值。我们需要按照能量大小从高到低进行排序,考虑到幅值平方和过大,不便于计算的问题,此处能量直接使用绝对值和的方式:
设置一个能量阈值过滤掉低于阈值的嵌入单元。如果此时剩下的嵌入单元数量小于h × w
,那么说明当前帧不足以嵌入完整的水印,应该跳过该帧不作嵌入。对能量大于阈值的嵌入单元,根据能量大小,按降序排序,并选出其中h × w
个作为水印的真正的嵌入单元,这样做的原因是因为能量高的部分具有更好的鲁棒性。
c. 倒谱系数
将嵌入区和定位区的采样点分别进行小波4阶
变换后取得近似值,再对他们分别进行CCEPS
变换。将小波变换后得到的变化较大数值映射到一个小范围区间,同时由于CCEPS
两端系数波动也较大如下图所示,因此选取中间平稳部分来进行嵌入。
2.2 水印嵌入
通过上述方式,我们得到了嵌入区和定位区的DWT
近似系数在CCEPS
谱上的值,分别设为。
截取中间平稳部分,设前后截取长度为,CCEPS
系数长度为l
,可以计算两个区域CCEPS
系数的均值:
设置全局常量:嵌入强度(0-1)
为β
,取每个嵌入帧量化步长q
,则有
代表能量高的区域鲁棒性更好,所以可以适当提升量化步长来提高水印嵌入强度,反之更低的能量区域应该选择较低的量化步长来提升隐蔽性。
对嵌入区CCEPS
均值做量化,
设量化后的均值为、嵌入信号为:
嵌入前后均值比例代表着值的缩放,因此设缩放因子f
:
嵌入后的嵌入区CCEPS
系数:
对嵌入后的复倒谱系数做逆变换ICCEPS
,得到嵌入后的DWT
近似系数有:
再进行逆小波变换IDWT
,就能够得到嵌入后包含水印信息的嵌入区音频信号,而定位区不需要做变换。因此一个嵌入帧的嵌入信号
最终得到的就是进行水印嵌入后的信号值,将每个嵌入帧进行嵌入后,再将嵌入后的信号重新写入文件。这样就得到了包含水印的音频文件。
上述过程中,提到的几个常量:嵌入强度因子β
、DWT
的阶level
、扩容因子α
,它们值的大小对于算法鲁棒性和隐蔽性都有影响。
量化步长越大,鲁棒性越好,同时也会导致隐蔽性下降,因此量化步长也可以称之为品质系数。本文步长是随着定位区能量强弱而动态改变的,因此嵌入强度因子β
将直接控制嵌入后的音质。
扩容因子α
的大小影响着信号嵌入的容量、隐蔽性和鲁棒性。扩容因子α
的值越大,鲁棒性和隐蔽性越好,但同时嵌入一个信号位需要的采样点就越多。
2.3 水印提取
提取端按照上述对文件重采样得到相同采样率、位深,并进行分帧按照能量大小过滤,筛选出嵌入单元以及嵌入顺序。
从每个嵌入单元计算定位区和嵌入区的计算DWT
近似系数和CCEPS
,得到定位CCEPS
平稳部分均值,通过嵌入强度因子β
得到量化步长q
。
对嵌入区的CCEPS
平稳部分均值进行量化得到嵌入信息位,提取一帧中全部的信号即为水印的二进制数据。最后将该数据转换为的图片,即得到初始水印的灰度图。
结论
经过本文算法水印嵌入后与嵌入前的音频比较,音质几乎无影响。经过mp3
转码、重采样、裁剪、位移等方式均可获得水印图片,因此认为该算法具有较强的鲁棒性。且该算法属于盲水印,在提取水印时不需要原文件。
PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起讨论吧!