自相关函数

2024-09-26

自相关函数(共9篇)

自相关函数 篇1

1 引 言

浊音信号的周期称为基音周期,是语音的重要特征参数之一,在语音编码、语音合成和语音识别等方面有相当重要的作用[1]。基音周期的估计称为基音检测,由于语音变化的不确定性和基音频率的变化范围大,迄今为止,尚未出现对各种说话人、不同使用环境和不同应用都能给出满意结果的基音检测方法[2]。经典的时域自相关函数基音检测是其中一种性能较好的算法[3],然而该算法在无噪声环境下会发生基音倍频和半频错误,在噪声环境下,这种错误发生率会显著增加[4]。

本文基于清浊音自相关函数幅度值的不同性质,提出了一种新的清浊音判决方法,并从减小共振峰影响、基音平滑两个方面对传统的时域自相关函数基音检测算法进行了改进。

2 自相关函数基音检测的原理

对于时间离散的确定信号,自相关函数的定义为[2]:

R(k)=m=-x(m)x(m+k)

式中,k为信号的延迟点数。对于随机信号或周期信号,自相关函数定义为:

R(k)=limΝ12Ν+1m=-ΝΝx(m)x(m+k)

自相关函数具有以下的性质:周期为Np的信号x(n)的自相关函数是一个同周期的周期函数,即有R(k)=R(k+Np)。浊音信号具有准周期性,因此他的自相关函数R(k)具有与x(n)相同的周期,而且在基音周期整数倍上有很大的峰值,通常取第一最大峰值点为基音周期点;而清音信号没有周期性,因此他的自相关函数也没有周期,R(k)会随着k的增大迅速衰减。自相关函数基音检测正是利用R(k)的这一性质对语音信号进行基音检测的,算法示意图如图1所示。

3 改进的自相关函数基音检测算法

改进的自相关函数基音检测流程如图2所示。算法主要包括分帧加窗、减小共振峰影响、清浊音判决、浊音信号预处理、检测基频和平滑后处理等六部分。与其他自相关函数基音检测算法[4,5]相比,本算法在清浊音判决、减小共振峰影响和平滑后处理等方面有独特或改进之处。

3.1 基于自相关函数的清浊音判决方法

浊音信号的自相关函数具有周期性,而清音信号的自相关函数没有周期性,因此,文献[6]通过判断自相关函数是否具有周期性而实现清浊音的判决。但是,由于基音周期的变化范围很大,因此判断自相关函数周期性的难度和运算量较大。

通过大量实验,发现清浊音的自相关函数不仅在周期性上有很大差异,而且在幅度上也有明显区别。浊音和清音(采样率fs=8 kHz)在不同信噪比时的归一化自相关函数分别如图3,图4所示。

由图3可以看出,对于浊音来说,在延迟样点数门限T2之后,归一化自相关函数的最大值即为第一峰值,而且该值在信噪比大于5 dB时均大于幅度门限T3。而对于清音来说,在T2之后,归一化自相关函数值均小于T3。因此,可以通过判断T2之后的归一化自相关函数最大值Rmax与T3的关系来进行清浊音判决,如果Rmax>T3则判决为浊音,否则判决为清音。T2、T3是由实验决定的判决阈值,根据清浊音的特点和大量实验证明,当Τ2[fs800,fs200],Τ3[0.3,0.5]时,可取得良好的清浊音判决效果。

3.2 减小共振峰影响的措施

基音频率的分布范围为50~450 Hz,其中100~200 Hz的情况占大多数,所以浊音信号有可能包含30~40个谐波分量。同时,由声道特性决定的语音信号的第一共振峰通常在300~1 000 Hz的范围内,这就可能导致语音的第2~8个谐波分量幅度高于基频分量。这样,丰富的谐波分量常常会令基音检测出现倍频或者半频错误[2]。

为了减少共振峰的影响,改进算法采用了三种解决措施。首先,将输入信号通过频率范围为[60,900] Hz的带通滤波器。因为最高基音频率为450 Hz,所以将上截频设为900 Hz可以保留语音的一二次谐波。下截频为60 Hz是为了抑制50 Hz电源干扰。

其次,利用中心削波函数进行中心削波:

