当前位置:文档之家› 基于MATLAB的自相关函数基音检测的优化

基于MATLAB的自相关函数基音检测的优化

基于MATLAB的自相关函数基音检测的优化
基于MATLAB的自相关函数基音检测的优化

系统软件与软件工程本栏目责任编辑:谢媛媛Computer Knowledge and Technology 电脑知识与技术第5卷第36期(2009年12月)基于MATLAB 的自相关函数基音检测的优化

王丽

(青海师范大学物理系语音与图像研究室,青海西宁810008)

摘要:基音是语音信号的一个重要参数,它是指发浊音时声带振动所引起的周期性。基音的提取是语音处理中的重要任务。目前对基音的检测方法有很多,典型的就有自相关法,AMDF (短时平均幅度差)法,倒谱法等等。这里介绍一种自相关和倒谱相结合的算法,较传统的自相关法有一定的改进和优化。

关键词:自相关;倒谱;三电平中心削波

中图分类号:TP391文献标识码:A 文章编号:1009-3044(2009)36-10611-02

The Autocorrelation Function based on MATLAB Optimization of Pitch Detection

WANG Li

(Qinghai Normal University Physics Department Pronunciation and Image Laboratory,Xi'ning 810008,China)

Abstract:Pitch is an important parameter of speech signals,which is when the hair dullness caused by the cyclical nature of vocal fold vi -bration.Pitch extraction is an important task of speech processing.Currently there are a lot of pitch detection methods,typically there is self-correlation method,AMDF (short-time average magnitude difference)method,cepstrum,etc.Here are a self-correlation and cep -strum combination of algorithms,the more traditional autocorrelation have some improvements.

Key words:autocorrelation;cepstrum;the three-level center clipping

基音是语音信号处理中的一个非常重要的参数。准确地检测出基音周期对语音的分析,合成,以及语音的压缩编码,语音识别等有重要的意义。

自相关法和倒谱分析是基音周期估计比较常用的方法,浊音信号的自相关函数在基音周期的整数倍位置上出现峰值。文献[3]采用对浊音信号的预处理,改进自相关函数,文献[4]采用自相关函数与短时平均幅度差函数的结合,改进自相关函数。本文提出自相关法和倒谱分析相结合的处理方法,获得优于传统自相关函数的检测效果。

1各种函数应用于基音检测的原理

1.1自相关函数应用于基音检测的原理

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

(1)

对于周期性信号序列,自相关函数定义为:

,式中k 为延迟点数。(2)

自相关反映了信号和其自身作了一段延迟后的相似程度,一个周期信号的自相关函数也是周期的,并且和原信号的周期相同,有R(k)=R(k+Np)。浊音是声带的周期性开启,闭合产生的,具有周期性。所以它的自相关的周期就代表着浊音的周期,且在周期整数倍位置上出现峰值,一般情况取最大峰值点作为基频点;清音是不由声带振动产生的,因而不具周期性。自相关法就是通过这个性质来检测基音的。

1.2倒谱应用于基音检测的原理

倒谱定义为时间序列的z 变换的模的对数的逆z 变换。具体说,序列x(n)的倒谱c(n)定义为:

(3)

或表示成傅立叶变换形式:

(4)

语音产生模型是一个由周期脉冲序列(浊音)或白噪声序列(清音)激励的线性滤波器,在一帧内近似认为滤波器是时不变的,因此,语音信号序列是激励源和滤波器的冲激响应的卷积。倒谱将卷性语音变换为加性语音,分离出激励源和滤波器。

1.3三电平中心削波的原理

三电平中心削波的输入输出函数为:

收稿日期:2009-10-23

作者简介:王丽(1984-),四川绵阳市人,研究方向为语音与图像处理。

ISSN 1009-3044Computer Knowledge and Technology

电脑知识与技术Vol.5,No.36,December 2009,pp.10611-10612E-mail:xsjl@https://www.doczj.com/doc/e84296934.html, https://www.doczj.com/doc/e84296934.html, Tel:+86-551-5690963569096410611

本栏目责任编辑:谢媛媛系统软件与软件工程Computer Knowledge and Technology 电脑知识与技术第5卷第36期(2009年12月)

(5)

即削波器的输出在x(n)>C L 时为1,x(n)<-C L 时为-1,除此以外都为0。这样可以增加刚刚超过电平的峰的重要性,滤除大多数次要的峰,只保留了明显的具有周期性的峰,避免了对清音段不必要的分析处理,这对后期处理有很大的好处。2改进的算法的提出与实现

改进的算法主要包含一下几个方面:分帧加窗及低通滤波,浊音信号预处理(三电平中心削波),作自相关变换,倒谱分析,基音检测6个部分。

语音是不平稳的时变信号,在时间足够短的情况下,可以近似认为是平稳的,这就涉及到分帧,一般要求一帧至少包含2个以上的周期,基于自相关和倒谱分析,折中选择窗长为180。语音的基频一般都在500HZ 以下,即使女高音C 调最高也不会超过1kHZ [2]。所以从只保留基频的角度出发,用一个1kHZ 带宽的低通滤波器对语音事先滤波是有好处的。估计基音周期真正有用的是出现在周期处的振幅高的自相关峰,其他较低的谐波峰都是多余的。基于这种认识,用三电平中心削波,去除大多数次要的峰,保留具有周期性的峰。然后作自相关,在自相关的基础上再进行倒谱分析,以防止自相关出现的半频和倍频的错误,使基音检测更准确。本文采用一段8kHZ 采样的纯净语音的一帧为例来说明本文算法的优越性。应用自相关和倒谱分析相结合的算法,较传统的自相关有所改进。3实验验证

语音采样为8kHZ,帧长为180,帧移为60,取出其中一帧浊音帧,如图1。

从图1我们可以大致估计一下基音周期,180个样点大致包含了5个周期,那么周期就应该在30左右。

图2是用传统方法作的自相关函数,根据自相关函数中的周期是在第一最高峰所对应的位置,得出周期为16。这就出现了与图1中的结论不一致,出现了倍频现象。图3是经过低通滤波和三电平中心削波后作的自相关函数,它的最高峰在第二个峰上,读出周期为32,符合图1中的结论,说明是准确的。

图4是传统的倒谱图,在n=0的附近有很高的峰起,它的周期性表现在具有同样周期的冲激上。在0~40之间,存在着两个冲激,峰值相差不大,就很难判断是哪个冲激是我们需要的,这就给基音检测增加了难度。图5是经过低通滤波和三电平中心削波后的自相关的倒谱,它与图4相比较,具有明显的冲激,可以很容易得读出周期32。图5具有较图2,图3,图4更好的检测周期的性能。本文所提出的算法较传统的自相关函数和倒谱分析均有改进之处,并取得了较好的实验结果。4总结

该文提出了一种结合自相关函数和倒谱分析的算法,并通过实验证明了它较传统的自相关和倒谱分析的准确性更高,有更好的检测效果。

参考文献:

[1]胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002.

[2]姚天任.数字语音处理[M].武汉:华中科技大学出版社,2007.

[3]杨森斌,陈砚圃,李真.一种改进的自相关函数基音检测算法[J].现代电子技术,

2008,272(9):135-137.

[4]李娟,张雪英.一种改进的抗噪基音检测算法[J].太原理工大学学报,2008,39(2):

116-118.

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

[6]付青青,吴爱平.基于Matlab 的语音信号自相关基音检测[J].长江大学学报:自

然科学版,2006,3(4):99-102.图2图4

图1一帧语音

图5

图3

10612

2019年matlab优化工具箱的使用

优化工具箱的使用 MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用;此外为了使用方便,MA TLAB还提供了图形界面的优化工具(GUI Optimization tool)。 1 GUI优化工具 GUI优化工具的启动 有两种启动方法: (1)在命令行输入optimtool; (2)在MA TLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimization tool” GUI优化工具的界面 界面分为三大块: 左边(Problem Setup and Results)为优化问题的描述及计算结果显示; 中间(Options)为优化选项的设置; 右边(Quick Reference)为帮助。为了界面的简洁,可以单击右上角“<<”、“>>”的按钮将帮助隐藏或显示。 1、优化问题的描述及计算结果显示 此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。 选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。 ?Solver:选择优化问题的种类,每类优化问题对应不同的求解函数。 ?Algorithm:选择算法,对于不同的求解函数,可用的算法也不同。 Problem框组用于描述优化问题,包括以下内容: ?Objective function: 输入目标函数。 ?Derivatives: 选择目标函数微分(或梯度)的计算方式。 ?Start point: 初始点。 Constraints框组用于描述约束条件,包括以下内容: ?Linear inequalities: 线性不等式约束,其中A为约束系数矩阵,b代表约束向量。 ?Linear equalities: 线性等式约束,其中Aeq为约束系数矩阵,beq代表约束向量。 ?Bounds: 自变量上下界约束。 ?Nonlinear Constraints function; 非线性约束函数。 ?Derivatives: 非线性约束函数的微分(或梯度)的计算方式。 Run solver and view results框组用于显示求解过程和结果。 (对于不同的优化问题类型,此板块可能会不同,这是因为各个求解函数需要的参数个数不一样,如Fminunc 函数就没有Constraints框组。) 2、优化选项(Options) ?Stopping criteria: 停止准则。

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的MatIab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。 具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1 ?最小化函数

2.方程求解函数 3.最小—乘(曲线拟合)函数

4?实用函数 5 ?大型方法的演示函数 6.中型方法的演示函数 9.1.3参数设置 利用OPtimSet函数,可以创建和编辑参数结构;利用OPtimget函数,可以获得o PtiOns优化参数。 ? OPtimget 函数 功能:获得OPtiOns优化参数。 语法:

matlab 有关GA优化的例子

核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0] termFN--终止函数的名称,如[maxGenTerm] termOps--传递个终止函数的参数,如[100] selectFN--选择函数的名称,如[normGeomSelect] selectOps--传递个选择函数的参数,如[0.08] xOverFNs--交*函数名称表,以空格分开,如[arithXover heuristicXover simpleXover] xOverOps--传递给交*函数的参数表,如[2 02 32 0] mutFNs--变异函数表,如[boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation] mutOps--传递给交*函数的参数表,如[4 0 06 100 34 100 34 0 0] 注意】matlab工具箱函数必须放在工作目录下 【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9 【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交*概率为0.95,变异概率为0.08 【程序清单】 编写目标函数 function[sol,eval]=fitness(sol,options) x=sol(1) eval=x+10*sin(5*x)+7*cos(4*x) 把上述函数存储为fitness.m文件并放在工作目录下

