基于回声的音频水印算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
张道德 UCAS
第4题 基于回声的音频水印算法
利用回升嵌入水印的算法是一种经典的音频水印算法。它利用了人类听觉系统的一个特性:音频信号在时域的后向掩码作用,即弱信号在强信号消失之后变得无法听清。
4.1算法介绍
设音频序列{(),0}S s n n N =≤≤,按照下式即可得到含有回声的音频序列~
Y :
~
() 0()()() s n n m
y n s n s n m m n N
λ≤<⎧=⎨
+-≤≤⎩ 其中m 是信号和回声间的延时,一般取m N ≤,λ为衰减系数。
在回声编码中通过修改m 来嵌入水印信息,水印嵌入流程图如下:
对音频数据文件,先将其分成若干包含相同样点数的片段,每个片段时间约为几个到几十个毫秒,样点数记为N 。每段用来嵌入一比特的水印信息。在水印嵌入阶段,对每段信号使用前面的回声序列构造方式,选择0m m =则在信号中嵌入比特0,选择1m m =则在信号中嵌入比特1。延时0m 和1m 是以人耳听不到回声信号为准则选取,最后将所有回声信号段串联成连续信号。
回声编码中水印提取流程如下图:
对一个音频回声信号,水印提取关键在于确定回声的延时。利用复倒谱可将回声从原始信号中分离出来。设回声信号~
()y n 的复倒谱自相关为~
()y n 。由于引入回声的延时只有0m 和1m 两种可能,因此,只有比较~
()y n 在0m 和1m 处的取值,根据其中较大者即可判断回声延时,从而确定嵌入的一比特消息。 Def 用归一化相关系数计算两个向量的相似性,表达式是这样的:
分子是两个向量的内积,分母分别是两个向量的模。
4.2 编程实现与分析
4.2.1 回声水印算法的程序实现与分析
在本试验嵌入过程中,我们选取音频数据为440000个,每4400(即4400N =)个音频数据中嵌入1比特信息,因此最多嵌入100比特的信息。首先我们将这440000个音频数据存储在维数4400100⨯的矩阵当中,选取01200,300m m ==,即
当嵌入比特信息0b =,~
000() 0()()() s n n m y n s n s n m m n N λ≤<⎧=⎨+-≤≤⎩
当嵌入比特信息1b =,~
1
11() 0()()() s n n m y n s n s n m m n N
λ≤<⎧=⎨+-≤≤⎩
其中,λ为衰减系数。
在本试验信息提取过程中,我们将存储嵌入信息的440000个音频数据存储在维数4400100⨯的矩阵当中;然后在每一次提取1比特信息的过程中,首先对这4400个音频数据分别进行DFT 、复对数、IDFT 变换;最后比较0()y m 与1()y m ,
01010,()()
1,()()
y m y m b y m y m >⎧=⎨
<⎩
在本试验中,我们选择的嵌入信息为100比特随机选择的信息。我们取衰减系数0.2λ=,运行很多次的实验结果都很理想,我们选取10次实验数据如下表:
但是,但我们取其他数值时(从0开始增加)就会出现波动如下表:
表4.2衰减系数与误码率、相关系数的关系表
根据上述表格可以绘制如下图
图4.1衰减系数与误码率、相关系数的关系图
结论:看见为了使误码率减小,相关系数增大必须相应的衰减系数必须增大。 4.2.2 程序编码
%*****************************************************************************
0.02
0.04
0.06
0.080.10.12
0.14
0.16
0.18
衰减系数
*******
基于回声的水印嵌入算法
①嵌入水印算法
function [AudioArray,TextLength,fs,bits]=EchoWater(AudioName,InsetText,h)
%AudioName为音频的名称;
%InsetText为嵌入文本信息;
%AudioArray为嵌入文本信息后的数组;
%TextLength为嵌入文本信息的长度信息;
%h为衰减系数;
%fs表示采样频率(HZ),bits表示量化位数,用于还原成声音
%注:该算法设置为最多嵌入100比特信息,每4400个声音中嵌入1bit信息;%即我们在此算法中取N=4000,嵌入"1"时,取m=200;嵌入"0"时,取m=300。[AudioArray,fs,bits]=wavread(AudioName);%读取声音
AudioLength=length(AudioArray);
if AudioLength<440000
disp('音频长度太短')
end
TextLength=length(InsetText);
if TextLength>100
disp('嵌入信息长度过长,只最嵌入100比特')
end
%******************************************************************************* *
%回声水印算法
%延时200个点代表“1”,延时300个点代表“0”。
y=AudioArray(1:440000);
N=4400;
L1=100;
y=reshape(y,N,L1);
y=y';
for k=1:TextLength
if (InsetText(k)==1)
y(k,:)=y(k,:)+h.*[zeros(1,200),y(k,1:N-200)];
else
y(k,:)=y(k,:)+h.*[zeros(1,300),y(k,1:N-300)];
end
end
y=y';
AudioArray(1:440000)=reshape(y,1,440000);%R是嵌入信息的隐写信号;