动态码本基于完全二叉树分组的语音信息隐藏算法的制作方法

文档序号:13333547阅读:309来源:国知局
动态码本基于完全二叉树分组的语音信息隐藏算法的制作方法

本发明涉及了一种实现保密通信的新思路——语音信息隐藏,从根本上掩盖了秘密信息存在的事实,有效的保护了用户隐私和信息安全。



背景技术:

voip(voiceoverinternetprotocol)作为一种互联网通信技术,面临着隐私泄露的巨大风险。为了解决voip中隐私泄露等问题,语音信息隐藏技术逐渐被应用到voip中。信息隐藏的主要领域包括基础理论研究、应用基础研究和应用技术研究三个方面,在基础理论研究方面,huang等人在低速率编码语音流中使用基音预测完成信息隐藏,实验结果表明,嵌入隐秘信息对载体语音质量影响较小,损耗值约为1.2%,而且能够在运算复杂度较小的同时保证较好的抗隐写分析攻击能力;huang等人也研究了在voip语音流的非活动帧中嵌入隐秘信息的隐藏算法,发现了voip语音流的非活动帧比活动帧更适合做信息隐藏的重要结论。在隐蔽性相同的条件下,非活动帧中嵌入的数据量远大于活动帧中嵌入的数据量,达到101比特每帧,是一种大容量的语音信息隐藏算法;wang等人提出了使用lsb算法在voip语音流中做实时嵌入的方法,实验结果表明隐秘信息嵌入的处理时延保持在0.257ms左右,适用于voip等实时语音通信应用;

随着越来越多的人参与到互联网中,网络带宽资源显得弥足珍贵。2000年,globalipsound公司研发了一款适用于窄带语音通信的编码器---ilbc(internetlowbitratecodec)编码器。该编码器属于中低速率编码器,能够提供稳健的ip语音通信,并且支持20ms和30ms两种帧格式,比特率分别为15.20kbit/s和13.33kbit/s。当网络环境不佳导致ip数据包延迟较大或者出现丢包时,该编码器的丢包掩蔽效应(packetlossconcealment,plc)可以有效的增强语音,保证语音质量。因此,拥有出色性能的ilbc逐渐成为voip中使用广泛的一款编码器。

xiao等人根据低速率编码器的特性设计了一种全新的语音信息隐藏算法,互补邻居顶点(complementaryneighborvertices,cnv)算法,该算法是语音信息隐藏领域中首次结合图论相关知识实现码本分组的算法。与传统码本分组算法不同,cnv将每个码字都视为多维空间中一个孤立的点,每两个码字之间的关系用边和权重来表示,相邻顶点分别被0和1标记,整个标记的过程即为码本分组的过程,然后根据隐秘信息值在相应的码本组中进行搜索,完成隐秘信息的嵌入。实验结果表明,该算法应用于g.723.1或者ilbc编码流中有较好的隐蔽性和鲁棒性,获得了不少于100bps的隐藏容量,是目前国际上认可度较高的语音信息隐藏算法之一。

经典语音信息隐藏算法大致可以分为三类:时域隐藏算法、变换域隐藏算法和基于量化索引调制(quantizationindexmodulation,qim)的隐藏算法。时域隐藏算法是在时域上直接将隐秘信息嵌入到载体信号中,该算法实现简单,隐藏容量大,但是隐藏过程中直接修改载体信号必然会造成载体信号的失真,增大了接收端提取隐秘信息的难度。变换域隐藏算法是在载体信息的变换域中做信息隐藏。该算法将载体信息映射到变换域并修改变换域中的某个参数来达到信息隐藏的目的。但是语音信号映射到变换域需要大量的基于信号处理的运算,直接导致了算法的运算复杂度高,对语音信号的实时性产生影响。基于量化索引调制的信息隐藏算法将原始量化码本进行分组,当嵌入不同的隐秘信息时搜索不同的码本组,得到含有“特殊”含义的码本索引。接收端根据这些索引号提取出相应的隐秘信息,以此实现语音信息隐藏。例如将量化码本分为c1和c2两部分,c1和c2满足c1∪c2=c和约定c1和c2分别代表隐秘信息中的0和1。当嵌入信息为0时,在c1中搜素最佳量化值,反之在c2中进行搜索,接收端根据索引号的分组类别判断并提取载体承载的隐秘信息。qim方法广泛应用于各种以数字媒体作为隐藏载体的信息隐藏算法中,表现出良好的隐藏性能,但是该算法普适性较差,只能应用于编码过程和原理相似的编码器。