最优化算法实验报告(附Matlab程序)

最优化方法(Matlab)实验报告 ——Fibonacci 法 一、实验目的: 用MATLAB 程序实现一维搜索中用Fibonacc 法求解一元单峰函数的极小值问题。二、实验原理: (一)、构造Fibonacci 数列:设数列{}k F ,满足条件: 1、011F F == 2、11 k k k F F F +-=+则称数列{}k F 为Fibonacci 数列。(二)、迭代过程: 首先由下面的迭代公式确定出迭代点: 1 1 1 (),1,...,1(),1,...,1n k k k k k n k n k k k k k n k F a b a k n F F u a b a k n F λ---+--+=+ -=-=+ -=-易验证,用上述迭代公式进行迭代时,第k 次迭代的区间长度缩短比率恰好为 1 n k n k F F --+。故可设迭代次数为n ,因此有11121211221111223231 ()()......()()n n n n n n n n n F F F F F F b a b a b a b a b a F F F F F F F ------= -=?-==?-=-若设精度为L ,则有第n 次迭代得区间长度111 ()n n n b a L b a L F -≤-≤,即 就是 111 ()n b a L F -≤,由此便可确定出迭代次数n 。

假设第k 次迭代时已确定出区间[,]k k a b 以及试探点,[,]k k k k u a b λ∈并且k k u λ<。计算试探点处的函数值,有以下两种可能:(1)若()()k k f f u λ>,则令 111111111,,()() () k k k k k k k k n k k k k k n k a b b f f F a b a F λλμλμμ++++--++++-=====+-计算1()k f μ+的值。(2)()()k k f f u λ≤,则令 111121111,,()() () k k k k k k k k n k k k k k n k a a b f f F a b a F μμλμλλ++++--++++-=====+-计算1()k f λ+的值。 又因为第一次迭代确定出了两个迭代点,以后每迭代一次,新增加一个迭代点,这样在迭代n-1后便计算完了n 个迭代点。因此第n 次迭代中,选用第n-1次的迭代点以及辨别常数δ构造n λ和n μ: 1 1n n n n λλμλδ --==+再用同样的方法进行判断:(1)、若()n f λ>()n f μ则令 1 n n n n a b b λ-==(2)、若()n f λ<=()n f μ则令 1n n n n a a b μ-==这样便可确定出最优解的存在区间[,]n n a b 。

