本文是該系列的第20篇。數字水印是一種將標識信息嵌入到載體當中,且不影響載體使用的一種技術,主要分為時域水印嵌入算法(將水印嵌入到時域采樣數據中)和變換域水印嵌入算法(先對音頻做變換,將水印嵌入到變換域系數中)。本文將介紹一種簡單的時域水印嵌入算法——LSB算法。
LSB算法
通常數字水印技術有不可感知性的要求,即嵌入數字水印后載體數據發生了變化,但是不會影響到該數據的使用,對使用者而言也不可察覺。
該算法將水印信息嵌入到數據的最低有效位(Least Significant Bit)部分,即將數據的LSB替換為需要加入的水印信息。這正是因為低位數據對整體數據的影響最小,這也導致嵌入的水印信息強度不高,否則會影響到載體的數據質量。因此該算法僅限用于脆弱性數字水印(相較于魯棒性數字水印而言,無法承受大量失真)。
System Generator設計
該算法的實現很簡單,在Simulink中添加block按下圖連接:
數字水印嵌入部分,載體數據量化為Fix_12_11格式,水印信息量化為Fix_4_3格式,這里選擇兩首不同的音樂作為載體和水印。使用Concat拼接兩個數據,水印信息作為LSB。由于Concat模塊只接收無符號整數輸入,因此需要使用Reinterpret分別轉換為UFix格式。Concat輸出的數據再由Reinterpret轉換為Fix_16_15數據,導出到wav文件中。
數字水印提取部分,直接使用slice將音頻信號的低4Bits提取出即為數字水印信息。提取出的數據由Reinterpret轉換為Fix_4_3,寫入到音頻文件中。
系統采樣率為48000Hz,仿真時長10s即可。運行仿真后可以發現,播放添加了水印后的載體音樂時,完全聽不出其中包含水印音樂;播放提取出的水印音樂,發現由于該算法的限制性,量化位寬較少,存在一定的噪聲干擾。
block使用方法
●Concat:該block用于拼接多個比特向量,類似于Verilog語法中的“{ }”。該模塊的輸入只能是無符號整數,因此經常和Reinterpret(在本系列第8篇中進行過詳細講述)配合使用。該模塊可以設置2~1024個輸入,拼接為1個輸出。
●Slice:該block用于提取輸入的二進制序列中的某些位作為輸出,輸出格式為無符號整數。該block的配置有多種提取方式可以選擇:
“Width of slice(number of bits)”設置提取出數據的位寬。當選中“Boolean output”,如果截取的位寬為單比特,輸出類型會變為Boolean。
Offset of top bit和Offset of bottom bit為計算截取高位和截取低位所需的偏置值。分別有一個Relative to設置計算偏置的方式。“Specify range as”中可以選擇三種提取數據的指定方式。
上面看起來比較繞,以實例的方式理解。假設輸入數據IN為Fix_16_8格式,Specify range as選擇Two bit location,即分別指定截取高位和截取低位:
- 兩者的Relative to都設置為“LSB of input”,top bit設置為3,bottom bit設置為0。提取結果為IN[3:0],LSB of input表示從低位開始計算偏置值(offset)。
- top bit設置為-3,對應的relative to設置為“MSB of input”;bottom bit設置為0,對應的relative to設置為“LSB of input”。提取結果為IN[13:0],MSB of input表示從高位開始計算偏置值(offset),偏置值必須是負數。
- Binary point of input,表示從小數點位置開始計算偏置值,設置為正數表示向高位計數,設置為負數表示向低位計數。比如bottom bit不變,top bit設置為-3、Binary point of input,則提取IN[4:0];top bit設置為2、Binary point of input,則提取IN[9:0]。
Upper bit location+width、Lower bit location+width只需要設置截取高位或截取低位,只是截取長度由Width of slice指定。
編輯:hfy
-
數字水印
+關注
關注
0文章
43瀏覽量
15030 -
LSB算法
+關注
關注
0文章
7瀏覽量
5835
發布評論請先 登錄
相關推薦
評論