吳秋玲,曲愛妍,2,黃丹丹
(1.金陵科技學(xué)院 網(wǎng)絡(luò)安全學(xué)院,江蘇 南京 211169;2.中國人民解放軍陸軍工程大學(xué) 指揮控制工程學(xué)院,江蘇 南京 210007)
音頻數(shù)字水印技術(shù)[1-4]可分為時域和變換域兩大類[5]。變換域算法通常具有較好的魯棒性[6],其變換方法包括離散小波變換[7,8]、離散傅里葉變換[9]和離散余弦變換[10]等。經(jīng)過近二十幾年的發(fā)展,音頻水印算法的研究已出現(xiàn)較多成果,如混合域水印算法[11]、基于奇異值分解的魯棒水印算法[12]、自適應(yīng)水印算法[13]、基于量化思想的盲水印算法[14],以及基于人工智能的水印算法[15]等,但大多數(shù)算法仍然存在透明性低,難以抵御同步攻擊等不足之處。缺乏能夠準(zhǔn)確定位水印所在位置的同步機(jī)制是算法魯棒性弱的重要原因之一。同步機(jī)制的實(shí)現(xiàn)方法主要有同步標(biāo)識[16]、恒定水印[17]和自同步[18]等。此外,參數(shù)選取對算法整體性能的影響至關(guān)重要[19],如何設(shè)置算法參數(shù)已成為水印算法研究中的難點(diǎn)問題。
針對上述問題,提出一種基于卷積和抖動調(diào)制的音頻水印算法。以濁音幀中能量最大的小幀為標(biāo)記設(shè)計同步機(jī)制,運(yùn)用卷積運(yùn)算設(shè)計了一個穩(wěn)定的特征量,最后將水印以抖動調(diào)制的方式嵌入在特征量中。測試了水印嵌入頻段、量化間隔以及子頻段寬度3個關(guān)鍵參數(shù)對算法性能的影響,為算法的實(shí)際應(yīng)用提供指導(dǎo)。
濁音包含了音頻的主要信息,對濁音數(shù)據(jù)修改太多,就會導(dǎo)致音頻的聽覺質(zhì)量下降嚴(yán)重進(jìn)而影響音頻的使用價值[20]。針對音頻的這一特點(diǎn),以濁音幀中能量最大的小幀作為同步標(biāo)記,以該標(biāo)記周圍固定范圍內(nèi)的音頻數(shù)據(jù)作為承載水印的載體,設(shè)計了一種能夠自動標(biāo)識水印在音頻中所處位置的同步機(jī)制。
將待嵌入的水印處理為L1行L2列的二進(jìn)制矩陣,然后將其進(jìn)行加密獲得水印密文w(i,j), 其中1≤i≤L1,1≤j≤L2。 將原始音頻均勻分為L1段,搜索每個音頻片段中能量最大的濁音幀,將該濁音幀分為多個長度為N1的小幀,并計算每個小幀的能量。以能量最大的小幀作為同步標(biāo)記,在其周圍選擇a1+a2+1個小幀作為承載水印信息的區(qū)域。假設(shè)所選區(qū)域內(nèi)的音頻數(shù)據(jù)為xi(n), 其中1≤n≤N1(a1+a2+1), 根據(jù)同步標(biāo)記在濁音幀中的位置,水印所在區(qū)域存在如下3種情況。
(1)若同步標(biāo)記之前的小幀數(shù)量小于a1, 說明同步標(biāo)記較為靠近該濁音幀的首端,則水印區(qū)域?yàn)閺牡谝粋€小幀開始的連續(xù)a1+a2+1個小幀。
(2)若同步標(biāo)記之后的小幀數(shù)量小于a2, 說明同步標(biāo)記較為靠近該濁音幀的末端,則水印區(qū)域?yàn)槲挥谀┒说倪B續(xù)a1+a2+1個小幀。
(3)除上述兩種情況之外,則以同步標(biāo)記為基準(zhǔn),向前取a1個小幀,再向后選取a2個小幀。
離散余弦變換可在時域和頻域間對信號進(jìn)行相互轉(zhuǎn)換,且離散余弦系數(shù)具有很強(qiáng)的“能量集中”特性和良好的去相關(guān)性,在多媒體信號處理領(lǐng)域獲得廣泛應(yīng)用[15]。嵌入算法的原理框架如圖1所示。
圖1 嵌入算法原理
首先將原始音頻均勻分為L1段,使用同步機(jī)制搜索水印的可嵌入?yún)^(qū)域,然后進(jìn)行離散余弦變換、頻段劃分和特征量計算,使用均勻量化和抖動調(diào)制在每個音頻片段中嵌入L2比特水印,最后修正余弦系數(shù),并進(jìn)行離散余弦逆變換以獲得攜帶水印的攜密音頻。恒定水印是指在音頻中尋找一個具有穩(wěn)定特性的特征量,然后將水印嵌入到該特征量中來提升算法魯棒性的一種設(shè)計方法[17]。如何設(shè)計特征量是恒定水印算法的關(guān)鍵問題。卷積運(yùn)算可以看作將數(shù)字信號輸入一個線性時不變系統(tǒng)后所得的輸出信號,利用線性時不變系統(tǒng)的穩(wěn)定特性可設(shè)計一個用于承載水印的特征量,具體設(shè)計方案描述如下。
將xi(n) 進(jìn)行離散余弦變換得到系數(shù)Xi(k), 其中1≤k≤N1×(a1+a2+1)。 從第b0根譜線開始,選擇N2根譜線作為矩陣Yi的元素。從第b1根譜線開始,連續(xù)選取L2個子頻段Z(i,j), 每個頻段含有N3根譜線。特征量CF(i,j)由Yi和Z(i,j)構(gòu)成,如式(1)所示,其中?表示對Yi和Z(i,j)進(jìn)行卷積運(yùn)算,Mean() 表示對括號內(nèi)的數(shù)據(jù)取平均值
(1)
對特征量CF(i,j)依次進(jìn)行均勻量化和抖動調(diào)制可實(shí)現(xiàn)水印嵌入。以量化間隔δ對CF(i,j)進(jìn)行均勻量化得到量化值CFQ(i,j), 如式(2)所示,其中round() 表示對括號內(nèi)的數(shù)據(jù)進(jìn)行圓整
(2)
將水印密文w(i,j) 進(jìn)行雙極性調(diào)制獲得w′(i,j), 如式(3)所示
(3)
對特征量CFQ(i,j)進(jìn)行抖動調(diào)制以實(shí)現(xiàn)將長度為L2比特的第i行水印密文嵌入到xi(n) 中,其嵌入規(guī)則如式(4)所示,其中CF′(i,j)是調(diào)制后攜帶有水印信息的特征量
(4)
假設(shè)嵌入水印后的子頻段余弦系數(shù)為Z′(i,j), 如式(5)所示,其中kj是第j個子頻段余弦系數(shù)的放大倍數(shù)
Z′(i,j)=kjZ(i,j)
(5)
則由式(1)和式(5)可知,嵌入水印后的特征量CF′(i,j)可表達(dá)為式(6)
(6)
則放大倍數(shù)kj可由式(7)計算
(7)
可見,各個子頻段中余弦系數(shù)的放大倍數(shù)kj由特征量、量化間隔以及水印的二進(jìn)制取值共同決定。通過使用放大倍數(shù)kj對子頻段的余弦系數(shù)進(jìn)行修正即可獲得抖動調(diào)制所需的特征量CF′(i,j)。
提取算法是嵌入算法的逆過程。提取算法的原理框架如圖2所示。首先將攜密音頻均勻的分為L1段,利用同步機(jī)制在每個音頻片段中搜索水印的提取區(qū)域x′i(n), 然后將x′i(n)進(jìn)行離散余弦變換,并計算各個子頻段的特征量CF′(i,j), 再將其進(jìn)行等間隔量化得到CF″(i,j), 如式(8)所示
圖2 提取算法原理
(8)
最后通過對比特征值CF′(i,j)與其量化值CF″(i,j)的大小來判斷嵌入水印時的抖動方向,利用式(9)可將水印密文w″(i,j) 提取出來
(9)
水印嵌入步驟描述如下:
步驟1 將水印進(jìn)行加密和雙極性調(diào)制等預(yù)處理,得到L1行L2的二進(jìn)制矩陣w′(i,j)。
步驟2 將原始音頻分為L1段,在每個音頻片段中使用同步機(jī)制搜索能夠攜帶水印的區(qū)域xi(n)。
步驟3 將xi(n) 進(jìn)行離散余弦變換得到Xi(k)。
步驟4 從第b0根譜線開始選擇N2根譜線構(gòu)建Yi。
步驟5 從第b1根譜線開始連續(xù)選取L2個子頻段Z(i,j), 每個頻段含有N3根譜線。
步驟6 利用式(1)計算每個子頻段的CF(i,j)。
步驟7 利用式(2)對CF(i,j)進(jìn)行均勻量化。
步驟8 利用式(4)計算CF′(i,j)。
步驟9 利用式(7)計算放大倍數(shù)kj。
步驟10 利用式(5)計算攜帶有水印的Z′(i,j)。
步驟11 用Z′(i,j)替換Xi(k) 中相應(yīng)位置上的數(shù)據(jù)得到攜帶有水印的余弦系數(shù)X′i(k)。
步驟12 對X′i(k)進(jìn)行離散余弦逆變換,重構(gòu)該音頻片段的時域數(shù)據(jù)。
步驟13 重復(fù)步驟3到步驟12,直至將所有水印信息嵌入至全部音頻片段中。
步驟14 將所有音頻片段連接起來得到攜密音頻。
水印提取步驟描述如下:
步驟1 將攜密音頻分為L1段,在每個音頻片段中使用同步機(jī)制搜索水印的提取區(qū)域x′i(n)。
步驟2 將x′i(n)進(jìn)行離散余弦變換得到X′i(k)。
步驟3 從第b0根譜線開始選擇N2根譜線構(gòu)建Y′i。
步驟4 從第b1根譜線開始連續(xù)選取L2個子頻段Z′(i,j), 每個頻段含有N3根譜線。
步驟5 計算各個子頻段的特征量CF′(i,j)。
步驟6 以δ對CF′(i,j)進(jìn)行量化得到CF″(i,j)。
步驟7 根據(jù)式(9)從x′i(n)中提取L2比特水印。
步驟8 重復(fù)步驟2到步驟7,直至將所有音頻片段中的水印密文全部提取出來。
步驟9 將水印密文解密得到可識別的水印信息。
本小節(jié)測試水印嵌入頻段、量化間隔以及子頻段寬度3項(xiàng)關(guān)鍵參數(shù)對算法性能的影響,為該算法在實(shí)際應(yīng)用中的參數(shù)設(shè)置提供參考。本次測試實(shí)驗(yàn)中,算法的透明性和魯棒性分別用信噪比(signal-to-noise ratio,SNR)和誤碼率(bit error rate,BER)來定量評價。SNR的計算公式如式(10)所示,其中x(m) 和x′(m) 分別表示原始音頻和攜密音頻的采樣值,M是x(m) 含有的總采樣點(diǎn)個數(shù)。SNR的值越大,表明音頻質(zhì)量受損越小,則算法的透明性越好。誤碼率的計算如式(11)所示,BER越小,表明水印提取的成功率越高,則算法的魯棒性越強(qiáng)
(10)
(11)
以20條WAV格式的音頻作為研究對象,時長均為64 s,采樣率為44.1 kHz,量化位數(shù)為16 bit。待測水印為兩幅尺寸分別為64×43和64×86的圖片,如圖3所示。算法參數(shù)設(shè)置為:N1=8,a1=171,a2=340, 其它關(guān)鍵參數(shù)待測試。實(shí)驗(yàn)環(huán)境為:64位 Microsoft Windows 10操作系統(tǒng)、編程語言為Matlab 2016R、音頻剪輯工具為Cool Edit Pro。
圖3 待測試水印
由嵌入原理可知,矩陣Yi和Z(i,j)在整個算法設(shè)計中至關(guān)重要,由于二者均取自于余弦系數(shù)Xi(k), 因此其位置參數(shù)b0和b1的選取對算法性能具有重要影響。將水印2嵌入到音頻中,然后對其進(jìn)行20 dB的白噪聲攻擊,分別測量b0取值為4、8和12這3種情況下,b1在[50,3000]之間取值時算法的透明性和魯棒性。SNR和BER的測試結(jié)果如圖4所示,其中δ=0.4,N2=4,N3=4, 譜線間隔Δf為5.376 Hz。
圖4 嵌入頻段對算法性能的影響
由圖4可見,b0為4時,SNR取值遠(yuǎn)高于另外兩條曲線,且對應(yīng)的BER曲線最低,說明Yi處于低頻段時,算法具有良好的透明性和強(qiáng)魯棒性。隨著b1逐漸增大,攜帶水印的Z(i,j)逐漸遠(yuǎn)離Yi, SNR和BER曲線均呈緩慢下降趨勢,說明Z(i,j)所處頻率越高,算法的透明性有所下降,對20 dB白噪聲的抵抗能力略有增強(qiáng)。
在均勻量化和抖動調(diào)制中,量化間隔δ是一個重要參數(shù)。δ在[0.1,4]之間取值時,算法的透明性和魯棒性的測試結(jié)果如圖5所示。
圖5 量化間隔對算法性能的影響
本次實(shí)驗(yàn)中,b0=4,b1=400, 其它實(shí)驗(yàn)參數(shù)與4.1節(jié)相同。從實(shí)驗(yàn)結(jié)果可知,隨著量化間隔的增大,SNR曲線逐漸下降,說明透明性越來越低,BER曲線在δ處于[0.4,0.9]之間時達(dá)到谷底,說明δ在該區(qū)間內(nèi)取值可使該算法獲得較強(qiáng)的魯棒性。
由嵌入原理可知,N2和N3分別是矩陣Yi和子頻段的長度,與參數(shù)b1、L2以及Δf共同決定了嵌入?yún)^(qū)域的頻段寬度 [b1Δf,(b1+N3L2)Δf]。 對攜密音頻分別進(jìn)行20 dB的白噪聲和4 kHz的低通濾波攻擊,測量N2取值為4、8和12。這3種情況下,N3在[2,20]之間取值時算法的透明性和魯棒性,測試結(jié)果如圖6所示。其它實(shí)驗(yàn)參數(shù)和4.2節(jié)相同。由圖6(a)、圖6(b)可知,N2取4時,其SNR曲線遠(yuǎn)高于另外兩條曲線,且對應(yīng)的BER曲線最低,說明Yi頻段較窄時,算法具有較高的透明性和魯棒性。
圖6 子頻段寬度對算法性能的影響
由圖6(b)可知,N3在[2,20]之間取值時,誤碼率變化非常平緩,說明子頻段寬度對白噪聲攻擊不敏感。在圖6(c)中,當(dāng)N3的取值大于4時,誤碼率顯著上升,說明子頻段寬度對算法抵御低通濾波攻擊的能力具有重要影響。
本小節(jié)測試算法的隱藏容量、透明性、魯棒性和復(fù)雜性,采用SNR和音頻質(zhì)量感知評估標(biāo)準(zhǔn)的客觀差異等級(object difference grade,ODG)定量衡量算法的透明性,采用BER和相關(guān)系數(shù)(normalized correlation,NC)評價算法的魯棒性。NC的計算公式如式(12)所示,NC越接近于1,表明所提取的水印與原始水印相比相似性越大,則算法的魯棒性越強(qiáng)。隱藏容量Cap用單位時間內(nèi)音頻所能攜帶的水印的比特數(shù)量來衡量
(12)
參考上一小節(jié)的參數(shù)測試結(jié)果,本小節(jié)測試中將算法參數(shù)優(yōu)選為:δ=0.4,N2=N3=4,b0=4,b1=400。 表1列出了各項(xiàng)性能的平均實(shí)驗(yàn)結(jié)果,包括SNR(dB)、ODG、BER(%)、NC和Cap(bps),并在相同實(shí)驗(yàn)條件下,將所得結(jié)果與文獻(xiàn)[2]、文獻(xiàn)[14]、文獻(xiàn)[17]和文獻(xiàn)[20]進(jìn)行對比分析,以評估算法的整體性能。
表1 平均實(shí)驗(yàn)數(shù)據(jù)(無攻擊)
由嵌入和提取原理可知,Z(i,j)中子頻段的個數(shù)決定了算法的隱藏容量。該算法的最大隱藏容量如式(13)所示,其中T是音頻的總時長。由公式計算可知,該算法在隱藏水印1時,其隱藏容量為43 bps,在隱藏水印2時,隱藏容量為86 bps
(13)
由表1中數(shù)據(jù)可知,在隱藏水印1時,該算法的SNR達(dá)到32 dB,ODG為-0.01,透明性優(yōu)于具有相同隱藏容量的文獻(xiàn)[2]和文獻(xiàn)[14]中的算法。在隱藏水印2時,隱藏容量變大,SNR和ODG值都有所降低,但音頻仍保持良好的聽覺質(zhì)量,且優(yōu)于文獻(xiàn)[17]和文獻(xiàn)[20]中的算法。原始音頻和攜密音頻的波形圖和語譜圖分別如圖7和圖8所示(為顯示細(xì)節(jié),僅截取3 s的音頻片段),水印嵌入前后音頻的波形和頻譜圖均沒有發(fā)生明顯變化。
圖7 音頻波形對比
圖8 音頻語譜對比
該算法具有較好透明性的原因一方面在于水印僅嵌入在有限的窄頻段上,且可以通過設(shè)置位置參數(shù)b1和N3來調(diào)節(jié)嵌入?yún)^(qū)域的位置,另一方面在于該算法僅通過對特征量進(jìn)行抖動調(diào)制來修改余弦系數(shù),因此對音頻數(shù)據(jù)的損傷較小。
表1數(shù)據(jù)顯示,在無攻擊情況下,兩組實(shí)驗(yàn)的BER都是0,NC均為1,這說明該算法在無攻擊情況下可將水印清晰提取出來。表2為本次測試的攻擊類型,共有12種攻擊。對攜密音頻進(jìn)行攻擊后,將相同類型的攻擊下計算所得的BER(%)取均值列于表3中,將NC值最接近平均值的水印圖片以及對應(yīng)的NC列于圖9和圖10中。
表2 攻擊類型
表3 魯棒性測試
圖9 水印1的提取結(jié)果
圖10 水印2的提取結(jié)果
由實(shí)驗(yàn)結(jié)果可知,該算法對噪聲污染、回聲干擾、幅度縮放、MP3壓縮、低通濾波、重采樣和重量化均表現(xiàn)出很強(qiáng)的魯棒性,BER低于1.34%,所提取的水印圖片與原始水印相比相似度在0.96以上。在抖動和隨意剪輯兩種攻擊測試中,BER均低于3.65%,所提取的水印圖片與原始水印相比相似度均在0.96以上,表明該算法能夠較好抵御這兩種同步攻擊。
在時間拉伸和時間縮短兩種攻擊測試中,BER較高,所提取圖片被破壞嚴(yán)重,其原因是水印嵌入?yún)^(qū)域在時間縮放攻擊中絕對位置發(fā)生漂移,在提取水印時,同步機(jī)制在追蹤提取區(qū)域時也隨之產(chǎn)生偏差,但從圖9和圖10的測試結(jié)果來看,所提取的水印圖片仍然能夠較為清晰分辨出主要信息。
在4 kHz的低通濾波攻擊中,水印1被嵌入在2.15 kHz至3.07 kHz的頻段上,水印2被嵌入在2.15 kHz至3.99 kHz頻率范圍內(nèi),由于3.99 kHz比3.07 kHz更接近于低通濾波器的截止頻率,因此所提取的水印2比水印1的誤碼率高。
在相同隱藏容量下,水印1的各項(xiàng)測試結(jié)果中SNR、ODG和BER均優(yōu)于文獻(xiàn)[2]和文獻(xiàn)[14]中所提算法,水印2的測試結(jié)果優(yōu)于文獻(xiàn)[20]中所提算法,雖然魯棒性稍遜于文獻(xiàn)[17]中的算法,但文獻(xiàn)[17]中算法的透明性非常低,其信噪比只有19 dB。
復(fù)雜性是評估水印算法性能的重要指標(biāo),可通過計算程序運(yùn)行時間來衡量。表4列出了5種算法在嵌入和提取水印2時的平均運(yùn)行時間。
表4 運(yùn)行時間/s
從實(shí)驗(yàn)結(jié)果來看,該算法的水印嵌入時間要高于提取時間,且平均所耗時間基本與其它4種算法接近。嵌入算法在濁音幀中搜索嵌入?yún)^(qū)域的平均時間是0.038 ms,提取算法在搜索提取區(qū)域時所耗平均時間為0.036 ms,表明本算法未增加時間成本,因此復(fù)雜度不高,便于實(shí)際應(yīng)用。
本文算法使用同步機(jī)制定位水印位置,通過抖動調(diào)制對卷積運(yùn)算所構(gòu)建的穩(wěn)定特征量進(jìn)行微小修改即可將水印嵌入至音頻中,具有良好的魯棒性和透明性。該算法無需原始音頻的參與,通過判斷特征量的抖動方向就可獲得水印的二進(jìn)制取值,具有盲提取能力。實(shí)驗(yàn)結(jié)果表明,該算法能夠抵御多種攻擊類型,在兩種隱藏容量下均表現(xiàn)出較高的透明性和強(qiáng)魯棒性。
今后,將進(jìn)一步研究如何提升算法抵御時間縮放攻擊的能力,以及算法參數(shù)的自適應(yīng)設(shè)置問題。