优化方法MATLAB编程——大连理工大学

优化方法上机大作业 学院: 姓名: 学号: 指导老师:肖现涛

第一题 源程序如下: function zy_x = di1ti(x) %di1ti是用来求解优化作业第一题的函数。 x0=x; yimuxulong=0.000001; g0=g(x0);s0=-g0; A=2*ones(100,100); k=0; while k<100 lanmed=-(g0)'*s0/(s0'*A*s0); x=x0+lanmed*s0; g=g(x); k=k+1; if norm(g)

break; end miu=norm(g)^2/norm(g0)^2; s=-g+miu*s0; g0=g; s0=s;x0=x; end function f=f(x) f=(x'*ones(100,1))^2-x'*ones(100,1); function g=g(x) g=(2*x'*ones(100,1))*ones(100,1)-ones(100,1); 代入x0,运行结果如下: >> x=zeros(100,1); >> di1ti(x) After 1 iterations,obtain the optimal solution. The optimal solution is -0.250000. The optimal "x" is "ans". ans =0.005*ones(100,1).

最优化方法matlab作业

实用最优化方法 ——matlab编程作业

题一、 初值为[-1;1] 其中g0、g1分别为不同x值下得导数,f0、f1为函数值 MATLAB程序: x0=[-1;1]; s0=[1;1]; c1=0.1;c2=0.5;a=0;b=inf;d=1;n=0; x1=x0+d*s0; g0=[-400*(x0(2)-x0(1)^2)*x0(1)-2*(1-x0(1));200*(x0(2)-x0(1) ^2)]; g1=[-400*(x1(2)-x1(1)^2)*x1(1)-2*(1-x1(1));200*(x1(2)-x1(1) ^2)]; f1=100*(x1(2)-x1(1)^2)^2+(1-x1(1))^2; f0=100*(x0(2)-x0(1)^2)^2+(1-x0(1))^2; while((f0-f1<-c1*d*g0'*s0)||(g1'*s0

Matlab最优化编程例子

题目:分别用最速下降法、FR 共轭梯度法、DFP 法和BFGS 法求解问题: 22112212minf(x)x 2x x 4x x 3x =-++- 取初始点(1)T x (1,1)=,通过Matlab 编程实现求解过程。 公用函数如下: 1、function f= fun( X ) %所求问题目标函数 f=X(1)^2-2*X(1)*X(2)+4*X(2)^2+X(1)-3*X(2); end 2、function g= gfun( X ) %所求问题目标函数梯度 g=[2*X(1)-2*X(2)+1,-2*X(1)+8*X(2)-3]; end 3、function He = Hess( X ) %所求问题目标函数Hesse 矩阵 n=length(X); He=zeros(n,n); He=[2,-2; -2,4]; End 解法一:最速下降法 function [ x,val,k ] = grad( fun,gfun,x0 ) %功能:用最速下降法求无约束问题最小值 %输入:x0是初始点,fun 和gfun 分别是目标函数和梯度 %输出:x 、val 分别是最优点和最优值,k 是迭代次数 maxk=5000;%最大迭代次数 rho=0.5;sigma=0.4; k=0;eps=10e-6; while (k

最优化方法的Matlab实现(公式完整版)

第九章最优化方法的Matlab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、

非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1 优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1.最小化函数 表9-1 最小化函数表 2.方程求解函数 表9-2 方程求解函数表

3.最小二乘(曲线拟合)函数 表9-3 最小二乘函数表 4.实用函数 表9-4 实用函数表 5.大型方法的演示函数 表9-5 大型方法的演示函数表

多目标优化实例和matlab程序

NSGA-II 算法实例 目前的多目标优化算法有很多, Kalyanmoy Deb 的带精英策略的快速非支配排序遗传算法(NSGA-II) 无疑是其中应用最为广泛也是最为成功的一种。本文用的算法是MATLAB 自带的函数gamultiobj ,该函数是基于NSGA-II 改进的一种多目标优化算法。 一、 数值例子 多目标优化问题 424221********* 4224212212112 12min (,)10min (,)55..55 f x x x x x x x x x f x x x x x x x x x s t x =-++-=-++-≤≤??-≤≤? 二、 Matlab 文件 1. 适应值函数m 文件: function y=f(x) y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2); 2. 调用gamultiobj 函数,及参数设置: clear clc fitnessfcn=@f; %适应度函数句柄 nvars=2; %变量个数 lb=[-5,-5]; %下限 ub=[5,5]; %上限 A=[];b=[]; %线性不等式约束 Aeq=[];beq=[]; %线性等式约束 options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations', 200,'stallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto); % 最优个体系数paretoFraction 为0.3;种群大小populationsize 为100,最大进化代数generations 为200, % 停止代数stallGenLimit 为200, 适应度函数偏差TolFun 设为1e-100,函数gaplotpareto :绘制Pareto 前端 [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)

MATLAB优化应用

methmodeltjut@https://www.doczj.com/doc/e84296934.html, mathematica MATLAB优化应用 §1 线性规划模型 一、线性规划问题: 实例1:生产计划问题 假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B 类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。 建立数学模型: 设x1、x2分别为生产甲、乙产品的件数。f为该厂所获总润。 max f=70x1+120x2 s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0 实例2:投资问题 某公司有一批资金用于4个工程项目的投资,其投资各项目时所得的净收益(投入资金百分比)如下表:工程项目收益表

由于某种原因,决定用于项目A的投资不大于其他各项投资之和而用于项目B和C的投资要大于项目D的投资。试确定该公司收益最大的投资分配方案。 建立数学模型: 设x1、x2 、x3 、x4分别代表用于项目A、B、C、D的投资百分数。 max f=0.15x1+0.1x2+0.08 x3+0.12 x4 s.t x1-x2- x3- x4≤0 x2+ x3- x4≥0 x1+x2+x3+ x4=1 x j≥0 j=1,2,3,4 实例3:运输问题 有A、B、C三个食品加工厂,负责供给甲、乙、丙、丁四个市场。三个厂每天生产食品箱数上限如下表: 四个市场每天的需求量如下表: 从各厂运到各市场的运输费(元/每箱)由下表给出: 求在基本满足供需平衡的约束条件下使总运输费用最小。 建立数学模型: 设a i j为由工厂i运到市场j的费用,x i j 是由工厂i运到市场j的箱数。b i 是工厂i的产量,d j是市场j的需求量。

用遗传算法优化BP神经网络的Matlab编程实例

用遗传算法优化BP神经网络的 Matlab编程实例 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP 算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=premnmx(XX); YY=premnmx(YY); %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},' trainlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数 %下面调用gaot工具箱,其中目标函数定义为gabpEval [x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,... 'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutatio n',[2 gen 3]); %绘收敛曲线图 figure(1) plot(trace(:,1),1./trace(:,3),'r-'); hold on plot(trace(:,1),1./trace(:,2),'b-'); xlabel('Generation'); ylabel('Sum-Squared Error'); figure(2) plot(trace(:,1),trace(:,3),'r-'); hold on plot(trace(:,1),trace(:,2),'b-'); xlabel('Generation'); ylabel('Fittness'); %下面将初步得到的权值矩阵赋给尚未开始训练的BP网络 [W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x); net.LW{2,1}=W1; net.LW{3,2}=W2; net.b{2,1}=B1; net.b{3,1}=B2; XX=P; YY=T; %设置训练参数 net.trainParam.show=1; net.trainParam.lr=1; net.trainParam.epochs=50; net.trainParam.goal=0.001; %训练网络 net=train(net,XX,YY); 程序二:适应值函数 function [sol, val] = gabpEval(sol,options) % val - the fittness of this individual % sol - the individual, returned to allow for Lamarckian evolution % options - [current_generation] load data2 nntwarn off XX=premnmx(XX); YY=premnmx(YY); P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 for i=1:S, x(i)=sol(i); end; [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);

简述基于MATLAB的优化设计

基于MATLAB 的曲柄摇杆机构优化设计 1. 问题的提出 根据机械的用途和性能要求的不同,对连杆机构设计的要求是多种多样的,但这些设计要求可归纳为以下三种问题:(1)满足预定的运动规律要求;(2)满足预定的连杆位置要求;(3)满足预定的轨迹要求。在在第一个问题里按照期望函数设计的思想,要求曲柄摇杆机构的曲柄与摇杆转角之间按照()f φ?=(称为期望函数)的关系实现运动,由于机构的待定参数较少,故一般不能准确实现该期望函数,设实际的函数为()F φ?=(称为再现函数),而再现函数一般是与期望函数不一致的,因此在设计时应使机构再现函数()F φ?=尽可能逼近所要求的期望函数()f φ?=。这时需按机械优化设计方法来设计曲柄连杆,建立优化数学模型,研究并提出其优化求解算法,并应用于优化模型的求解,求解得到更优的设计参数。 2. 曲柄摇杆机构的设计 在图 1 所示的曲柄摇杆机构中,1l 、2l 、3l 、 4l 分别是曲柄AB 、连杆BC 、摇杆CD 和机架AD 的长度。这里规定0?为摇杆在右极限位置0φ时的曲柄起始位置角,它们由1l 、2l 、3l 和4l 确定。 图1 曲柄摇杆机构简图 设计时,可在给定最大和最小传动角的前提下,当曲柄从0?转到090??+时,要求摇杆的输出角最优地实现一个给定的运动规律()f ?。这里假设要求: ()()2 0023E f φ?φ??π ==+ - (1)

对于这样的设计问题,可以取机构的期望输出角()E f φ?=和实际输出角 ()F φ?=的平方误差之和作为目标函数,使得它的值达到最小。 2.1 设计变量的确定 决定机构尺寸的各杆长度1l 、2l 、3l 和4l ,以及当摇杆按已知运动规律开始运行时,曲柄所处的位置角0?应列为设计变量,即: []12340T x l l l l ?= (2) 考虑到机构的杆长按比例变化时,不会改变其运动规律,通常设定曲柄长度 1l =1.0,在这里可给定4l =5.0,其他杆长则按比例取为1l 的倍数。若取曲柄的初始 位置角为极位角,则?及相应的摇杆l 位置角φ均为杆长的函数,其关系式为: ()()()()222221243230124225arccos 210l l l l l l l l l l l l ?????++-+-+==????++???????? (3) ()()22222124323034325arccos 210l l l l l l l l l l ????? +--+--==???????????? (4) 因此,只有2l 、3l 为独立变量,则设计变量为[][]2312T T x l l x x ==。 2.2目标函数的建立 目标函数可根据已知的运动规律与机构实际运动规律之间的偏差最小为指标来建立,即: ()()2 1min m Ei i i f x φφ==-→∑ (5) 式中,Ei φ-期望输出角;m -输出角的等分数;i φ-实际输出角,由图 1 可知: ()()02i i i i i i i παβ?πφπαβπ?π--≤≤??=?-+≤≤?? (6) 式中,222222322132arccos arccos 22i i i i i r l l r x x rl r x α???? +-+-== ? ????? (7) 222241424arccos arccos 210i i i i i r l l r rl r β???? +-+== ? ????? (8) i r == (9) 2.3约束条件

matlab在优化设计中的应用

m a t l a b在优化设计中的 应用 The Standardization Office was revised on the afternoon of December 13, 2020

Matlab 在优化设计中的应用 摘 要 常见的优化问题包括线性规划、无约束优化、约束优化、最下二乘优化、多目标规划等。本文研究了matlab 在这些常见优化问题中的应用及求解。 在进行研究本课题之前,我们先通过网络、电子书刊等各种有效渠道获取我们所需信息,在充分了解与熟练掌握了各种优化问题的具体特点及性质后,我们给出了关于如何用matlab 进行多类优化问题的求解基本方法,在此前提下,为了体现该软件在这些优化领域的实际应用效果,我们结合若干个优化问题的实例进行分析、建模、以及运用matlab 编程求解,在求解过程中,通过得到的精确数据和反应结果的图例,我们了解到matlab 工具箱的功能强大,是处理优化问题的非常方便的编程工具。 关键词:matlab 优化问题 二、基本概念 线性规划 线性规划是优化的一个重要分支。它在理论和算法上都比较成熟,在实际中有广泛的应用。例如数学表达形式: ???? ? ??? ?=≥=+++=+++=++++++n i x b x a x a x a b x a x a x a b x a x a x a t s x c x c x c i m n mn m m n n n n n n ,,2,1,0..min 221 122222121112121112211

在MTLAB 提供的优化工具箱中,解决规划的命令是linprog ,它的调用格式如下, ),,(b A c linprog x = 求解下列形式的线性规划: ?? ?≤b Ax t s x c T ..min ),,,,(beq Aeq b A c linprog x = 求解下面形式的线性规划: ?? ? ? ????=?≤beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需命令 [][],==b A 。 ),,,,,,(ub lb beq Aeq b A c linprog x = 求解下面形式的线性规划: ??? ?????? ? ??≤≤=?≤ub x lb beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需令[][],==b A ;若只有下界约束,则可以不用输入 ub 。 无约束优化算法 对于无约束优化问题,已经有许多有效的算法。这些算法基本都是迭代法,它们都遵循下面的步骤: ① 选取初始点x 0 ,一般来说初始点越靠近最优解越好;

最优化方法及其Matlab程序设计

最优化方法及其Matlab程序设计 1.最优化方法概述 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证,从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。最优化是每个人,每个单位所希望实现的事情。对于产品设计者来说,是考虑如何用最少的材料,最大的性能价格比,设计出满足市场需要的产品。对于企业的管理者来说,则是如何合理、充分使用现有的设备,减少库存,降低能耗,降低成本,以实现企业的最大利润。 由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型。 即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解。 数学模型建好以后,选择合理的最优化算法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 2.最优化方法(算法)浅析 最优化方法求解很大程度上依赖于最优化算法的选择。这里,对最优化算法做一个简单的分类,并对一些比较常用的典型算法进行解析,旨在加深对一些最优化算法的理解。 最优化算法的分类方法很多,根据不同的分类依据可以得到不同的结果,这里根据优化算法对计算机技术的依赖程度,可以将最优化算法进行一个系统分类:线性规划与整数规划;非线性规划;智能优化方法;变分法与动态规划。 2.1 线性规划与整数规划 线性规划在工业、农业、商业、交通运输、军事和科研的各个研究领域有广泛应用。例如,在资源有限的情况下,如何合理使用人力、物力和资金等资源,以获取最大效益;如何组织生产、合理安排工艺流程或调制产品成分等,使所消耗的资源(人力、设备台时、资金、原始材料等)为最少等。 线性规划方法有单纯形方法、大M法、两阶段法等。 整数规划有割平面法、分枝定界法等。 2.2 非线性规划 20世纪中期,随着计算机技术的发展,出现了许多有效的算法——如一些非线性规划算法。非线性规划广泛用于机械设计、工程管理、经济生产、科学研究和军事等方面。 非线性规划问题包括:

matlab生产调度问题及其优化算法

matlab生产调度问题及其优化算法

生产调度问题及其优化算法(采用遗传算法与MATLAB编程) 信息014 孙卓明 二零零三年八月十四日

生产调度问题及其优化算法 背景及摘要 这是一个典型的Job-Shop动态排序问题。目前调度问题的理论研究成果主要集中在以Job-Shop问题为代表的基于最小化完工时间的调度问题上。一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。解空间容量巨大,N个工件、M台机器的问题包含M N)! (种排列。由于问题的连环嵌套性,使得用图解方法也变得不切实际。传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。 本文给出三个模型。首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。最后采用现代进化算法中有代表性发展优势的遗传算法。文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB软件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。对车间调度系列问题的有效解决具有一定参考和借鉴价值。 一.问题重述 某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加 工序产品 1 2 3 4 5 6 7 8 S T S T S T S T S T S T S T S T 1 C 8 A 2 B 4 C 24 D 6 2 A 4 D 5 B 3 C 4 3 C 3 D 7 A 15 B 20 A 8 4 B 7 C 6 D 21 A 1 D 16 C 3 5 D 10 B 4 C 8 D 4 A 12 C 6 D 1 6 A 1 B 4 A 7 C 3 D 5 A 2 C 5 A 8 条件:1、每件产品必须按规定的工序加工,不得颠倒; 2、每台设备在同一时间只能担任一项任务。 (每件产品的每个工序为一个任务)

最优化各种方法MATLAB代码

最优化程序MATLAB 代码 程序 1.目标任务 分别用最速下降法、FR 共轭梯度法、DFP 法和BFGS 法求解无约束最值问题: 22 112212minf (x)x 2x x 4x x 3x =-++- 取初始点(1)T x (1,1)=和(2)T x (2,2)=,分别通过Matlab 编程实现求解过程。 2.程序实现(程序文件见附件) 2.1公用函数 1) function f= fun( X ) %所求问题目标函数 f=X(1)^2-2*X(1)*X(2)+4*X(2)^2+X(1)-3*X(2); end 2) function g= gfun( X ) %所求问题目标函数梯度 g=[2*X(1)-2*X(2)+1,-2*X(1)+8*X(2)-3]; end 3) function He = Hess( X ) %所求问题目标函数Hesse 矩阵 n=length(X); He=zeros(n,n); He=[2,-2; -2,4]; End 2.2其他函数

