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.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页