y(n)={x(n)-Τ1,x(n)>Τ1x(n)+Τ1,x(n)<-Τ10,|x(n)|Τ1

通常,削波电平T1取本帧语音最大幅度的60%~70%。削波后信号的自相关函数在基音周期位置的峰值会更加尖锐,可以有效减少倍频或半频错误。

最后,在浊音数据进行基频检测前进行数值滤波。数值滤波器输出与输入间的关系可表示为:

y(n)=1Νi=0Ν-1x(n-i),n=0,1,2,

其中,N为窗的长度。其传递函数为:

Η(z)=1Νn=0Ν-1z-n

实验证明,数值滤波器可有效抑制第一和第二个共振峰,突出浊音语音信号的周期性,使基音估计可靠。随着数值滤波分析窗宽度N的变大,数值滤波后语音的周期性特征会变的更明显,去除声道共振峰对基音检测的影响更彻底[3]。因此,对浊音信号加上宽度N=9的数值滤波器,可使基音估计比较可靠。

3.3 基音平滑后处理

为了进一步消除自相关法估计基音周期时出现的帧间基音周期跳跃、半频点、倍频点和随机错误点,需要对基音采取平滑措施。传统的中值平滑为强制性的基音轮廓平滑,其主要缺陷就是可能平滑掉基音的某些固有突变,破坏基音周期的自然加倍或减半特征。以基音连续特征为基础的动态规划技术属于非线性平滑算法,能取得较好的平滑效果,但是运算量较大,而且需要1~3帧的延迟。

基于搜索的平滑算法[7]具有简单可靠,快速高效的特点,因此本文利用该算法进行基音平滑。设f1,f2,…,fN表示连续N帧的基音频率。对第i帧基频fi的平滑过程主要分为两种情况。首先处理倍频和半频问题,公式如下:

fi´={12fi,|12fi-fi-1|<Τ42fi,|2fi-fi-1|<Τ4

然后,利用下式处理随机错误点:

fi´={2fi-1-fi-2,|fi-fi-1|>Τ4and|fi+1-fi-1|>Τ512(fi-1+fi+1),|fi-fi-1|>Τ4and|fi+1-fi-1|Τ5fi,otherwise

其中,fi表示第i帧基频平滑后的结果,T4是连续两帧间频率差的阈值,而T5是间隔一帧的连续两帧间频率差的阈值。根据基频连续缓慢变化的特性和人发音的频率范围,可令T4=10,T5=25。两个阈值和平滑公式的作用就是限制相邻帧之间的基音频率值变化不超过T4,而隔一帧的相邻帧之间的基音频率值变化不超过T5,从而达到对基音曲线平滑的效果。

4 实验结果及分析

为了验证本文改进算法的准确性和鲁棒性,利用采样频率为8 kHz,包含清音和浊音的语音进行提取语音基音周期的实验。图5所示为语音为女声“盘旋”,帧长为400个采样点,帧移为200个点,分别采用传统的自相关方法(ACF)[2,5]与本文算法(IACF)进行基音周期检测的结果比较图。

从图5可以看出,本方法在基音周期估计的准确性和抗噪能力方面比传统的自相关方法有明显提高。在信噪比很低时,本文方法仍能取得满意的结果,而传统自相关方法甚至对一些帧的清浊音判决都发生了错误。

5 结 语

提出了一种基于自相关函数幅度值的清浊音判决方法,在此基础上,结合带通滤波、中心削波、数值滤波和基音平滑等技术,改进了自相关函数基音检测算法。实验结果表明,改进算法的清浊音判决准确率高、基音检测准确,而且具有较强的抗噪能力。

摘要:提出了一种改进的自相关函数基音检测算法:首先利用清浊音自相关函数幅度值的不同性质进行清浊音判决,然后仅对浊音段检测基音周期。在基音检测前用带通滤波、中心削波和数值滤波等方法进行预处理,去除共振峰和高频噪声的影响;在基音检测过程的后端用搜索平滑方法进行后处理,平滑掉半、倍频点和随机错误点。实验结果表明,改进算法的效果优于传统自相关算法,而且在信噪比低至5 dB时仍有良好的清浊音判决和基音检测性能。

关键词:基音检测,自相关函数,数值滤波,基音平滑

参考文献

[1]王宏.用改进的SIFT方法检测语音基频[J].现代电子技术,2001,24(2):15-18.

[2]张雄伟,陈亮,杨吉斌.现代语音处理技术及应用[M].北京:机械工业出版社,2003.

[3]Rabiner L R.On the Use of Autocorrelation Analysis forPitch Detection[A].IEEE International Conference on A-coustics,Speech and Signal Processing(ICASSP′77)[C].USA:IEEE,1977,25(1):24-33.

[4]胡瑛,陈宁,夏旭.一种改进的自相关基音检测算[J].电子科技,2007(2):25-28.

[5]付青青,吴爱平.基于Matlab的语音信号自相关基音检测[J].长江大学学报:自然科学版,2006,3(4):99-102.

[6]李仕萍,凌卫新,闵锐.清浊音判决算法在语言康复训练中的应用[J].计算机工程,2004,30(14):36-38.

[7]朱小燕,王昱,刘俊.汉语声调识别中的基音平滑新方法[J].中文信息学报,2001,15(2):45-50.

自相关函数 篇2

在介绍自定义函数的具体使用之前,不得不先介绍一下VBA,原因很简单,自定义函数就是用它创建的,VBA的全称是Visual Basic for Application,它是微软最好的通用应用程序脚本编程语言,它的特点是容易上手,而且功能非常强大。

在微软所有的Office组件中,如Word、Access、Powerpoint等等都包含VBA,如果你能在一种Office组件中熟练使用VBA,那么在其它组件中使用VBA的原理是相通的。

Excel中VBA主要有两个用途,一是使电子表格的任务自动化;二是可以用它创建用于工作表公式的自定义函数。

由此可见,使用Excel自定义函数的一个前提条件是对VBA基础知识有所了解,如果读者朋友有使用Visual Basic编程语言的经验,那么使用VBA时会感觉有很多相似之处。如果读者朋友完全是一个新手,也不必太担心,因为实际的操作和运用是很简单的。

二、什么时候使用自定义函数?

有些初学Excel的朋友可能有这样疑问:Excel已经内置了这么多函数,我还有必要创建自己的函数吗?

回答是肯定的。原因有两个,它们也正好可以解释什么时候使用Excel自定义函数的问题。

第一,自定义函数可以简化我们的工作。

有些工作,我们的确可以在公式中组合使用Excel内置的函数来完成任务,但是这样做的一个明显缺点是,我们的公式可能太冗长、繁琐,可读性很差,不易于管理,除了自己之外别人可能很难理解。这时,我们可以通过使用自定义函数来简化自己的工作。

第二,自定义函数可以满足我们个性化的需要,可以使我们的公式具有更强大和灵活的功能。

实际工作的要求千变万化,仅使用Excel内置函数常常不能圆满地解决问题,这时,我们就可以使用自定义函数来满足实际工作中的个性化需求。

上面的讲述比较抽象,我们还是把重点放在实际例子的剖析上,请大家在实际例子中进一步体会,进而学会在Excel中创建和使用自定义函数。

下面我们通过两个典型实例,学习自定义函数使用的全过程。这里实际上假设读者朋友都有一定的VBA基础。

假如你完全没有VBA基础也不要紧,当学习完实例后,若觉得自定义函数在自己以后的工作中可能用到,那么再去补充相应的VBA基础也不迟。

(一) 计算个人调节税的自定义函数

任务

假设个人调节税的收缴标准是:工资小于等于800元的免征调节税,工资800元以上至1500元的超过部分按5%的税率征收,1500元以上至元的超过部分按8%的税率征收,高于2000元的超过部分按20%的税率征收。

分析

假设Sheet1工作表的A、B、C、D列中分别存放“姓名”、“总工资”、“调节税”、“税后工资”字段数据,如图1所示。

图 1

平时使用较多的方法是借助嵌套使用IF函数计算,比如在C2单元格输入公式“=IF(B2<=800,0,IF(B2& lt;=1500,(B2-800)*0.05,IF(B2<=2000,700*0.05+ (B2-1500)*0.08,700*0.05+500*0.08+(B2-2000)*0.2)))”,然后通过填充柄复制公式到C列的其余单元格。

既然公式能够解决问题,为什么还要使用自定义函数的方法呢?

正如前面提到的两个方面的原因:一是公式看起来太繁琐,不便于理解和管理;二是公式的处理能力在面对稍微复杂一些的问题时便失去效用,比如假设调节税的税率标准会根据年龄的不同而改变,那么公式可能就无能为力了。

使用自定义函数

下面就通过此例介绍使用自定义函数的全过程,即使是初学Excel的朋友,也会感觉其操作实际上是非常简单的。

1. 为了便于测试自定义函数的计算效果,可以先把上面采用公式计算的结果删去。然后选择菜单“工具→宏→Visual Basic编辑器”命令(或按下键盘Alt+F11组合键),打开Visual Basic窗口,我们将在这里自定义函数。

2. 进入Visual Basic窗口后,选择菜单“插入→模块”命令,于是得到“模块1”,在其中输入如下自定义函数的代码(图2):

Function TAX(salary)

Const r1 As Double = 0.05

Const r2 As Double = 0.08

Const r3 As Double = 0.2

Select Case salary

Case Is <= 800

TAX = 0

Case Is <= 1500

TAX = (salary - 800) * r1

Case Is <= 2000

TAX = (1500 - 800) * r1 + (salary - 1500) * r2

Case Is >2000

TAX = (1500 - 800) * r1 + (2000 - 1500) * r2 + (salary - 2000) * r3

End Select

End Function

图 2

3. 函数自定义完成后,选择菜单“文件→关闭并返回到Microsoft Excel”命令,返回到Excel工作表窗口,在C2单元格中输入公式“=TAX(B2)”回车后就计算出了第一个员工应付的个人调节税,然后用公式填充柄复制公式到其它后面的单元格,这样就利用自定义函数完成了个人调节税的计算(图3)。

图 3

4. 从自定义函数的代码中可以看出,用这种方式,自定义函数的功能非常易于理解,同时如果税率改变,相应地变化r1、r2、r3的值即可。

通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为“Mircosoft Excel加载宏”,然后输入一个文件名,如“TAX”单击“确定”后文件就被保存为加载宏(图4),

然后选择菜单“工具→加载宏”命令,打开“加载宏” 对话框,勾选“可用加载宏”列表框中的“Tax”复选框即可,单击“确定”按钮后(图5),就可以在本机上的所有工作薄中使用该自定义函数了。

图 4

图 5

如果想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。

说明:Windows XP系统下加载宏文件的默认保存位置为:C:Documents and Settingszunyue(用户帐户)Application DataMicrosoftAddIns文件夹。

任务

为了促进销售人员的工作积极性,销售部门经理制定了销售业绩奖金制度,奖金发放的标准奖金率如下:月销售额小于等于2800元的奖金率为4%,月销售额为2800元至7900元的奖金率为7%,月销售额为7900元至15000元的奖金率为10%,月销售额为15000元至30000元的奖金率为13%,月销售额为30000元至50000元的奖金率为16%,月销售额大于50000元的奖金率为19%。同时,为了鼓励员工持续地为公司工作,工龄越长对奖金越有利,具体规定为:参与计算的奖金率等于标准奖金率加上工龄一半的百分数。比如一个工龄为5年的员工,标准奖金率为7%时,参与计算的奖金率则为9.5%=7%+(5/2)%。

分析

首先,我们在Excel中制作好如图6的Sheet1工作表,开始分析计算的方法。

图 6

如果不考虑工龄对奖金率的影响,那么可以利用嵌套使用IF函数,在D2单元格输入公式“=IF(B2<=2800,B2*4%,IF(B2& lt;=7900,B2*7%,IF(B2<=15000,B2*10%,IF(B2<=30000,B2*13%,IF(B2& lt;=50000,B2*16%,B2*19%)))))”可以进行计算。

但是,该公式的一些弊端很明显:一是公式看起来太繁琐、不容易理解,而且IF函数最多只能嵌套7层,万一奖金率超过7个,那么这个方法就无能为力了。

另一方面,由于没有考虑工龄,所以该方法不能算是解决问题了,如果我们把工龄融入到上述公式中,这样公式就会显得更加冗长繁琐,以后的管理与调整都很不方便。

使用自定义函数

下面我们看看利用Excel自定义函数进行计算的全过程,有了实例一的基础,相信大家理解起来更容易了。不过这里与实例一有一个明显的差别是,该自定义函数使用了2个参数,请大家注意体会。

1. 在上述Excel工作表中,选择菜单“工具→宏→Visual Basic编辑器”命令,打开Visual Basic窗口,然后选择菜单“插入→模块”命令,插入一个名为“模块1”的模块。

2. 接着在模块编辑窗口中输入自定义函数的代码如下(图 7):

Function REWARD(sales, years) As Double

Const r1 As Double = 0.04

Const r2 As Double = 0.07

Const r3 As Double = 0.1

Const r4 As Double = 0.13

Const r5 As Double = 0.16

Const r6 As Double = 0.19

Select Case sales

Case Is <= 2800

REWARD = sales * (r1 + years / 200)

Case Is <= 7900

REWARD = sales * (r2 + years / 200)

Case Is <= 15000

REWARD = sales * (r3 + years / 200)

Case Is <= 30000

REWARD = sales * (r4 + years / 200)

Case Is <= 50000

REWARD = sales * (r5 + years / 200)

Case Is >50000

REWARD = sales * (r6 + years / 200)

End Select

End Function

图 7

3. 从代码可以看出,我们自定义了一个名为REWARD的函数,它包含两个参数:销售额sales和工龄years。常量r1至r6分别存放着各个等级的奖金率,这样处理的好处是当奖金率调整时,修改非常方便。同时,函数的层次结构比前面的公式清晰,让人容易理解函数的功能。此外,当奖金率超过7个时,用自定义函数的方法仍然可以轻松处理。

4. 接下来用该自定义函数进行具体的计算。选择菜单“文件→关闭并返回到Microsoft Excel”命令,关闭Visual Basic窗口,返回Excel工作表。选中D2单元格,在其中输入“=reward(B2,C2)”,回车后就算出了第一个员工的奖金,然后利用公式填充柄复制该公式到后面的单元格,即可完成对其它员工奖金的计算(图 8)。

图 8

如果该自定义函数需要在其它工作薄或其它机器上使用,仿照实例一的操作方法进行即可。

四、总结

我们通过两个典型的实例讲述了Excel中自定义函数使用的全过程,相信大家都已经会到,其操作过程还是相当简单的。

如果你觉得自己的工作可能需要自定义函数,想进一步学好提高使用自定义函数的水平,笔者想给出如下几点建议。

第一点、尽力全面熟练地掌握Excel内置的函数。能用内置函数妥善解决的问题,就不必使用自定义函数。实际上,自定义函数的执行效率当然是比Excel内置函数的执行效率慢的。

第二点、认真掌握好VBA的基础知识。这点很容易理解,如果连VBA的基本规则都不甚清楚,那么别说是写出精致的自定义函数,就是写出能解决问题的自定义函数也还大有疑问。

第三点、具体写自定义函数代码之前,应该认真分析自己要处理的实际问题,如果这个问题有实际的数学函数模型,那么最好列出这个函数的解析式。

自相关函数 篇3

基于FFT的连续信号谱分析方法,直接用傅里叶变换对有限时间序列计算功率谱,求取信号频率。

现代谱估计方法———最大熵谱法。应用最大熵谱法首先建立自回归模型来计算功率谱。

小波分析方法。小波变换作为一组带通滤波器,适用于非稳定信号的工具。

自适应滤波方法。可以比较准确地测出传感器输出信号的频率及在该频率下的幅值,通过换算测得质量流量。

示波器测量信号周期广泛采用过零检测方法。过零检测方法通过测量两个连续具有相同斜率且交越触发电平(通常是不为零)的两个采样点之间的时间,根据该时间确定采样信号的周期,此方法的计算量小,被大多数示波器厂家采用。可是周期测量精度与信噪比有关,这也导致了过零检测方法使示波器测量周期信号的周期受限于信噪比。

自相关函数表示波形自身不同时刻的相似程度。与波形分析、频谱分析相比,它具有能够在强噪声干扰情况下准确地识别信号周期的特点。基于自相关函数的测量方法比过零检测法需要更强的计算能力,但更具有准确性。

1 调制波周期测量

上述方法都无法测量调制信号的周期。下面介绍基于自相关调制波周期长度估计的方法。

假设原始信号为s1(t),载波信号为c(t),采用FM调制,调制后的信号为x(t)。设采样周期为Ts,采集得到数据x(n),x(n)=x(nTs),为了分析方便。假设s(t),c(t)为正弦信号,s(t)和c(t)的初始相位都等于0,fs为Sampling rate of signal,Fc为Carrier frequency,t=[0:fs]/fs为Sampling times.

首先计算自相关函数R(n),和最大的R(n),并归一化R(n)得到R'(n):

选择参考电平r,结合参考电平,将R'(n)按照公式(4)处理。

然后,设f(n)为Gs阶高斯函数滤波,N为采样的样点数,f(n)为输出脉冲响应:

运用MATLAB实现为:

图1所示为自相关函数波型。图2所示为高斯函数滤波。

最后,检测所得到的y(n)波形中的波头数,要求y(n)波形中的波头数为3个或者3个以上,第一次估计的周期T就等于最中间的波头。

2 结束语

针对数字示波FM周期测量中存在的杂波干扰问题,研究了基于自相关函数增加数字示波FM周期测量功能如何实现,从而作为功能函数添加到示波器函数中,增加数字示波器的周期测量功能。

摘要:随着数字信号处理能力的提高,数字示波器发展为测量幅度和频率的极其有用的电子测量仪器。通过对自相关函数增加数字示波FM周期测量的改进算法增加示波器的测量功能,提高仪器处理能力,有效地保证采样分辨率、峰值、周期、频率以及上升时间等参数的测量都获得很好品质。

关键词:自相关函数,周期测量,示波器

参考文献

[1]James H.Mc Clellan.数字信号处理引论[M].北京:科学出版社,2005:45-46.

[2]黄诚惕.基于信号自相关域可分特征的信号处理技术研究[D].成都:电子科技大学,2012.

[3]石博强.MATLAB数学计算范例教程[M].北京:中国铁道出版社,2004:59.

[4]史习智.信号处理与软计算[M].北京:高等教育出版社,2003:48.

[5]赵贻玖.稀疏模拟信号压缩采样与重构算法研究[D].成都:电子科技大学,2012.

幂函数其他相关 篇4

当x为不同的数值时,幂函数的值域的不同情况如下:

1.在x大于0时,函数的值域总是大于0的实数。

2.在x小于0时,则只有同时q为奇数,函数的值域为非零的实数。

而只有a为正数,0才进入函数的值域。

定义域

当a为不同的数值时,幂函数的定义域的不同情况如下:

自相关函数 篇5

Excel中大量的公式函数可以应用选择, 但是Excel中并不含有有关混凝土砼判定的函数, 因此我们可以通过在Excel中编制自定义函数来进行相应的测算。

1 Excel的介绍

Microsoft Excel是微软公司的办公软件Microsoft office的组件之一, 是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。一般说来, Excel主要用来进行有繁重计算任务的预算、财务、数据汇总等工作, Excel中大量的公式函数可以应用选择, 使用Microsoft Excel可以执行计算, 分析信息并管理电子表格或网页中的数据信息列表与数据资料图表制作, 可以实现许多方便的功能, 带给使用者方便。Excel中包含了很多的函数, 但是其内置的函数并不一定总是满足我们的需求, 这时就可以通过定义自己的函数来解决问题。

2 自定义函数介绍

自定义函数是我们在Excel中设定的符合自己需要的函数, 在有些工作中, 我们可以选用Excel内置的函数来完成任务, 但是这样做有的时候会发现公式可能会会很冗长、繁琐同时可读性很差, 因此我们就需要使用自定义函数来进行简化。有时候在工作中, 需要使用的函数在Excel的内置函数库中无法找到, 这时候就需要我们使用自定义函数来满足实际工作中的个性化需求。在Excel中自定义函数是使用VBA来进行创建的, VBA是新一代标准宏语言, 是基于Visual Basic for Windows发展而来的。它与传统的宏语言不同, 传统的宏语言不具有高级语言的特征, 没有面向对象的程序设计概念和方法。而VBA提供了面向对象的程序设计方法, 提供了相当完整的程序设计语言。VBA易于学习掌握, 可以使用宏记录器记录用户的各种操作并将其转换为VBA程序代码。这样用户可以容易地将日常工作转换为VBA程序代码, 使工作自动化。因此, 对于在工作中需要经常使用Office套装软件的用户, 学用VBA有助于使工作自动化, 提高工作效率。另外, 由于VBA可以直接应用Office套装软件的各项强大功能, 所以对于程序设计人员的程序设计和开发更加方便快捷。VBA主要能用来扩展Windows的应用程式功能, 特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic脚本。VBA是微软最好的通用应用程序脚本编程语言, 功能强大。使用VBA可以规范用户的操作, 控制用于的操作行为, 同时使操作界面人性化, 方便用户的操作, 多个步骤的手工操作通过执行VBA代码可以迅速的实现。

3 在Excel中设定自定义函数的方法

Excel内置的函数虽然很多, 但是并不能满足我们的所有需要, 我们可以自定义一个函数, 来完成一些特定的运算, 下面我们列举自定义函数的步骤进行介绍。

3.1 执行“工具→宏→Visual Basic编辑器”菜单命令 (或按“Alt+F11”快捷键) , 打开Visual Basic编辑窗口。

3.2 在窗口中, 执行“插入→模块”菜单命令, 插入一个新的模块———模块1。

3.3 在右边的“代码窗口”中输入相应的代码:

3.4 关闭窗口, 自定义函数完成。

使用上述步骤完成的自定义函数只能在设定的工作簿名中完成设定的功能函数。

4 工程应用实例

根据上面介绍的操作步骤, 进行操作, 首先需要执行步骤:

(1) “工具→宏→Visual Basic编辑器”菜单命令 (或按“Alt+F11”快捷键) , 打开Visual Basic编辑窗口。 (2) 在窗口中, 执行“插入→模块”菜单命令, 插入一个新的模块———模块1。 (3) 在右边的“代码窗口”中输入相应的代码:该功能函数命名为tpd函数, 此功能函数设定了三个参数, 可以检测三个检测值, tpd函数是根据《公路工程水泥及水泥混凝土试验规程》 (JTG E30-2005) (T0553-2005) 立方体抗压强度试验方法中所规定的方法进行编制的, 从而对检测出来的数据进行及时的归纳, 减少因计算而出现的误差, 提高了数据处理的工作效率, 计算人员可以很方便的根据处理出来的数据而做出判断。自定义函数将人们从繁琐的数据后期处理中解放了出来, 有很高的实用价值。而且这个函数采用了模块化的设计, 可以根据需要进行相应的修改, 就能很轻松的变为类似功能的函数, 下面我们对函数中的设定要求进行说明:现将水泥混凝土立方体抗压强度试验方法的结果判定要求介绍如下:以3个试件测值的算术平均值为测定值, 计算精确至0.1MPa。三个测值中的最大值或最小值中如有一个与中间值之差超过中间值的15%, 则取中间值为测定值;如最大值和最小值与中间值之差均超过中间值的15%, 则该组试验结果无效。

代码如下:

输入完成后, 回到Excel工作表界面, 只需输入“=tpd (*, *, *) ”就可计算出相应的数据。*--代表要计算的三个强度值, 可以是数值, 表达式, 或单元格引用。

5 结束语

文章介绍了怎样在Excel中设定自定义函数来简化在工程试验中对于数据的处理, 希望读者可以从中有所借鉴。

摘要:文章主要介绍在没有专业的测量软件的情况下, 通过使用在电脑上广泛使用的Excel软件编制自定义函数, 通过Excel进行计算。Excel中大量的公式函数可以应用选择, 使用Microsoft Excel可以执行计算, 分析信息并管理电子表格或网页中的数据信息列表与数据资料图表制作, 可以实现许多方便的功能, 带给使用者方便, 但是Excel中本身是含有大量的函数可以调用, 但是其本身并不含有有关混凝土砼判定的函数, 因此可以通过在Excel中编制自定义函数来进行相应的测算。

关键词:Excel,自定义函数,工程试验

参考文献

[1]何凌霄.Excel中文本数据的排序方法[J].农村电工, 2009, 12.

函数满足自共轭条件的求解二法 篇6

对于IRn上的凸函数f, 我们定义一个新的函数

f*:f* (x*) =sup{〈x*, x〉-f (x) |x∈IRn}, ∀x*∈IRn.

这个新的函数f*叫做f的共轭函数.

满足条件f (x) =f* (x) 的函数我们称之为自共轭函数.

给出函数f:E→ (-∞, ∞], 试证当且仅当f (x) =f* (x) 存在的充分必要条件是对于所有属于E的点x有undefined

证法一 当f (x) =f* (x) 时,

undefined

根据f (x) =f* (x) 和Fenchel-Young不等式f (x) +f* (φ) ≥〈φ, x〉, 可得

undefined

undefined

证法二 根据f (x) =f* (x) 和Fenchel-Young不等式f (x) +f* (φ) ≥〈φ, x〉, 得

undefined

根据共轭函数的定义和上式, 得

undefined

可知undefined

由①②可知undefined

结 论

满足自共轭条件的求解方法中多次使用了共轭函数的定义和Fenchel-Young不等式, 因此在凸分析的学习中要注意这两方面知识点的学习和运用, 以使我们对偶系 (X, X*) 中局部拓扑性质的研究打好基础.

参考文献

[1]Borwein J.M.&Lewis A.S., Convex Analysis and Nonlinear Optimization:Theory and Examples[M].Springer-Verlag.New York, 2000:61.

[2]Borwein J.M.&Lewis A.S., Convex Analysis and Nonlinear Optimization:Theory and Examples[M].Springer-Verlag.New York, 2000:66.

[3]Rockefeller.R.T.Convex Analysis[M].Princeton University Press.Princeton.New Jersey, 1970:105.

自相关函数 篇7

EXCEL函数是EXCEL的精髓,辅导员工作千头万绪,常常需要对各种数据进行分类、统计,处理,如果能熟练运用EXCEL函数,则能大大提高工作效率。如2008年秋季开学伊始,全国各高校忙于统计报送来自五十一个"5·12"汶川地震国家级重灾区县(市、区)的学生名单;年底,四川省高校又要在二天时间内紧急报送来自四川省人民政府确定的十五个省级地震重灾区学生名单,以便对灾区学生减免学费、发放生活补贴、发放特别助学金等。这些优惠政策让高校学生工作管理人员又喜又忧:喜的是重灾区学生可以得到数额不小的资助;忧的是如何高效准确地将他们找出来,不漏报,不错报。特别是四川省内高校的重灾区学生人数众多,时间紧,任务重,要做好这项工作绝非易事。为完成此项工作,一般采用的方法或者以班为单位由学生自行登记申报,或者由辅导员从含有家庭住址的学生信息表中查找。这两种传统方法都存在巨大缺陷:学生自行登记申报时,少数学生本是货真价实的重灾区学生,却因在查看重灾区县市名单时走马观花,没看清楚,没有正确登记,痛失良机。更糟糕的是本次申报时毕业班学生正在全国各地实习,联系诸多不便,学生自行申报登记无从下手。辅导员亲自排查也困难重重,因为这种方法首先要求辅导员记住五十一个重灾区县、市名称,然后凭肉眼从含有数百个学生家庭住址的电子表格或纸质文档中苦苦查寻,其难度之大可想而知。哪怕是查了一遍又一遍,查了一天又一天,也很难保证不出差错。本人经过一番探索,利用身份证号码信息挖掘与Excel自定义函数轻松化解了这个难题。

二、用身份证号码信息与自定义Excel函数查找地震重灾区学生

1、构建身份证代码与出生地对应数据库

如今身份证几乎全为第二代身份证,由18位数字组成,其中1~6位为出生地(公民第一次申请身份证时常住户口所在地的行政区划)代码,7~10位为出生年份,11~12为出生月份,13~14位为出生日期,17位代表性别(奇数为男,偶数为女)。用Excel内置函数可直接从身份证号码中提取个人的出生日期、性别、计算年龄,却不能直接获取出生地信息。因此介绍用Excel函数从身份证号码中获取出生日期、性别、年龄信息的文章不少[1,2,3,4,5],但如何获取出生地信息的文章则是个空白。实际上,利用Excel函数提取身份证号码中的出生地信息也不难实现,关键是建立一个身份证前六位代码与出生地所在省、市、县对应的数据库。

在国家统计局网上下载全国县及县以上行政区划代码表(国家标准GB/T 2260-1999)复制到Excel工作表中,将其命名为“身份证代码”,将此工作簿保存为“全国行政区划代码”,如图1(仅以部分代码为例,下同),A列为代码,B列为行政区划名称,但是这样的数据还不便使用。将全国二千多个县、市、区全部整理成省、市、县(区)的标准形式,如“双流县”应整理成“四川省成都市双流县”,如图2。由于利用Excel内置的mid函数或left函数可快速将身份证号码中的前六位代码提取出来,至此,身份证代码与出生地对应数据库构建成功了。这一步虽然工作量较大,但只要灵活应用连字符"&"与填充柄还是不难完成的[6]。

2、利用身份证号码挖掘出生地信息

因种种原因,学生家庭住址中省、市、县的填写格式极不规范、不一致,如“四川省绵阳市梓潼县”可能有“四川省梓潼县”、“四川绵阳梓潼”、“四川梓潼”等种种填写方法,这种不规范的家庭住址不便用来提取出生地信息,也不便进行地震灾区学生的查找统计,而从身份证号码中挖掘得到的出生地信息则整齐划一,高度规范。所以要从身份证号码中挖掘出生地信息,而不直接利用学生家庭住址或从家庭地址中提取。身份证代码与出生地对应数据库构建好后,获取出生地信息则如探囊取物了:首先将包含学生学号、姓名、身份证号码、家庭住址的电子表格复制到全国行政区划代码工作簿的一个工作表中,命名为“学生基本信息”工作表(为保护隐私,删除姓名列),如图3所示。在D2单元格中输入"=VLOOKUP(VALUE(LEFT(B2,6)),身份证代码!$A:$C,3,0)",回车,并向下填充,学生出生地信息便提取成功了,如图4所示。

3、自定义函数一网打尽灾区学生

虽然EXCEL内置函数种类繁多,有强大的数据处理能力,但要想将来自五十一个国家级地震重灾区的学生一次性地查找出来,却也无能为力,徒唤奈何,因为EXCEL查找函数只能设置一个查找条件,自定义筛选也只能定义两个筛选项目。既然没有现成的函数可用,不妨自力更生,利用EXCEL VBA自定义函数来实现多条件查找:打开“学生基本信息”工作表,按"Alt+F11"组合键,打开VBA编辑器窗口,单击菜单“插入”→“模块”插入一个新模块,默认情况下为“模块1”,然后在模块1的代码窗口中输入以下代码:

代码写好后退出设计模式,自定义的高级查找函数My Find已大功告成。现在我们来体验一下My Find的强大威力:在“学生基本信息”工作表的E1中输入列标题“是否重灾区”,将五十一个地震重灾区县市名单复制粘贴到F2:F52单元格区域(为确保精准查询,各重灾区县市区前面冠以其管辖它的地州市名称,否则“会理县”将被看成“理县”查找出来),在E2单元格中输入"=My Find(D2,$F$2:$F$52)",回车,拖动填充柄向下填充公式,重灾区学生E列相应单元格中无一例外地被注明“是重灾区”,如图5。再执行“数据”菜单中的“筛选”命令,然后选择子菜单中的“自动筛选”命令,将重灾区的学生筛选出来,至此,该工作表中所有地震重灾区学生便被一网打尽了。通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为"Mircosoft Excel加载宏",然后输入一个文件名,如"MyFind",单击“确定”后文件就被保存为加载宏。然后选择菜单“工具→加载宏”命令,打开“加载宏”对话框,勾选“可用加载宏”列表框中的"MyFind"复选框即可,单击“确定”按钮后,就可以在本机上的所有工作薄中使用该自定义函数了[7]。

三、结束语

Excel内置查找函数如find,search等只能进行单一条件查找,在日常数据处理中不时遇到多条件查找,如地震重灾区学生查找,广州助学金资助地区学生查找等。从学生身份证号码中挖掘出其出生地所在省、市、县,结合EXCELVBA自定义查找函数,只要轻点鼠标,弹指之间便可一网打尽地震重灾区学生,实为妙策。诚然,个别学生出生地与目前家庭住址所在地可能不同,如果先将从身份证号码中挖掘出的出生地作为家庭住址所在地,打印出来发给学生核实签字,把个别不一致的改过来,结合核实后的家庭住址与自定义函数查找地震重灾区学生,则可万无一失。

参考文献

[1]张小华.巧用Excel函数提取身份证中的出生日期[J].信息技术教育,2006,(2):78.

[2]张朝辉,魏涛.让Excel自动提取身份证号码中的个人信息[J].办公自动化,2005,(11):55~56.

[3]张山风.用Excel函数查看身份证号码中的个人信息[J].办公自动化,2007,(3):25~26.

[4]陈秀峰.用Excel炸干身份证号码中的隐藏信息[J].电脑爱好者,2004,(3):47~49.

[5]孙艳.巧用身份证号码提高学生信息管理水平[J].中国教育信息化,2008,(16):76~77.

[6]张宏.Excel数据处理与分析[M].北京:电子工业出版社,2005.

自相关函数 篇8

现实中的多数优化问题要求找到一个解,不仅要满足最优性,而且要满足一个或多个约束条件。这些问题统称为约束优化问题COPs(Constrained Optimization Problems)。约束优化问题是难以求解的和具有挑战性的,求解约束优化问题被认为是计算机科学、运筹学和优化领域中具有挑战性的研究领域。约束进化计算是求解COPs主要方法之一。本质上,约束进化计算可以看成是约束处理和进化算法的结合[1]。因此,在设计一种求解COPs的新方法时,一个高效的进化算法需要与一种有效的约束处理结合,以便获得具有竞争力的性能。

根据进化计算的约束处理技术的进展,主要分为三类:罚函数方法、可行规则方法和多目标方法[1]。罚函数方法主要思想是在目标函数中加入一个惩罚函数,将约束问题转换成一个无约束问题来处理,因其原理简单和易于实现,罚函数方法是应用最为广泛的约束处理方法。通过在目标函数中加入一个惩罚函数,将约束问题转换成一个无约束问题,通常,有三种主要的罚函数方法:死罚函数方法、静态罚函数方法和自适应罚函数方法。

最近,Schluter和Gerdts提出了一个新的自适应约束处理方法:Oracle罚函数方法[2]。并将该方法与蚁群优化ACO方法结合用于求解复杂的混合整数优化问题[3]。结果证明Oracle罚函数是进化算法中求解约束优化的一种新的有效方法。该方法具有良好的鲁棒性、容易实现和控制等优点,在发现全局最优解方面具有较高的潜力[2,3]。

尽管Oracle罚函数方法与ACO结合的方法求解混合整数非线性规划问题进行过研究,但还没有见到有关Oracle罚函数方法和DE用于求解COPs的报道。最近,为减少参数设置对算法性能的影响,自适应DE已经成为研究的热点[4,5,6]。近来,三种典型的自适应DE:Sa DE[4],JADE[5]和j DE[6]。已在连续优化问题领域表现出巨大的潜力。本文将自适应约束处理的Oracl罚函数方法分别和上述三种自适应差分进化算法相结合用于求解COPs,并检验新算法的有效性。

1 Oracle罚函数方法及其改进

1.1 Oracle罚函数方法

Oracle罚函数方法属于一类自适应罚函数方法,这种方法的主要思想是将目标函数转换成一个附加的等式约束g0(x→)=f(x→)-Ω=0,参数Ω称为Oracle。在新的描述中,目标函数是多余的,可以声明成一个恒等于0的函数f~(x→)≡0。新的约束优化问题可表示成如下的形式:

其中me和m分别为等式约束和不等式约束的个数。在这种新的描述下,罚函数中的目标函数和罚函数的剩余函数可以自适应地调整。罚函数可以定义成如下形式:

其中是目标函数,Ω是Oracle参数,α是自适应系数,具体定义参见文献[2]。

是剩余函数,使用以下范数l∞:

该方法对Ω参数具有鲁棒性,Schlüter和Gerdts推荐其初值可以设置为109或106。该方法对Ω参数具有鲁棒性。Oracle罚函数具有如下优点:第一,它仅有一个需要用户调节的参数;第二,该方法对Oracle参数具有鲁棒性;第三,与传统方法相比,它显示出更好的性能。因为它是通用的,所以可以很容易应用于随机自然启发式方法中。更多有关的信息可以在文献[2,3]中找到。

1.2 改进的Oracle罚函数方法

根据进化计算国际会议上关于COPs的报道[7],解x→认为是可行的,如果|hj(x→)|-ε≤0,j=1,2,…,me,并且gj(x→)≤0,j=me+1,…,m,这里h(x→)为等式约束,ε为等式约束的违反容忍值,推荐采用0.0001。尽管Oracle罚函数显示出比其它罚函数方法更好的性能,但却不能直接应用于COPs。原因在于它们采用了不同的模型描述方式和约束违反容忍标准。具体而言,在原始的Oracle罚函数中,对所有约束,包括等式与不等式,都应用约束违反容忍。然而在进化计算会议标准中约束违反容忍仅应用于等式约束。此外,在Oracle罚函数方法中要求所有约束gj(x→)≥0而在通常的COPs描述中要求gj(x→)≤0。因此,当用其来对COPs进行约束处理,Oracle罚函数方法必须要进行修改。

这里,我们定义了新的约束函数g'(x→),表示方法如下:

由于的引入,所有的等式约束都转换成不等式约束,因而COPs中所有的约束都转换成了不等式约束,因而用范数l∞表示的剩余函数可以简化为如下形式:

根据可行解的标准,约束违反容忍值为0。

简单来说,改进的Oracle罚函数方法可以描述如下:

(1)使用式(4)来将所有原始约束(包括等式和不等式约束)转换成大于0的不等式约束;

(2)采用式(5)来计算剩余函数值;

(3)用式(2)来评估候选解。

从上面描述中可以看出,与Oracle罚函数方法一样,改进的Oracle罚函数方法也是通用的,可以用于任何类型的优化算法中,它可以很容易地整合到各种进化算法中。

2 自适应约束差分进化算法

2.1 自适应约束DE简介

Sa DE是一种采用在进化从四种向量产生策略中进行学习,记录每种策略的成功率和失败率,优先选择成功率高的向量产生策略。对于控制参数也采用一种学习机制来进行自适应调整方法,更多信息详见文献[4]。JADE采用的是利用多个最好解的“current-to-pbest”个体产生策略,并提出一种基于前期成功率之上的缩放因子F和交叉概率Cr调整方法,详细信息详见文献[5]。JDE采用一种按照0.1的概率分别从均匀分布[0.1,1]和[0,1]中产生DE新的缩放因子F和交叉概率Cr,自动实现对控制参数的调整,有关信息参见文献[6]。为表示方便,将基于Oracle罚函数方法的Sa DE、JADE和j DE三种约束自适应DE算法分别称为OBSa DE、OBJADE和OBj DE。

2.2 算法框架

步骤1:初始化控制参数库、终止条件、种群大小和Oracle参数Ω;

步骤2:随机产生初始化种群,根据改进的Oracle罚函数方法中的式(2)来计算罚函数值,并记录最好个体信息,设置进化代数G=0;

步骤3:对种群中每一个个体,利用对应的自适应差分进化算法的新个体产生方式产生新的个体;

步骤4:根据式(2)计算新个体的罚函数值,将最优个体作为尝试向量;

步骤6:判断是否种群中所有的个体都执行完。若未执行完,则转步骤3继续执行。否则,执行步骤7;

步骤7:找出种群中的最好个体,更新最好个体信息,G=G+1;

步骤8:判断是否满足终止条件,若满足,则输出最好个体信息及对应的目标函数值,执行完成。否则,转步骤3继续。

3 实验研究

3.1 实验环境

为检验提出的算法的优化性能,采用文献[7]提出的11个广泛使用的测试函数。这些问题已经广泛用于对各种约束优化算法进行测试。有关这些函数的具体定义可以在对应的文献中找到。表1中给出了这11个问题的基本信息。其中“n”,“LI”,“NI”,“LE”和“NE”分别表示决策变量、线性不等式、线性等式和非线性等式的个数,“f*”是已知的最优值。

采用本文提出的算法对测试函数进行寻优的主要过程可描述如下:

(1)根据测试函数的约束条件和目标函数,利用改进的Oracle罚方法中的式(2)计算每个个体适应度值,将原来的约束函数优化问题转换成一个无约束优化问题;

(2)利用自适应差分进化算法产生新的个体;

(3)计算新个体的适应度值,根据选择进入下一代的个体。

(4)重复上述步骤(2)、(3)直到满足算法结束条件。输出最优解,并计算目标函数值。

算法采用Matlab 7.5进行编码,实验运行于Intel Cor(TM)2 Duo 1.8 GHz CPU和3 GB内存的笔记本电脑上。为方便与文献[9]提出CDE进行比较,OBSa DE、OBJADE、OBj DE三种算法最大评估次数MAX_FES均设置为240 000,种群规模NP设置为30,Ω参数设置为109。每个测试问题独立进行25次独立实验。将实验中的目标函数的最好值,平均值,最坏值和标准差用于比较。

3.2 测试结果与讨论

对于11个测试问题,将OBSa DE、OBJADE、OBj DE和最近文献[8]中提出的一种带有动态变量的DE和自适应约束处理方法:DUVDE+APM四种算法的计算结果在表2中列出。

从表2中可以看出,对于绝大多数测试问题本文提出的OBSa DE、OBJADE、OBj DE三种算法均可以得到高质量的解。相对于最近提出的DUVDE+APM而言,除g5外,对于其他10个测试函数,本文提出的三种算法均要优于DUVDE+APM。此外,需要注意的是DUVDE+APM的最大评估次数为350 000,而本文提出的算法仅为240 000。

对于测试函数g3,除OBJADE可以找到最优解外,其他二种测试函数均不能找到最好解,且三种方法的平均值与g3的最优值之间差距较大。这说明采用本文提的方法对测试问题g3难以达到满意的效果。整体而言,OBSa DE、OBJADE和OBj DE三者中,OBj DE的性能要略逊于其他两种。

*最大评估次数为350 000。

Huang等人提出了一种基于协同进化的DE方法:CDE,用于求解COPs,并给出了求解g1、g2、g4 g6和g9的计算结果[9]。为进一步检验新方法的有效性,将OBSa DE的计算结果与文献[9]中给的结果进行比较,两种算法的计算结果见表3。从表3中的结果可以看出,对这于这5个问题,OBSa DE都可以找到全局最优解。而CDE对于g2和g9两个函数却不能找到全局最优解。此外,对于平均值而言,OBSa DE的计算结果均要优于CDE。从标准来看,OBSa DE的标准差要远小于CDE的标准差。因此,对于这5个测试函数而言,OBSa DE在性能上要明显优于CDE。

4 结语

为有效求解约束优化问题,本文对Oracle罚函数进行改进,并将其与三种典型自适应DE算法相结合,提出了三种自适应约束DE算法。利用11个典型的测试函数对四种算法的性能进行了检验,结果表明OBSa DE、OBj DE和OBJADE均表现出良好的优化性能,且要优于最近提出的DUVDE+APM算法。进一步的比较显示,OBSa DE的寻优性能要高于文献中的提出CDE方法。此外,因该方法是自适应的,具有较少的用户参数,所以提高了算法实用性。本文的研究为约束优化问题的求解提供了一种新的方法。

摘要:为有效求解约束优化问题,减少算法参数,提出基于Oracle罚函数方法的自适应约束差分进化算法。为满足求解优化问题的常用标准,提出一种改进的Oracle罚函数方法。将改进的Oracle罚函数方法与三种自适应差分进化算法相结合,提出三种自适应约束差分进化算法。对11个典型测试函数的优化结果验证了Oracle罚函数方法与自适应差分进化算法结合的有效性。与参考文献中提出的算法的比较结果表明该方法具有良好的寻优性能,因此基于Oracle罚函数方法的自适应约束差分进化算法是一种有效约束优化方法。

关键词:罚函数,自适应,约束优化,差分进化

参考文献

[1]王勇,蔡自兴,周育人,等.约束优化进化算法[J].软件学报,2009,20(1):11 29.

[2]Schlüüter M,Gerdts M.The oracle penalty method[J].Journal of Global Optimization,2010,47(2):293 325.

[3]Schlüter M,Egea J A,Banga J R.Extended ant colony optimization for non-convex mixed integer nonlinear programming[J].Computers&Operations Research,2009,36(7):2217 2229.

[4]Qin A K,Huang V L,Suganthan P N.Differential evolution algorithm with strategy adaptation for global numerical optimization[J].IEEE Transactions on Evolutionary Computation,2009,13(2):398 417.

[5]Zhang J,Sanderson A C.JADE:adaptive differential evolution with optional external archive[J].IEEE Transactions on Evolutionary Computation,2009,13(5):945 958.

[6]Brest J,Greiner S,Boskovic B,et al.Self-adapting control parameters in differential evolution:A comparative study on numerical benchmark problems[J].IEEE Transactions on Evolutionary Computation,2006,10(6):646 657.

[7]Liang J J,Runarsson T P,Mezura-Montes E,et al.Problem definitions and evaluation criteria for the CEC 2006 Special Session on Constrained Real-Parameter Optimization[R].Technical Report,Nanyang Technological University,Singapore,2006.

[8]Silva E K,Barbosa H J C,Lemonge A C C.An adaptive constraint handling technique for differential evolution with dynamic use of variants in engineering optimization[J].Optimization and Engineering,2011,12(1 2):31 54.

自相关函数 篇9

关键词:Hash函数,归属地,查询

1 引言

随着互联网应用的深入, 特别是微博、 微信、 朋友圈等社交网络的兴起, 手机使用功能的多元化, 使得人们每天的生活行为产生大量的数据信息, 如何快速地从大量数据中提取价值信息成为当前计算机应用领域的重要课题。 在手机应用中, 来电归属地显示已成为智能手机必备的功能, 其基本做法是将来电号码在已建索引的归属地数据库中进行查询匹配, 返回相应的归属地结果。 但是, 在对来电号码进行大数据量分析时, 需要对成千上万的号码进行电话号码归属地匹配, 反复多次查询数据库, 效率不高, 结合电话号码的结构特点, 设计了自定义Hash函数, 对归属地数据进行缓存, 实现了归属地直接寻址匹配, 大幅提升了号码归属地匹配的性能。

2 方法

现有互联网公开的归属地数据库, 通常包含电话号码、归属地两个字段, 其中手机号码类通常包含条目约30 余万条, 固话类通常包含条目325 条。

2.1 手机号码归属地Hash函数设计

国内手机号码通常由11 位数字组成, 其前7 位为归属地代号, 但由于第1 位均为1 开头 (主要包括18x、 17x、 15x、13x等号段) , 因此手机号码的归属地匹配只涉及到手机号码的第2 至第7 位, 共6 位数字, 最多不超过1000000 种可能情况。 采用大小为1000000 的一维字符串数组Mobile来缓存归属地数据库, 数组下标由手机号码的第2 至第7 位转换为整数得到, 下标对应的数组值表示该号码对应的归属地。 在进行匹配时, 只需取待匹配号码的第2 至第7 位, 以数组下标的形式直接寻址访问mobile数组即可获得对应的归属地, 避免了查询带来的计算开销。

对于字符串类型手机号码x, 其哈希地址计算如下:

2.2 固话号码归属地Hash函数设计

固话号码前的国内区号分为3 位和4 位两种, 在计算时要区分对待, 但最多不超过1000 种可能, 采用大小为1000的一维字符串数组tel来缓存区号归属地, 如图2 所示。

对于字符串类型固话x, 其哈希地址计算如下:

在匹配固定电话归属地时, 因国内固定电话从11 位至13位不等, 无法判断号码应该取几位来匹配归属地。 在处理固定电话时, 上述两种情况均计算, 取缓存数组中非空值作为最终的归属地匹配结果。

3 编程实现

3.1 缓存归属地数据

手机类 (mobilearea为手机数据库归属地表) :

固话类 (telarea为固话区号数据库归属地表) :

3.2匹配归属地数据

手机类 (tel No为待匹配号码) :

固话类 (tel No为待匹配号码) :

4 性能对比

为对比归属地Hash匹配性能, 随机生成1000 个、 2000个、 5000 个手机号码, 对数据库查询和自定义Hash函数两种方法进行对比。 测试在一台普通微机上进行, 该机器配置i55470 四核处理器, 8G内存, 安装Windows 8 操作系统和Oracle 11g数据库。

从测试结果表1 来看, 数据库查询方式的批量匹配性能随着号码数目的增加, 其耗时也成倍增加, 究其原因, 其匹配过程需要反复查询数据库, 开销较大; 而自定义Hash函数利用号码的特点, 直接将号码映射为数组地址, 时间开销很少, 且不会随着号码数目的增多有明显变化, 仅仅是在缓存归属地数据时, 30 万条归属地条目仅占用了约4MB的内存空间, 在大数据量条件下优势明显。

5 结语

小数据量下的传统计算方法或方式在遇到大数据量时并不一定适用。 比如所研究的号码归属地匹配问题, 在针对少量或几个号码进行匹配时, 数据库查询方式无需初次缓存的耗时, 更具优势。 但在遇到大数据量的情况, 反复查询的开销与号码数成正比, 导致性能急剧下降。 所提出的自定义Hash函数, 将归属地数据缓存后, 在匹配时完全避免了Hash冲突, 可大幅提升大数据量下的归属地匹配性能。

参考文献

[1]徐君锋.手机归属地查询.电脑编程技巧与维护, 2007, (8) :19-22.

[2]郭毅棋.基于Android的手机号码归属地查询系统的设计与实现.厦门城市职业学院学报, 2013, 15 (2) :43-47.

上一篇:高校审计案例教学下一篇:法医检验