图2.2 函数程序文件图 1) 最速下降法的文件名为 :grad.m 。 2) FR 共轭梯度法的文件名为:frcg.m 。 3) DFP 法的文件名为:dfp.m 。 4) BFGS 法的文件名为:bfgs.m 。 3.程序运行结果 3.1最速下降法 3.1.1 初值为(1)T x (1,1) 图3.1.1.1 最速下降法求解最小值输出结果图

图3.1.1.2最速下降法求解最小值过程图 3.1.2初值为(2)T x (2,2) 图3.1.2.1最速下降法求解最小值输出结果图

大连理工优化方法-增广拉格朗日方法MATLAB程序

上机大作业II 定义目标函数fun function f=fun(x) x1=x(1); x2=x(2); f=4*x1-x2^2-12; 定义目标函数梯度函数dfun function f=dfun(x) x2=x(2); f=[4;-2*x2]; 定义等式约束函数hf function qua=hf(x) qua=25-x(1)^2-x(2)^2; 定义等式约束函数梯度函数dhf function qua=dhf(x) qua=[-2*x(1);-2*x(2)]; 定义不等式约束函数gfun function inq=gfun(x) inq=10*x(1)-x(1)^2+10*x(2)-x(2)^2-34; 定义不等式约束梯度数dgf function inq=dgf(x) inq=[10-2*x(1);10-2*x(2)]; 定义增广拉格朗日函数mpsi function psi=mpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) f=feval(fun,x); he=feval(hf,x); gi=feval(gfun,x); l=length(he); m=length(gi); psi=f; s1=0; for i=1:l psi=psi-he(i)*mu(i); s1=s1+he(i)^2; end

