1 模型
提出了一種基于離散餘弦變換及奇異值分解的音頻水印算法.首先對二值水印圖像進行奇異值分解求出奇異值,然後對所得奇異值進行基于音頻信号變換域性質的調制,并對音頻信号進行離散餘弦變換并計算水印嵌入點,最後将經過調制的水印信号嵌入.仿真試驗證明這種自适應音頻數字水印算法具有穩健性和不可覺察性.
2 部分代碼
%% 基于DCT-SVD實作信号數字水印嵌入提取
clear all;
close all
warning off
clc;
key=15;
%Arnold置換次數,作為密鑰
Orignalmark=imread('1.bmp'); %讀入64*64的水印圖檔
[wrow,wcol,mm]=size(Orignalmark);
if mm~=1
Orignalmark=rgb2gray(Orignalmark);
end
if wrow~=wcol
Orignalmark=imresize(Orignalmark,[wrow wrow]);
end
[wrow,wcol]=size(Orignalmark);
%--- 測試密鑰key是否超出範圍---------
n=check_arnold(wrow);
if (key+1)>n
error('arnold key error');
end
MarkedX=idct(ca2);%反DCT變換
figure(1);
subplot(3,1,1);
plot(X); %顯示音頻檔案波形
title('原始音頻信号');
ylim([-2, 2])
subplot(3,1,2);
plot(MarkedX);
title('嵌入水印後音頻');
ylim([-2, 2])
%% 攻擊
%将含水印圖像f歸一化,以便于攻擊處理。
%攻擊----------------------------------------------------------------------
attack=2;
switch attack
case 0,
attackf=MarkedX;
att='未攻擊';
case 1,
% %1. 高通濾波
f1=10000; % f 1:通帶截止頻率
f2=20000;% f 3:阻帶截止頻率
rp=0.1;%rp:邊帶區衰減DB數設定
rs=2;%rs:截止區衰減DB數設定
attackf=lowp(MarkedX,f1,f2,rp,rs,fs);
att='低通濾波';
case 2,
%%2. 添加高斯噪聲
attackf=MarkedX+0.1*rand(1);
att='添加高斯噪聲';
case 3,
%%%4.部分信号丢失
xx=randperm(length(MarkedX));
attackf=MarkedX;
attackf(xx(1:100))=1;%部分信号丢失
% attackf=WienerScalart96(MarkedX,fs,1);
att='部分信号丢失';
end
figure(1);
subplot(3,1,3);
plot(attackf);
title([att,'後音頻']);
ylim([-2, 2])
% 顯示結果
figure;
subplot(211);
imshow(Orignalmark),title('水印');
attackmark=arnold(exteredmark,wrow,n-key);
subplot(212);
imshow(attackmark),title('重新提取水印');
%% 計算PSNR\NC\BER
psnrvalue=psnr(Orignalmark,attackmark);
[number,BER] = biterr(water_vector1,water_vector2);% 比特錯誤數和比特錯誤率(BER)
Nc=nc(Orignalmark,attackmark);%NC系數
disp(['比特錯誤率(BER)=',num2str(BER)])
disp(['NC系數=',num2str(Nc)])
3 仿真結果
4 參考文獻
[1]柏玉保, 柏森, 暴晉飛,等. 一種基于DWT和DCT域的音頻資訊隐藏算法[J]. 微型機與應用, 2010(01):37-40.
[2]趙靜, 周明全. 基于DCT變換及SVD處理的音頻數字水印算法[J]. 計算機技術與發展, 2005(02):50-52.