天天看點

【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼

1 簡介

提出了一種将灰階圖像嵌入到音頻信号的數字水印算法.該算法以包含豐富資訊的灰階圖像作為數字水印 , 首先利用 DC T靜态圖像壓縮技術 ,将二維數字水印 (灰階圖像 )編碼成一維二進制序列并進行随機置亂 ,再對數字音頻 信号進行分段處理并依據人類聽覺系統 ( HAS)擇段做離散餘弦變換 ( DCT) ,最後在離散餘弦變換域内通過修改中高 頻 DCT系數完成水印資訊的自适應嵌入 .實驗結果表明: 該自适應數字音頻水印算法不僅具有較好的透明性 ,而且對 諸如疊加噪聲、有損壓縮、低通濾波、重新采樣、重新量化等攻擊均具有較好的魯棒性.

【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼
【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼
【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼
【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼
【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼
【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼

2 部分代碼

clc;clear;close all;      
% 水印嵌入程式      
% 讀取音頻信号3.wav存到變量A中      
[A,fs,nbits] = wavread('王铮亮 - 時間都去哪了 .wav');      
%繪制原始聲音圖像      
subplot(211); plot(A);      
axis([0 350000 -2 2]);      
title('原始聲音信号波形圖');      
% 用變量L存儲音頻A的長度      
L = size(A);      
% 讀取圖像Lena.bmp存入變量M做水印信号      
M = imread('32.bmp');      
% 将圖像Lena.bmp轉化為二值圖并存入變量BW      
BW = im2bw(M);      
% 計算水印矩陣大小      
[M1,M2] = size(BW);      
% M12為中間變量,避免每次都計算M1*M2      
% 建立元胞B,每個音頻資料段Ae(m)是B的一個元素      
k = 1;      
% 建立M1 x M2行l列的元胞      
B = cell(n,1);      
th = n*N;      
% 當k小于Ae的長度時,矩陣Ae每10行作為一個音頻資料段存入元胞B中      
while ( k < th )      
i = k : k+9;      
m = (k+9)/10;      
B{m,1} = Ae(i,j);      
k = k+10;      
end      
% 建立元胞D,并将元胞B中離散餘弦變換了的元素存入元胞D中      
D = cell(n,1);      
for i = 1 : n      
D{i,1} = dct(B{i,1});      
end      
% 建立元胞E,儲存嵌有水印信号的中頻系數      
E = cell(n,1);      
E = D;      
for i = 1 : n      
%     % 将水印資訊C嵌入音頻中      
%     E{i,1}(3) = (D{i,1}(3))*(1+2*C(i));      
% 将擴頻了的水印資訊S嵌入音頻中      
E{i,1}(3) = (D{i,1}(3))*(1+2*S(i));      
end      
% 建立元胞F      
F = cell(n,1);      
% 将元胞E中離散餘弦反變換了的元素存入元胞F中      
for i = 1 : n      
F{i,1} = idct(E{i,1});      
end      
% 将所有分離的段合并建立到一維矩陣G中      
G = F{1,1};      
% i從3到M1*M2依次取值      
for i = 2 : n      
% 将元胞G和元胞F第i組元素合并建立到一維矩陣G      
G=[G; F{i,1}];      
end      
% 将元胞G和矩陣Ar合并建立一維矩陣G      
fprintf('原始歌曲正在播放中.....');      
% wavplay(A,fs);      
G =[G; Ar];      
wavwrite(G,fs,nbits,'test.wav');      
fprintf('請稍等,加密後的歌曲正在播放中.....');      
% wavplay(G,fs);      
subplot(212); plot(G);      
title('含水印的聲音信号波形圖');      
axis([0 350000 -2 2]);      

3 仿真結果

【信号隐藏】基于離散餘弦變換DCT音頻數字水印嵌入提取matlab代碼

4 參考文獻

繼續閱讀