技术实现要素:

本发明中针对目前应用较为广泛的码本分组算法的缺陷,提出一种动态码本基于完全二叉树分组的语音信息隐藏算法。

该算法结合ilbc的动态码本和量化索引调制(quantizationindexmodulation,qim)原理,使用完全二叉树对动态码本进行分组。发送方根据隐秘信息位选择对应的码本进行编码实现隐秘信息的嵌入,随后接收方根据码字矢量的属性完成隐秘信息的提取过程。

二叉树是一个包含n个节点的有限集合,n=0时称为空二叉树,n>0时二叉树由根结点和两棵互不相交的子树共同组成。除叶子结点外,二叉树的每个结点最多只有两棵子树。如果一棵高度为h的二叉树有2h-1(h>=0)个结点,则这样的树称为满二叉树。满二叉树中的结点从左到右、从上到下依次排列,规定根结点的序号是0。对于高度为h的二叉树,如果每个结点的序号都与高度为h的满二叉树的结点序号一一对应,则称这棵树为完全二叉树。

由于完全二叉树的构造与信息隐藏中的码本分组相似,据此提出一种动态码本基于完全二叉树分组的语音信息隐藏算法。以完全二叉树的根结点0为界,将码本矢量按照规则存放到二叉树的结点中,依据二叉树子树互不相交原理实现动态码本的分组。

动态码本中基码本cb可以分为以下两组:

cb={cbl,cbr,0}

其中,图3中cbl表示在完全二叉树中位于左子树上的结点,包含的码字矢量有cbv0,cbv2,cbv3,cbv6,cbv7等,cbr表示在完全二叉树中位于右子树上的结点,包含的码字矢量有cbv1,cbv4,cbv5等。

为了增强算法的抗隐写分析能力,丰富码本的排列方式,需要对码字矢量的排放做进一步改进,将上图中的码字矢量倒置排放,形成倒序的完全二叉树。

在嵌入隐秘信息的过程中,由控制信息位确定码字矢量的排列方式。初始状态编码产生的最佳码字索引表现出随机性,恰好满足控制信息位对随机性的需求,因此选定搜索固定码本时产生的最佳码字索引为控制信息位。根据控制信息位的模2值选定码字矢量生成二叉树的方式,若控制信息位满足indexmod2=0,则以正序方式生成完全二叉树;若控制信息满足indexmod2=1,则以倒序方式生成完全二叉树。

构造出完全二叉树后发送端根据嵌入的隐秘信息值在完全二叉树上做递归遍历,当嵌入隐秘信息为0时,在完全二叉树的左子树上做递归搜索,寻找满足最优匹配搜索条件的码字矢量和最佳索引;反之,当嵌入隐秘信息为1时,在完全二叉树的右子树上做递归遍历,寻找满足最优匹配搜索条件的码字矢量和最佳索引。搜索完成后将最佳索引和其他参数按照固定格式打包并发送到网络上,实现语音信息的隐藏。

接收端在接收到包含隐秘信息的ilbc数据包后对其解析,提取出相关编码参数,重构初始状态并根据固定码本最佳索引值判断完全二叉树的构造方式,然后构建码本内存,根据码本内存构建相应的完全二叉树。最后根据动态码本索引对应的码本矢量在二叉树中所处位置判断隐秘信息位,提取出发送端嵌入的隐秘信息,以此实现隐秘信息的提取。由于发送方在隐秘信息嵌入完成后并没有立即停止编码器,而是等待所有载体语音编码完成后停止编码器,因此,未嵌入隐秘信息的载体的索引号就会表现出随机性,接收方不能根据索引号在二叉树中的位置判断出是否有隐秘信息存在,所以该提取算法是一种非盲提取算法。

附图说明

图1为动态码本中基码本的生成过程。

图2为完全二叉树结构图。

图3为动态码本正序分组。

图4为动态码本倒序分组。

图5为隐秘信息嵌入过程。

图6为隐秘信息提取过程。

图7为局域网实验拓扑图。

图8为ping命令测试网络连通性。

图9为隐蔽语音通信模块。

图10为jni实现流程。

图11为voip通话客户端。

图12为客户端b弹出的请求对话框。

图13为客户端b弹出提醒对话框。

图14为客户端a显示提取的隐秘信息。

图15为动态码本基于完全二叉树分组的隐藏算法嵌入隐秘信息前后波形对比。

图16为基于完全二叉树的动态码本分组算法abx错判率。

图17为基于动态码本分组的语音信息隐藏算法30ms帧格式下pesq值对比。

