【信号隐藏】基于离散余弦变换DCT音频数字水印嵌入提取matlab代码

1 简介

提出了一种将灰度图像嵌入到音频信号的数字水印算法.该算法以包含丰富信息的灰度图像作为数字水印 , 首先利用 DC T静态图像压缩技术 ,将二维数字水印 (灰度图像 )编码成一维二进制序列并进行随机置乱 ,再对数字音频 信号进行分段处理并依据人类听觉系统 ( HAS)择段做离散余弦变换 ( DCT) ,最后在离散余弦变换域内通过修改中高 频 DCT系数完成水印信息的自适应嵌入 .实验结果表明: 该自适应数字音频水印算法不仅具有较好的透明性 ,而且对 诸如叠加噪声、有损压缩、低通滤波、重新采样、重新量化等攻击均具有较好的鲁棒性.

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 仿真结果

4 参考文献

[1]刘广起, 郑晓势, & 赵彦玲. (2010). 基于奇异值分解的dct域音频数字水印算法. 电声技术(3), 5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值