1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56Yk5xr
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
目前数字音频水印算法研究主要分为三类,时间域水印算法、变换域水印算法、基于听觉特性的水印算法。时间域水印算法通常采用扩展频谱的方法,即把代表水印信息的伪随机序列,通过具备心理声学模型频域掩蔽效应的滤波器进行滤波,使这种全频带的噪声完全位于听觉掩蔽曲线以下,人耳完全不能觉察。回到时域以一定的强度叠加到音频信号的振幅上,水印提取的时候根据伪随机序列的自相关性值为1和互相关性为0的特点来验证水印信号的存在.变换域的水印算法通过快速傅立叶变换,离散余弦变换离散小波变换,在频域的适当位置通过抖动调制或直接叠加的方法,改变变换域系数来嵌入水印。主要利用音频信号在时域的后向掩蔽,即用弱信号在强信号消失50-200ms之后变得无法听见。将原始音频数据以一定的衰减程度并延迟一定的时间迭加到原始音频数据以产生回声,并以不同的延迟时间和衰减振幅来标志水印数据的“0”或“1”,水印数据提取时,根据回声间距检测,利用倒谱的自相关峰值的位置来判断“0”或“1“。
4.部分源码
...................................................
L = size(A);
M = imread('china.bmp');%读取图像存入变量M做水印信号
BW = im2bw(M);%二值图
[M1,M2] = size(BW);
M12 = M1*M2;
C = reshape(BW,1,M12);% 降维,将水印信息得到的一维序列存入序列C中
n = M12;
% 对水印信号进行扩频处理
n = M12*2;
M = zeros(n,1);
for k = 1 : n
if mod(k,4) == 0
M(k) = 1;
else
M(k) = 0;
end
% 水印信号序列分别按位与密钥异或
l = ceil(k/2);
S(k) = bitxor(C(l),M(k));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = 10; %嵌入一个水印信息需要的音频数据为N
length = n*10;
i = 1 : length;% 将原始音频信号分解为Ae和Ar两部分
j = [1];
Ae = A(i,j);% 取矩阵A的l到length行构建矩阵Ae
i = length+1 : L;
Ar = A(i,j);% 取矩阵A的length到L行第一列构建矩阵Ar
k = 1;
B = cell(n,1);% 建立M1 x M2行l列的元胞
th = n*N;
while ( k < th )
i = k : k+9;
m = (k+9)/10;
B{m,1} = Ae(i,j);
k = k+10;
end
D = cell(n,1);
for i = 1 : n
D{i,1} = dct(B{i,1});%DCT变化
end
E = cell(n,1);% 建立元胞E,储存嵌有水印信号的中频系数
E = D;
for i = 1 : n
E{i,1}(3) = (D{i,1}(3))*(1+2*S(i)); % 将扩频了的水印信息S嵌入音频中
end
.................................................................
A287