图18为基于动态码本分组的语音信息隐藏算法30ms帧格式下pesq值对比。

具体实施方式

1.首先在本地计算机上搭建开发平台,在局域网中搭建测试环境,图7中router是市场上常见的一款tp-link路由器,型号是tl-wr886n。终端usera和userb为两台pc,参数如下,处理器:intel(r)core(tm)i3-4370cpu@3.80ghz3.80ghz;内存:4gb;声卡:realtekhighdefinitionaudio;系统:windows7专业版servicepack1。网络配置完成以后使用ping命令测试网络的连通性。

2.然后软件实现语音信息隐藏模块,选用c语言实现语音信息隐藏算法。由于实现环境的限制,本软件屏蔽了voip语音通信中传输层以上的协议,从传输层开始实现语音通信模块。

3.使用java网络编程实现语音通信模块,通过jni(javanativeinterface)技术实现语音通信模块对ilbc编码器集成语音信息隐藏算法模块的调用。创建完成带有本地方法的源程序后利用jdk提供的javac工具编译java文件,产生.class文件,然后使用javah工具生成本地方法的头文件,将生成的头文件audiocodec.h引入到vc++新建的win32dynamic-linklibrary(dll)工程中,实现头文件中声明的方法、语音信息隐藏模块和ilbc编码模块,然后编译dll工程,生成本地.dll文件。最后将其引入到java工程中即可实现java与c语言的交互。

4.语音通话初始阶段,ip地址分别为10.5.47.119和10.5.47.183的两台局域网互联pc机(以下简称为客户端a和客户端b)各自启动voip通话客户端,此时好友列表栏中显示了当前在线的可通话对象。假定由客户端a向客户端b发起通话请求,客户端a选中通话对象的ip地址后点击“发起通话”按钮,启动语音通话监听线程,此时,客户端b会弹出请求通话的对话框。

5.客户端b同意进行语音通信,双方将启动语音通话线程进入语音通话阶段。在通话过程中,客户端b向隐秘信息文本框中输入预先准备好(本实验中使用的是一段经过二进制化的文本信息,长度为900bit)的隐秘信息,点击“嵌入隐秘信息”按钮,这段隐秘信息便依次嵌入到了载体语音中。当隐秘信息嵌入完毕后,客户端b弹出提醒对话框提示用户隐秘信息嵌入完成。此后,客户端a和客户端b进行正常语音通信。

6.当客户端a接收到了客户端b发送的带有隐秘信息的语音流时,客户端a在接收语音信息的同时也在探测语音流中的start标识符,当监测到start标识符时启动隐秘信息提取线程开始提取隐秘信息,当监测到end标识符时结束隐秘信息提取线程。提取出的隐秘信息显示在“提取出隐秘信息”文本框中。

7.最后,客户端任意一方结束语音通信,关闭客户端。

8.对动态码本基于完全二叉树分组的语音信息隐藏算法和与其思想相近的两种算法的隐藏容量进行对比,如表1所示,表中算法一为动态码本基于完全二叉树分组的隐藏算法,算法二为动态码本基于奇偶分组的隐藏算法,算法三为cnv算法。

表1隐藏容量对比

由表1可以看出,算法一和算法二的隐藏容量相同,原因是两个算法使用了相同的隐藏思想和隐藏域——在动态码本中采用码本分组的思想进行信息隐藏,而且二者都属于容量较大的隐藏算法,嵌入速率较高。算法三使用固定码本分组算法,容量稍小,但是也达到了200bps。综合分析,本文提出的动态码本基于完全二叉树分组的语音信息隐藏算法是一种容量较大的隐藏算法,满足voip实时隐蔽通信对隐藏容量的需求。

9.对提出的隐藏算法的隐蔽性进行分析,从实验数据中随机选取一组语音信号,分别画出载体语音信号嵌入隐秘信息前后的时域波形图和频谱图,并引入pesq值来评估隐藏算法的隐蔽性。评估嵌入隐秘信息对语音信号听觉感受引起的变化,使用abx测试语音信号的相似度。

10.验证动态码本基于完全二叉树分组的语音信息隐藏算法在受到噪声干扰时隐秘信息的稳定性。选用matlab中的randn()函数模拟随机噪声,对载密编码流进行加噪攻击,然后用提取算法对受到攻击的隐秘信息进行提取。

11.测试动态码本基于完全二叉树分组的语音信息隐藏算法对实时通信的影响,只对隐秘信息的嵌入和提取处理时延进行分析,排除其他可能造成延时的干扰因素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1