热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Logistic函数的各个参数作用分析及其在电机控制中的应用

近几天对神经网络分类器的学习中,看到了Sigmoid函数。Sigmoid函数的表达式为:在Matlab或者Octave中可以画出函数曲线。t-60:

近几天对神经网络分类器的学习中,看到了Sigmoid函数。

Sigmoid函数的表达式为:

S\left ( x \right )=\frac{1}{1+e^{-x}}

在Matlab或者Octave中可以画出函数曲线。

t = -60:0.1:60;
S = 1./(1+e.^(-0.2*t));
plot(t,S)
xlabel('x')
ylabel('S(x)')
title('Sigmoid')

可是今天我学到了电机上电,电机有一个加速度,让速度达到一个值。而这个加速度,最好是缓慢增加的,而后要缓慢递减了。这样电机转动会更加平稳。业界喜欢称这个过程是“加减速”。见下图。我们需要把电机转动至目标的速度,速度或者加速度的突变,都有可能引起电流浪涌。因为转子速度突然变化,带电的定子线圈上,会引起反电动势。而加速度的突然变化,由于惯性作用,可能造成机械损伤。因此,对速度和加速度的变化、或者注入电机上的电流和电压,最好都有一个渐进的过程。

(这图片感谢《硬石电机控制专题指导手册_20180515》这部分开源的)

根据理解,最好是让速度和时间的曲线为S形曲线。但是这个曲线在单片机上较难实现。传统的减少速度

加速度突变的方法是用左边的梯形加减速方法。

但是我手头的板子是STM32F4,是一款带有FPU的内核为Cortex-m4的微控制器,所以实时性是有保证的。该MCU的工作频率可达168MHz,我选择每1ms执行一次本算法。这从CPU消耗来看,应该还是十分充裕的。

想起了之前的神经元激活函数Sigmoid,于是上网搜了S形函数,找到了Logistic函数。

P\left ( t \right )=\frac{KP_0e^{\tau t}}{K+P_0\left ( e^{\tau t}-1 \right )}

经过化简,可得:

P\left ( t \right )=\frac{K}{1+\left ( \frac{K}{P_0}-1 \right ) e^{-\tau t}}

这个函数,有三个变量,第一个是K,K是终值;P_0是初值,即当t=0时,曲线对纵坐标横截点。而\tau是时间常数。

下图中,P0不变(P0=0.5),\tau不变(\tau = 1),K变化。蓝色线是K=1,红色线是K=10,绿色线是K=100。


P0=0.5;
K=1;
r=1;t = -10:0.1:10;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
plot(t,Pt,'b')K=10;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
hold on
plot(t,Pt,'r')K=100;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
hold on
plot(t,Pt,'g')
xlabel('t')
ylabel('P(x)')
title('Logistic curve of P0=0.5. t=1. K=1,10,100')

可以见到,曲线最后逼近极限值就是K。

而后,我们改变P0;令时间常数为1,K=10,起始值P0分别为1(蓝色线)、5(红色线)、9(绿色线)。

在Matlab或者Octave执行以下代码:

P0=1;
K=10;
r=1;t = -10:0.1:10;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
plot(t,Pt,'b')P0=5;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
hold on
plot(t,Pt,'r')P0=9;
Pt = K./(1+(K/P0-1).*e.^(-r*t));
hold on
plot(t,Pt,'g')
xlabel('t')
ylabel('P(x)')
title('Logistic curve of P0=1, 5, 9. t=1. K=10')

可显示波形:

初始值,就是t=0时候,P(t)的值。t=0时,P(0)=P0。曲线整体似乎是根据P(0)左右移动。

第三个参数是时间常数。令K=1,P(0)=0.5,\tau 分别是 0.1、1、10

 

下午试着调这三个参数到平缓,并令函数的输出转换为电机的脉冲速度(电机是步进电机,每一个发送一个脉冲即转动一个角度)。增加每秒内脉冲的个数,即可增加电机的转速。

另外,在减速中,也可以使用本方法,只需要把曲线经过纵轴镜像,即可得到减速的速度曲线。

镜像后的曲线函数:

P\left ( t \right )=\frac{K}{1+\left ( \frac{K}{P_0}-1 \right ) e^{\tau t}}

 

本文比较思路比较乱……就当作草稿来看吧……国庆节在自己的房间里呆着干活也不容易。

总之,主要讲的是S形曲线。没想到在电机控制这里又用得到。

 

 


推荐阅读
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • KNN算法在海伦约会预测中的应用
    本文介绍如何使用KNN算法进行海伦约会的预测。我们将从数据导入、数据预处理、数据可视化到最终的模型训练和测试进行全面解析。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • HTML中input标签使用disabled属性的影响及解决方案
    本文探讨了在HTML表单中为input标签设置disabled属性的具体效果,包括其对用户交互和数据提交的影响,并提供了一种既能保持输入框不可编辑又能确保数据提交的方法。 ... [详细]
  • 深度解析:任务宝裂变营销的成功之道
    任务宝裂变作为一种高效用户增长手段,在微信生态下被广泛应用。本文将通过实际案例,探讨如何设计和实施任务宝裂变策略,以实现持续获客的目标。 ... [详细]
  • Python与MySQL交互指南:从基础到进阶
    本文深入探讨了Python与MySQL数据库的集成方法,包括数据库连接、数据表创建、索引管理、数据操作以及如何防止SQL注入等关键内容。适合初学者及希望提升数据库操作技能的开发者。 ... [详细]
  • 使用Python模拟登录教务系统抓取成绩并分析存储
    本文详细介绍如何使用Python编程语言模拟登录学校教务系统,抓取学生的成绩信息,并进行数据分析和可视化处理,最终将数据存储到MySQL数据库中。 ... [详细]
  • 根据源图RECT、目标Rect计算缩放后(不放大),新的显示Rect序列化CImageCImage复制根据源图RECT、目标Rect计算缩放后(不放大),新的显示Rectstati ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • Topaz Video Enhance AI V2.2.0 - 高级AI视频画质提升工具 | 下载及使用指南
    Topaz Video Enhance AI 是一款利用先进的人工智能技术设计的视频画质增强软件,特别适用于视频剪辑,旨在通过深度学习技术提升视频质量,减少噪点和恢复细节。 ... [详细]
  • 使用Pandas DataFrame探索十大城市房价与薪资对比
    在本篇文章中,我们将通过Pandas库中的DataFrame工具,深入了解中国十大城市的房价与薪资水平,探讨哪些城市的生活成本更为合理。这是学习Python数据分析系列的第82篇原创文章,预计阅读时间约为6分钟。 ... [详细]
  • TCP协议中的可靠传输机制分析
    本文深入探讨了TCP协议如何通过滑动窗口和超时重传来确保数据传输的可靠性,同时介绍了流量控制和拥塞控制的基本原理及其在实际网络通信中的应用。 ... [详细]
author-avatar
加勒比海盗530
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有