psi=psi+0.5*sigma*s1; s2=0.0; for i=1:m s3=max(0.0, lambda(i) - sigma*gi(i)); s2=s2+s3^2-lambda(i)^2; end psi=psi+s2/(2.0*sigma); 定义增广拉格朗日函数梯度函数dmpsi function dpsi=dmpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) dpsi=feval(dfun,x); he=feval(hf,x); gi=feval(gfun,x); dhe=feval(dhf,x); dgi=feval(dgf,x); l=length(he); m=length(gi); for i=1:l dpsi=dpsi+(sigma*he(i)-mu(i))*dhe(:,i); end for i=1:m dpsi=dpsi+(sigma*gi(i)-lambda(i))*dgi(:,i); end 定义BFGS法函数函数bfgs function [x,val,k]=bfgs(mpsi,dmpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) maxk=1000; rho=0.5; sigma1=0.4; epsilon1=1e-4; k=0; n=length(x0); Bk=eye(n); while(k

遗传算法优化相关MATLAB算法实现

遗传算法 1、案例背景 遗传算法(Genetic Algorithm , GA)是一种进化算法,其基本原理是仿效生物界中的"物竞大择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的 方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的 染色体。 在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者叫基因型个体(Individuals)。一定数量的个体组成了群体(Population)。群体中个体的数目称为群体大小( Population Size),也叫群体规模。而各个个体对环境的适应程度叫做适应度(Fitness)。 2、遗传算法中常用函数 1) 创建种群函数一crtbp 2) 适应度计算函数一ranking 3) 选择函数一select 4) 交叉算子函数一recombin 5) 变异算子函数一mut 6) 选择函数一reins 7) 实用函数一bs2rv 8) 实用函数一rep 3、主程序: 1. 简单一元函数优化: clc clear all close all %%画出函数图 figure(1); hold on; lb=1;ub=2; %函数自变量范围【1,2】 ezplot('sin(10*pi*X)/X',[lb,ub]); % 画出函数曲线xlabel('自变量/X') ylabel('函数值/Y') %%定义遗传算法参数 NIND=40; %个体数目 MAXGEN=20; %最大遗传代数 PRECI=20;寇量的二进制位数 GGAP=0.95;妣沟 px=0.7; %交叉概率 pm=0.01; %变异概率

相关主题
文本预览
相关文档 最新文档