基于移频函数的语音信号加密
2015-12-21闫应天
闫应天
摘要:针对语音信号的加密问题,基于MATLAB软件编程,利用移频函数对语音信号进行移频加密,并在此基础上给出了一种改进方法,将一个语音信号进行分割加密,从而提高加密的效果。
关键词:MATLAB;语音加密;分割加密;移频
中图分类号:TP313 文献标识码:A 文章编号:1009-3044(2015)28-0161-03
Speech Signal Encryption Based on Frequency Shift Function
YAN Ying-tian
(Department of Computer Science and Technology LVliang University, Lishi 033000, China)
Abstract: Aiming at the problem of encryption of speech signal, based on MATLAB software programming, using frequency shift function to shift frequency encryption, and on this basis, an improved method is presented to segment a speech signal into encryption, so as to improve the effect of encryption.
Key words: MATLAB; speech encryption; segmentation encryption; frequency shift
信号的加密在军事上是一项非常重要的技术,各种加密的方法也在不断地被超越。信号加密是一个国家军事战略计划中极其重要的一部分。本文以语音信号为研究对象,借助于MATLAB软件,对语音信号进行离散Fourier变换,再对频域上的信号进行频率搬迁,从而实现信号的加密。
1 语音加密原理
语音信号通常是指人类发出与人类可以接收的信号。人耳可以分辨的声音频率从300~3400Hz;对于低于或者高于此范围的声音,人耳无法对其识别。
一段时间固定的语音信号在MATLAB中是以一个长度为的一维数组V所存储的,其中T为语音信号的固定时间长度,Fs为信号的采样频率。本文中采样频率一般取较大,为22050Hz。对于数组V,可以看成一段离散时间的数值序列,可以对其进行离散Fourier变换(FFT),将其变换到频域上,得到数组Y。Y为一维复数数组,我们再对Y进行频域上的搬迁,理论上只要搬迁超过3000Hz就可以实现加密的效果,但是实际中通常会取大一点。
对于搬迁(即调制)所选的频率f,f就是我们的‘密码,再对语音信号进行解密的时候,必须知道调制的频率f,才能够进行正确解密(解调),否则就会出现‘密码错误的情况,得到的结果自然也是错误的。
2 语音加密方法
2.1 移频函数[cosωct]
对于一个函数信号y=f(t) (t>0),假设其Fourier变换为[F(jω)],[F(jω)]为f(t)在频域上的表示形式。
考虑函数[g(t)=f(t)×cosωct[2]],假设g(t)对应的Fourier变换为[G(jω)],根据Fourier变换的卷积特性我们可以得到:
[G(jω)=12πF(jω)?π[δ(ω+ωc)+δ(ω-ωc)]]
利用卷积的性质可以求出:
[G(jω)=12[F(j(ω-ωc))+F(j(ω+ωc))]]
可以看出,此时的频谱向左右各平移[ωc],并且幅度变为原来的一半。并且信号的形状保持不变,但是在时域上看来,信号已经完全变化了。这时,只要我们加的[ωc]能够使得信号移动到人耳所能分辨的频率范围之外,那么就实现了加密的功能。
同样解密的时候,将再乘以[cosωct],那么得到的频域中的表达形式为:
[G1(jω)=14[F(j(ω-2ωc))+F(j(ω+2ωc))]+12F(jω)]
此时只要使用一个低通滤波器就可以将[G1(jω)]中高阶分量[F(j(ω-2ωc))+F(j(ω+2ωc))]两项滤去,从而得到原函数,不过幅度变为了原来的一半。
2.2 加密过程及结果
对于一个语音信号,其原始波形如下图所示:
该信号是一个离散时间信号,可用离散Fourier变换对其进行频域分析,得到其幅频曲线如下所示:
从这个曲线中我们可以看到,幅度最大的部分大约小于3000Hz,并且在两条最高的幅度之间还有间隙,这就证明在小于某个频率之间人类是识别不出也发不出的。鉴于此曲线,先对该信号进行低通滤波,截止频率选择3000Hz,得到幅频曲线如图3:
此处可以清晰地看到,频率大于3000Hz的分量全都被滤除了。
这时对信号进行加密,即加上信号,这里的=7000Hz,调制后得到的语音信号的幅频曲线如下图4:
该曲线横坐标可以看出,原信号的中心频率为0,此时经过载波的搬迁作用,中心频率变为了-7000Hz和7000Hz。同时从纵坐标可以看出,幅度变为了原来的一半。但是曲线的整体形状没有变化,整个信号具有保真性。
此时声音播放出来听到的都是刺耳的尖鸣声,人耳根本无法分辨出来原始的信号是什么。
此时如果进行解密,必须知道原始的载波频率的值才能够进行解调。如果不知道载波频率,比如我们此时加上一个频率为7500Hz的解调信号,得到的信号波形图如下(已滤波):
这时候幅频曲线虽然已经和原信号很接近,但是还是有一些差别,此时的声音播放出来,依旧无法分辨清楚具体内容。
正确解调后,所得的波形图基本和原信号一致,此时也能清楚分辨出信号声音内容。
3 改进的加密方法
3.1 分割加密
上述讨论的加密方法具有一定的可行性,但是由于只有一个调制频率,得到的结果加密性不强,只要对加密信号进行频谱分析,然后多尝试几次解调,基本就可以大致解密,得到原始信号的信息。
但是上述方法简单实用,如果能对上述方法进行改进,肯定是非常不错的。那么如何进行改进呢?一种很自然的想法就是加长密码长度。
前面的方法中,密码只是一个载波频率,通常只有三位有效数字(此时已经能分辨出具体语音信息了),容易被破解。但是如果单纯的加大载波频率那么效率会非常低,载波频率加大10倍,密码有效位数才能加大一位。
这里提出一种分割的思想。我们对一个语音信号分成N段,然后将每一段看成是一个待加密的子信号,然后我们对每个子信号进行加密,假如第i子信号的载波频率为,这样的话我们就得到了N个载波频率,这N个频率数字就组成了一长串密码,我们还可以对这N个数字进行位置排列,这样就可以大大加强密码的可靠性,同时实现简单。
3.2 分割加密结果
对于图3所示的信号,我们将其分割成六等份,每份所加的载波频率如下:
从这个信号幅频曲线中,虽然我们可以看出每部分的中心频率,但是无法得到每部分频率的顺序,所以很难得到正确的密码,如果将子信号数量变多,那么加密的效果就会越好。此时的声音播放出来无法分辨出来。假如我们知道了密码的一部分,即解调时各部分对应频率如下:
得到的信号幅频曲线如下:
此时得到的信号幅度曲线虽然和原信号很像,但是播放出来之后声音呈现断断续续的情况,无法分辨出正确信息。
4 结语
原始加密方法简单易行,但是可靠性不高,容易被破解。采用分割思想之后,大大提高了加密的可靠性,同时也保留了原始调制加密方法的简单性,总体来说,这种分割的思想比较有创新性,对于一般的信号加密都能够完成,简单可靠。
参考文献:
[1] 孟桥,董志芳,王琼.信号与系统MATLAB实践[M].北京:高等教育出版社,2008:122-136.
[2] 管致中, 夏恭恪, 孟桥. 信号与线性系统[M]. 北京: 高等教育出版社,2011:89-108.