粉丝19获赞66

各位好,我们之前没有开声音,再来一遍,然后我们是想要出的一个真实的信号的一个有效值啊,求一个信号的一个有效值,那么在 mate 三五中提供了这个 rms 模块 啊,来测量信号的一个啊,一段信号的一个语标值,然后我们这里看一下具体的一些设置。首先是这个抛柜式,这个仿真大家一般都要加的,然后这个是 交流电流源,然后设置的辅助一百伏,然后呢这个是一个电压的一个传感器,然后是一个事故,一个这个 display, 好, 然后呢我们我们要看一下这个 iims 的参数设置, ims, 因为它有一些参数需要啊,注意一下啊,那么这个触按 imsy 是一般是 是要勾的,那么勾不勾呢?可可能是存在这种斜坡的情况下,是否考虑欺骗,然后我们注意一下这个防盗 meto 分配赛事,那我们要选择这种措施,在国外是这种设置啊,所以在我们运行的时候要注意跑一下,然后是这种设置,不然的话结果肯定有问题, 那么那么我们再跑一下啊,跑一下。我们这里仿真的这个周期收尾的时间是零点零二啊,那么是大于的他的一个啊,一个啊,周期的一个信号的一个周期的, 那么结果是七十点七伏啊,是啊,是正确的,那么它有效时是除以单号,没问题。

主要讲解马特勒本次命令的常用模块的第五部分。呃,今天主要是介绍他的一个信号合并与分解模块,总线创建和总线选择模块啊,线幅模块、数据类型转化模块、中指模块、接地模块和 clock 这个信号源的一个模块。 呃,这里面的话就是一些,呃,在这个生命宁肯的一个原件,原件件采用库里面一些有多少?呃,比如说这个 muxmux 这个信号合并 啊,没有 x 信号合并模块的话,他是一个虚拟的模块啊,虽然他比如说这里,这里他基本的设置的话就有两个输入啊,合并成一个,但是 实际上他没有改变他内部的数据结构,只是视觉上看起来比较简洁。呃,可以统一管理。然后在仿真模型中的话,往往是用这个 mux 模块将多个信号汇聚到之后啊,这样为了显示在同一个这个识别器 就是这个 slp 这个什么东西的同一个坐标系统,这样的话就不需要提供多个输入。呃,多个输出的一个端口就相当于,呃。如果是要信号进行一个同一坐标的比较的话,就可以用这个 mux 信号合并模块 把多个这个信号啊进行一个比较,这样的话就不用说一个信号就一个试播器的一个输入。 呃,这里面的话我们双击,呃,这里有一个信号合并的话啊,这里 这里是安美有 x 类似模块的名称,他的一个类型的话就是,呃,参数类型的话就是这里是设置他的输入的有几个输入,所以说两默认是两个输入,然后这是一个选择, 选择这个,呃参数一般话就选择默认的 他是这个呈现的输出啊,比如说这里面的话就是一个正选的三 mv, 呃,他这个单位正选的一个输入,然后一个是接月输入,然后将两个信号进行一个合并,最后的话就是通过这个信号合并模块啊,这个试播期的话只需要有一个输入的话就可以呈现他的一个结果,这样的话他的一个,那这里的话红色部分就是这个证选信号,然后 这个蓝色部分的话清,呃,这个蓝色部分就是这个节约型号, 然后第二个的话就是信号分解模块,信号分解模块的话也是和这个信号合并模块是相反的,就是他能够将多维的信号分解成单位或者为数较少的多维信号,呃 合并的话是由多个变成呃呃一个,然后这里的话就是将一个变成多个,呃,他的一个参数设置的话也是一样的,他的原漆机的名位置的话也是在这个常用的里面啊,这里面有个第 d、 e、 m、 u、 x, 然后把它添加到那里面的话,呃,比如说这,呃这个这个就是 它里面参数也是一样的。 然后这里的话啊,同样的我们可以在原有的刚刚的仿真基础上,因为这里是已经是多两个和信号合并之后,然后再通过这个分解 啊,分解完之后的话啊,这里就是相当于是显示在两个两个信号了,两个信号的话要呈现在一个试播器里面的话,就要对试播器进行一个设置 啊,这里的一个是是课本的话,我们就是要这里设置两个输入,然后这里的话如果是不想在同一个座标上设置的话,我们还可以去设置这里的雷奥特,雷奥特的话就比如说这里面是两个,那这里的话就是两个, 然后这里的话出现之后就会有两个坐标,然后进行一个运行,之后的话,他实际上就是将这个按照这个顺 顺序,第一个是这个山影,第二个是这个节约,那最后的话第一个是山影,第二个是节约,这样的话就是将信号分解,就是他这个信号合并和信号分解模块的话,实际上是没有改变他的一个信号的一个数据结构。 然后第二个总总线的话,第二个是总线创建和总线选择模块,这个巴斯克瑞特就是总线创建模块,就是将一组信号合并成一条总线 啊,总线的话就是数据都是公用的工,数据传输都是公用的线就是主线这个八十八十块的,八十块的话他也是在这个 呃,常用的这个里面,比如说这里面的一个 boss boss crate, 呃,这个 boss celevel, 对的的话就是将总线创建,总线创建的话,嗯,我们点击它里面的一个参数也可以看一下 啊,这里面是数据的这个输入,然后这是呃数据的信号,因为他有两个信号吗?一个是啊,三个一,一个是三个二, 然后这里是设置他的一个数据的输入数据的格数,这是设置他的输出数据类型的设置。当这个 oliday 的 tip 选择是这个 boss 的时候,就是他里面有个 boss, 那勾选这个奥特奥特铺的这个 这个八八十的手表,是哦,输出信号是这个非虚拟的信号,在如果是通过这个 c 代码生成的, 就是将这个模型转化成 c 程序的时候,他会将输出总线的信号定义为这个结构体,就是他,呃,这里面的数据类型的话就是一个结构体类型,就比如说我们把这个 也还是这个山影和这个尖月信号和这个,呃阵型信号运行一下,然后这里的话可以看到这里面的话实际上是也是两个变成一个,但是他的这个信号线的话会比会比这个原有的会要粗一点, 然后它实际上的效果是一样的,但是如果把它倒出在这个, 呃,如果是选择这个的话,然后再勾选这个奥特铺的作为这个好运行一下。好,这里不行, 这里的话就是等这个 c 代码生成的时候,呃,可以去这样设置他让他输出的信号是非虚拟线,哦,这里好像不行。 然后第二部分的话就是总线的选择模块八十三来的总线选择的话就是可以,因为这里的话,比如说你输入的信号是一个总线吗?总线的话你要选择总线的第几个总线里面的第几个那个 信号进行一个展示,那这个时候的话我们就可以通过,呃,比如说前面是用了一个总 线的这个合并创建创建一个总线, 然后这里的话就可以用这个总线选择选择信号,它里面的参数的话,呃也是 总线选择的话就是这个线号分解,然后是这个它里面的参数也是 就是可以。呃里面的话也是两个信号,就是根据你的输入输入的话,这里是信号分解吗?信号分解完之后,他的试播器的话,啊,第一个信号是这个甄选,第二个是这个监狱, 然后他们两个的呃之间的一个区别的话,比如说这个总线创建和总线的一个选择,以及这个信号的合并, 呃,信号合并和信号分解的区别,总线的创建的话就是由几度输入信号合并成一条总线信号 总现在这个选选择的话,就是由总线信号中选择需要的一路或者几路信号进行输出。这个 mus 的话,信号和并谋划就是信号的合成,只是从这个管理上就是输出上,呃,没有真正的改变数据结构。这个总线,呃信号分解模块也是的, 那个总线的 boss 的话可以选择的比较多,比如说这个八十八十二的可以选取总线中的某路信号进行输出,呃,就是比如说我这里有八个信号,我只需要输出其他的几个 信号,那这样的话就能选择某一路,然后这个 dd max 的话就是,呃按顺序输出的,不能制定你的选举,哎, 卡住 就不能制定的去选取啊。如果是仅仅为了这个模型的仿真连线方便,那这样的话就可以用信号和变信号分解啊。这个总线选择和创建的话,呃,是 是能够在这个大码生成的时候生成这个结构体数据类型的,然后这个总线的话不是虚拟的总线就是不是是非虚拟的总线在大码生存中可以以一个结构体的形式输出,而这个 mux 的话是虚拟总线,呃它是单独的信号。 然后第四个部分的话就是这个线浮模外,就是对输入信号进行一个线浮,线浮的一块的话也是在这啊,这里面的有一个呃 two 上球路线这个模块,那就是线浮,线浮的话就是你对你的最大值、最小值进行一个设定, 然后这这个里面的话这个勾选,这个的话就是设置线性化,是否将这个线浮模块作为争议 唯一的直通模块这个勾选,然后这里的话这勾选这个的话就设置是否是过年检测的勾选,那比如说这里面呢是给一个这个这些信号,然后设置一个福字,这样的话就可以去设置他的一个线符。比如说这里面的话 我们设置的是幅度是二,频率是二的一个线幅,线幅模块的参数的话就是呃线幅最小是是零,最大的是二,那这样试播器的输出我们就可以看一下啊,这里的话是一个正形信号码,如果是呃这个 他是正负正负的,然后这里的话如果限制线幅模块是零到二的话,那小于呃大于二或者是小于零的就不能输出,那这里小于零的话,他就会直接截断,截断,截断成最小值,然后这因为他的线幅的话 没有超过二,那上面的话就没有阶段。然后第五个的话就是数据转化模块,因为生命力可支持多种数据类型,就包括扶点型、固定点数、枚举类型。 当前面一个模块的输出信号和后面一个模块的输入端的支持的这个数据的线不一致的时候, 但是明天开局会报错,这样的话,这时候的话就可以用这个数据转换门来啊,对的太啊,对的太啊,空空一选,对了,太空一选,然后这样的话我们就可以在这里面,这个的话没在场啊,就是在这个 对的态度很明显就会存在一个数据转化的一个过程,数据转化好像我们在这里应该在下一个, 呃,就比如,嗯,我们可以去啊双击这里面的一个参数,这里的话就是一个输出的最输出的一个限制,然后里面的话这里有个 outdate the tip, 那这里就是有个呃输出的一个类型,那这样的话就可以去设置他是双金度整整呃八倍,有符号八位,无符号八位,有符号十六位,无符号十六位,有符号三十二位,无符号三十二位。以及这个布尔类型或者是固定的类型。 这个 fisdt 是这个马特勒提供的函数,能够返回这个生命力可点这个数据类型,这个变量主要是通过来描述啊,主要是通过这个来描述一个固定类型, 呃,固定类型的一个数据类型使用的固定点的生成呃的代码相对于这个福点类型的占用的话, 呃福点类型的占用的空间比较会比较少,能够快速的运行,所以的话这个是 frsdt, 这个类型的话他的内存会比较少,运行速度会更快。然后呃这里面 参数的话,我们就可以设置呃,因为在数据转化的时候,他会呃存在一个误差,比如说这个派的话,平安是等于三点一四一五九二六的吗? 然后如果是用这个英特八型的话会产生误差,英特八类型的话只能保留整数部分,所以的结果是三, 呃,这里,这里的一个勾选的话,这里有一个 to go 啊, in in the pool and 熬的图,还有一块啊,就是他的呃输输入输出的参数选择的方式不一样啊,这里面的话会有一个这个对话框,对话框里面的话啊,比如说我们这里的 这里有一呃一些选择等于这个真实纸,然后这个近视,近视的等于这个 呃,这里面的这个瑞奥沃尔的布鲁和这个罗特英特国,英特国内分别表示实际值和存储值模块的话,会按照所选择的数值进行等值的转化, 如果目标为时自己呃和这个实际的值相等的情况的话,就会呃情况下会将这个 w 类型 转化成这个印特巴,会产生一个误差,这个印特巴数据的话就会计算结果就是为三,比如说正面的一个派吗?派,然后经过这个,这里是数据转化型,选择的是印特巴类型,转化之后的话,这里会显示通过一个迪斯佩呈现的话会是一个三 啊,比如说这里面设置的是输出类型是英德吧,然后选择的是 real water blue, 然后这里是呃真实类型,然后这里是用的是呃取整的方式是这个福点类型, 呃,就比如从将一个负二点六五的数字,嗯,这里面表示为一个有符号的字, 日常为八小数部分使用三位数据,这个数据就可以描述成 f, x, dt, 然后他是一逗号八,逗号三 啊,因为这里面的话,通过这个固定点数据类型就是 fisdt, 这个数据类型他是,他是由符号位置长和表示小数数据位构成的, 首先他有输输入的三个三数,第一个的话首位一表示有符号,零的话表示无符号,那这里的第一个输入三数是一,因为他是负二点六五吗? 那这里的话就是一,然后这里是字长的话就是有储存单元有多好,跟二定制构成,这是用字长为八位,然后八,然后这里小数点后有一位,两位,三位,那这就是三位,然后通过这个负二点六八,通过这里设置 comet 里面的参数的话,就是选择的是 f, i s, d, t 啊幺幺四六三和这个幺八三,里面的数据的话是可以修改的。然后最后的话他呈现的一个结果,二禁止的话,他就是 呈现的就是 sibin, 那这里的话就是通过这个十六位,这里是通过八位去看,那这里的话实际上可以看出,呃他的一个差距。 然后这个第六个的话就是接地模块勾漏呢,勾漏的模块的话是将作为这个输入端口接地的模块,呃,就是避免某些模块出现输入端没有连接的时候, 呃会有警告,这样的话通过这个过滤的的话,有一个输出输出纸的话会零,呃,当然用的比较多的可能会是这个中指模块, 中指模块的话就是当模型中某个城市有输出端不连接其他模块的时候,就没有连接的时候,他可能会警告,就是啊,涡轮这个奥勒铺的炮头一这个印一直都没有连接,那这样的话可以也可以将这些输出口端连接这个中指啊,他命他命道的这个 这个这个这个他们弄的这个,这样的话就是会避免暴挫。 呃,这个 tiny note 模块的话,可以接受生命力可支持的数据类型,时速复复数符,固定点,数据类型都可以。然后第八个的话就是这个 clock 模型的一个输出仿真,呃,也可以作为一个输入,然后这里的话就是 是呃刚刚的一些仿真的一个图,我们运行一下的话,可以看到这里是通过一个 pi, 通过一个对的 tip 了,很明显转化成一个三,这里的话是通过这个二十二,二十二, 通过这个存储就是他实际上数据的话,存储在这里面的话是以这个二镜子存储的,二镜子的首位的话会表示这是他的一个符号,首最高位为一的话表示他是负的,最高位为零的话表示他是正的。后面的数据的话就是就相当于他是存储的一个形式。 然后这个时钟啊,深咬 ocq 信号的话,他是输出仿真时间也可以作为一些函数的输入,就比如说 它里面的设计到的一个 t, 这个时钟可以看成是一个变量 ttt 作为一个输入,比如说这里面有一个时钟直接进一个四拨七,可以看到他四拨七的输出的话,实际上是相当于是 y 等于 t 这个时间,那所以的话他的一个输出实际上就是一个 t 或者是对一个 t 啊。比如说我们用这个数学函数符号数学 max max, 呃,就是那个数学运算符 max max faction 去看它的一个指数和这个对数,就是对这个输入的优,这里面的优的话也就是这个 t, 呃,就是一的 t 次方,才能以这和这个 logo 以时为 d t 的次方作比较,我们用这个试播期比较一下,然后可以看到他这是一个指数增长,这里的话也是一个 增长站的比较缓慢啊。所以的话就可以通过这个这个 clck 时钟信号的话,时钟模块的话实际上也是一个信号源的一个模块。 好,今天主要是一些简单的例子去介绍了一下这个信号合并与分解模块、总线创建与总线选择模块、线浮模块、数据类型转化模块啊、中指模块、接地模块、始终模块等等。好,谢谢大家。

这节课我们一起学习一下数据类型转换模块它的使用, 这个模块它主要应用在与硬件相关的一些数据的一些转换。 呃,如果是我们只做纯仿真啊,不依赖于硬件,那么整个我们在算法或者是仿真的时候呢,所有的数据类型都认为都默认成 double 类型,那么 基本上你整个算法里面都不用,都不会用到这个数据类型转换。但是你的算法如果跑在不同的硬件设备上,比如说跑在 呃八位,十六位,三十二位,呃,甚至六十四位这种单片机或嵌入式系统里面,那么这个模块数据类型转换模块可能就用的是比较多的了。 好,我们先看一下这个模块在哪里啊?嗯,打开 simulink 库浏览器啊,在第一啊, common blocks 啊,通用模块里面,第四个就这一个模块。然后呢,我们可以右键啊,把它加载到我们的呃模型工程里面去啊, 好,这样就加载出来了。加载出来之后呢,我们先看一下 它的配置啊,呃,输出的最小最大值啊,这两个呢?呃,一般呢,就是说,呃, 经过这个数据类型转换模块,你要呃设置他的最小最大值,可以设置也可以不设置啊,一般情况下我们都不会设置啊,就是使用理论上的最大值。好,这个就用的比较多。 输出类数据类型,就说你想把输入的数据转化成什么输入输出类型,什么数据类型啊?这里有。 嗯,用的比较多的呢,就是中间的这个 double 类型到布尔类型啊之间的这些啊,这些啊,根据不同的硬件设备进行选择 啊,还有下面呢,还有一种是那个 fix d t 啊,这个函数,它呢是那个用定点数来表示啊,一些小数的一些呃方法啊,这个呢就是也是一种数据类型,还有一种呢是这个媒体类型啊,媒体类型 好,嗯,再往下这个呢就是勾或不勾输,锁定输出数据类型,以防止被定点工具更改。这个呢一般呢一般的呢是 呃不勾的啊,就说我们我们一般很少用到定点工具啊,定点工具箱里面的一些是呃那个呃模模块,所以呢这个呢就可以。不不不,勾。 好,我们说出来你输出数据类型和输入和输出的依据是什么呢?这里呢有两种选择啊,一种呢是真实值相同, 就相当于你输入和输出的,这虽然是两种不同的数据类型,但是呢数值是相同的啊,这是第一种真实值,第二种是存储的是整整数, 这是什么意思?就是一些数他在计算机内存里面都是按照字节啊字节来进行表示的,按照计算机内存里面存储了这些字节的。呃数值,这这里面的这个数数值是不变 变的啊,依据是这个啊,这个呢就是 s r s r。 好,这还有一个摄入类型啊,摄入类型呢?有有好几种啊有好几种,我们来看一下啊。 舍入类型默认的话呢是向下,向下是什么意思呢?你看将正直和负直朝负无穷方向舍入啊,朝富无穷方向舍入啊。 嗯,过会我们会举个例子。还有一种是正向上,将正直和负直朝正五经方向舍入啊,朝正五经方向舍入。 嗯,就是这个。然后呢这个配置里面还有一个就是溢出啊,对溢出默认的话,溢出呢是 off 啊。 off 是什么意思啊?溢出将 倒回到数据类型可以表示的一个合适值。其实啊,你如果选择 off 了,他一旦溢出啊,他溢出的这个数据值啊有可能是一个 嗯时时刻刻在变呢,而且是不确定的一个字啊。呃建议呃建议可以选择啊啊。就说将艺术饱和处理为数据类型,能够表示的最小值或最大值就是负的一负的幺二八或正的幺二七,比如话有符号的数,呃可以保证负幺八, 他还有一个提示啊啊。如果你希望优化生成的代码的效率,请考虑清除此副选框。 就说如果我们在开发过程当中你可以把它改成啊,但是如果一旦你的算法所有的 逻辑都已经固定了,然后也也经过了验证,那么你可以把它画成 off 啊,把它画成 off, 因为你一旦选择 on 的话呢它这个是是是影响代码的执行效率啊。好,我们看一下。呃现在的这个 现在的这个这个功能使用好。第一个呢,我们这的是这个数据类型呢是 int 八,然后呢转把它转换成 double 类型, 就相当于我们把一个整数啊,不管是正整数还是负整数啊,我们把它转化成一个 double 或牲口类型啊,我们看一看一下这个效果啊 喂,你你可以看一下输入的是负五三,然后输出的经过 double 类型之后转的也是负五三。也是说 不管你前面啊,我们看一下,先看一下这个配置啊,输出的是 w, 然后呢是真实值向下移出啊呃然后对整数进行饱和处理,这个我勾上了啊,因为在测试当中,所以我把它勾上了 啊,也说如果你前面的是一个整数,然后呢,你把它转换成申购或 w 类型,那么转换的这个数和你输入的这个数是一模一样,而且值都不是不会变化的啊。嗯 嗯,比如说你负的,呃,负五三,负啊,一百零三啊,负一百零三啊,这也是个整数, 你看这个显示的这个值都是一模一样不会变,就是这种是是也是一种用的比较多,但是这种值的好理解啊,就说前后值一模一样。还有一种情况是前面呢 啊,是啊啊,牲口或 double 啊,这后面呢,你要把它转化成 inter 或 you inter 啊,我们看一下这种情况,比如我们先双击一下看一下,哎,他呢这个就是 double 类型啊, double 类型负五百三,这个 double 类型,然后呢你输入的这个是 inter 八啊, inter 八啊, inter 八,然后呢输入类型是 这个呢是印的八,然后真实值,然后呢向下移出啊向下移出,然后对整数进行饱和处理啊饱和处理,这个我勾上了啊 啊饱和处理之后你会发现你这个已经超过负运营的八的表示范围,你看他默认的就是就让他为负了一百二十八啊,如果我把这个给取掉啊,不溢出饱和处理,他呢就是一个,就是一个,就是另外一个值,而且这个值呢,他会 随着你这个字输了这个字的变化而变化。比如啊,你的负五百三,对吧?嗯,负五百三十一啊,我们举个例,举个例子啊, 你看他这这个值变,其实你后面这个值也是在变的好,呃,这是这一个,还有一个, 我们这里面有一个整数使用模式选择是默认的是向下,比如说啊,我举个例子啊,你这里是负五十一点,负五十一点三啊,比如这个啊,负的五十一点三,然后我们再看一下这个结果,哎,你看这种,如果这个输入的这个数据 在它 inter 八的这个表示范围内啊,它表示的是负二,负五是二。为什么呢?刚才说了 啊,向下时而入,就是说把 正值和负值朝负无穷方向舍入,我们看一下负五十一点三,朝负无穷方向的第一个整数是多少,是不是负五十二,对吧?是负五十二,所以他就变换成负五十二,这个是你的舍入方向决定的。比如我再改一下舍入方向,我选择向上, 也说他向正无穷方向深入啊,我们看一下向上,是将正直和负直朝正无穷方向深入,你看你这个朝正无穷方向的第一个整数是不是负的五十一啊? 对吧?我们看一下结果是不是负的五十一,哎,你们看这结果就是负的五十一了。因此就说我们这个模块这两,呃,这个模块的两种使用方法,一种是整数转 w 型, 另外一种是 double 转整数型,这两种情况啊,大概都讲解了。

我们一起来学习一下乘法模块,乘法模块呢,它有两个功能,一个呢是算数乘法,就相当于呃数值,数值和数值进行相乘。第二个呢是矩阵和矩阵进行相乘啊,可都是用同一个乘法模块, 这是我们搭建的一个比较简单的乘法模块,这是两个输入值,然后呢这是乘法模块啊,然后这是,呃,这是这个显示,显示模块 display。 好,然后我们看一下乘法模块在哪里, 它呢?在那个 simulink 里面常用啊?模,呃,常用模型里面啊,这一个就是这一个 product, 然后你右键啊,我们右键把它加载到这个模型里面去啊,就是这 啊,我们先把原来的这个给删掉,好,放到这里之后呢,我们把它呃拉大一些啊, 好电影就呃拉到之后呢,我们就直接就放在这里,然后它里面的配置呢,都是初始, 初始的默认配置啊,我们进行一个效果来看一下,然后呢 ctrl 加 t, 然后就用仿真,哎,我们看一下,三点五乘以二等于七啊,这个结果是正确的,哎,所以呢,这个这就是这个验证了,这个模型呢,呃能够正常使用啊, 然后我们来看一下如何正确的使用它。好,我们先看一下 这个双击之后呢,这里面你看它里面已经介绍了,其实这里的文字已经介绍他模型是怎么使用啊?你就说乘法的时候你加心啊,除法的时候你加啊斜杠,这样就可以进行乘法运转,比如, 呃,写的是星星,呃,斜杠星,那就表示,呃呃优一乘以优二,然后除以优三,然后再乘以呃优四啊,类似于这种来呃这种运算来的。 好,我们举个例子啊,在这里,呃, you 属性框里面有两个,两个啊,一个是主要,一个是信号属性啊,两大类。 呃,正常时候这个输入数目呢,它写的是二,是两个数进行相乘,或者两个矩阵进 相乘啊。如果啊,如果大家,呃,当两个数相乘的时候,这这里可以写数值二,也可以这么写啊。我们举个例子,一个写啊,两个心,两个心也表示两个数或两个取针相乘,我们应用一下, 你看这个时候,呃,效果和和我们这里写二的效果是一模一样,你看他们根本都没有变,对吧?都根本都没有变啊,如果我们再写一个啊,再写一个乘法,再写一个心啊,那就是三个乘数进行相乘,你看他就多了一个啊,如果这里啊,你 写反斜杠,那么这就是前两个相乘,然后再除以第三个,让我们看一下眼睛空宽啊,前两个相乘,再除以第三个啊,这样就可以。其实这个模块既可以当成 法,也可以当除法啊,除法模块,所以啊,我们吸两个就可以了啊。我们给大家看一下两个、三个或四个是怎么用的好,我们还是用两个 在这里呢,呃,是按元素啊,按元素相乘啊,仿真一下, 你看他就是七,这个结果是正常的啊,我们在这里呢不,嗯,不输入的不是元素了啊,是我们让他是一个矩阵啊,矩阵我们写一下啊, 写一下矩阵,然后呢?矩阵的大小我们来看一下啊,写一个一啊一,然后呢?嗯,二,然后三啊,这个就是一一二三,一个二乘二的一个矩阵啊。 好,这里呢我们也写一个矩阵,嗯矩阵这里我们写多少呢?我们找随便找一个啊。啊也是啊,和他一样啊,一一嗯新号二三啊,也是一一二三。 好,也说我们两个一一样的矩阵进行相乘,然后我们,嗯看一下结果 啊,注意哈,如果你是矩阵相乘,那么这里这底下这个地方就不能再按元素啊,那么你就要按按矩阵啊,按矩阵进行相乘啊,选择配矩阵啊。啊。我们先看一下如果我们配这个行不行啊? 反正一下啊他也是行,就说他也是行,那他 他的结果是什么呢?他是按元数啊,按元数就是一,是这里的一号元数乘以这里的一号元数是一啊,这里的二一号,呃这个元数和这个对应位置上的元数相乘啊, 然后这里的二和二变成四,然后这里的三和三成变成九。啊,明明白了吧。就说如果你这里按元素成矩阵也可以成,但是是对应位上的矩阵,嗯元素进行相乘,然后最后组成了一个矩阵。好,我们这个呢我们 你按写成完全按矩阵进行相乘。好完全按矩阵相乘的时候他就变了,你看矩阵的,呃这种乘法。好,我们来看一下结果啊,反正一样。好,那就变了,你看他 他的笔结果就变成了啊,三四八一十一啊。也就是说,嗯两个矩阵相乘的时候也会存在,呃会存在两种情况,你是按照矩阵的元素进行对应位置上的元素相乘还是按照两个矩阵进行相乘啊? 所以呢不同的呃配置最后的结果是不一呢。还还有一个信号属性,这里呢就不再说了,这个是和 constant 的,这个呃,是一模一样的。这个一这个一模一样的啊,我们就按这个默认配置就行了啊,默认配置就行了。 所以在这里我们就看到呃, product 啊, product 这个模块。乘法模块呢?它可以实现算数啊, 普通的就是带那个数值与市值相乘或相除的这个功能,同时还可以实现矩阵 相乘啊。矩阵相乘又分成两种,一种呢是矩阵对应元素对应位置上的元素相乘,组成一个新矩阵啊。第二个呢是纯的两个矩阵啊,按照矩阵的乘法运算法则来,是来进行运算啊。 好,这节课我们就讲解了。呃,这个乘法模块的使用。

那我们接下来看一看这个第四节啊, rms prop 那么刚才讲的这个 adegrider 呢?呃理论上的游戏比较好的性质对吧, 但实际上呢他优化神经网络的时候呢,他并不友好啊,就是刚才我们讲的随着你训练周期增加以后增长以后呢学习力降的就很快是吧。 哎那怎么样子来改进呢啊,我们说你可以给他一个什么一个极致对吧?这是一个还有一个办法就是更简单了就是做一只快乐的小金鱼让他忘记 过去。但是呢不是全忘记啊,小金鱼他也是能据说有几秒钟的记忆对不对啊,大概七秒钟的记忆,七秒钟以前的事他不记得了。 那我们在这个爱的国爱的里面引入一个衰减因子啊,这这个是不是很像我们疼对吧。那么凯旭啊我来家的时候呢把以前的呢呃成一个白档啊,然后当前的呢成一个一减白档 啊,就这两个呢,相当于做了一个加权的一个核对吧啊 这样的话做了一个过去跟现在的一个权衡啊。那白糖呢同样是个超仓数啊,来调节水减量的,一般呢啊通常取零点九或者零点五啊。 大家看一看如果不考虑白塔一剪白塔这个红色部分不就是爱的 good 吗对不对啊,是简单这么加了一个衰减因子以后呢 他就不会无限的累积了啊,他有就会有最后有一个底哈。那么在更新阶段呢啊跟爱的国爱的完全是一样的啊啊在实践当中啊这个 rms pop 这种这个更新方式对于深度学习网络来说呢是十分高效的,也是深度学习当中最有效的更新方式之一啊。 那么在 carries 当中我们呃也是已经实现了这一种呃优化的方法啊,那么我们啊 相关的参数,比如说这个 linen rate 啊,有些绿了对吧?啊,默认呢是零点零零一啊,这个 row 季度平均移动均值的一个衰减率啊,就相当于我们呃刚才讲的白搭啊, episode 啊,也是这个区域很小的值啊。 decay 呢,是每参数更新好学习率的衰减值 啊。这个 rms prop 这种优化器呢,对于训练循环神经网络来说是个不错的选择,但这个我们以后再讲真循环神经网络啊 啊,一般我们也是建议使用这个优化器的默认参数啊,当然这个学习率你可以自己这个 呃调啊,其他的呢,就选择默认参数也可以了,就可以了,当然这个时候你可以比如说选零点五万对吧?啊,都是可以啊。那么这这一个优点的话,他 最大的优点就是客服 adegrad t 度极具减小的问题啊, 同时他又保留了这个爱的怪的优点,在很多阴谋当中都展现出了这个优秀的学习率自适应能力啊,尤其是在一些不稳定的目标函数下面啊, 要他有比基本的 sgd, momentum 啊, adegrad 这些表现都要来的好啊。这个一种方法呢,也是这个 haint 教授在他这个教案当中提到的用算法在 hating 教授我们不止一次提到是加拿大东林中大学这个教授,他是 啊对我们这个呃深度学习啊,他做了非常大的贡献的一个人啊 啊,这是呃,第五章的第四节啊。

这节课我们学习一下 simulink 里面非常常用的一个模块, constant 模块的使用, 这是我们搭建的一个简单的一个模型,我们先来看一下这个模块在哪里? simulink 酷浏览器里面啊,第一个就是 simulink, 然后这里面有一个啊,最顶层的这个叫做 common 啊,常用的模块里面啊,点击一下在这里我们就可以看到啊。第三个是 constant 啊,这个就是, 呃,长长束模块,然后呢,我们怎样加载把它加载到模型里面去呢?啊,可以用右键啊,点击这里啊,像模块 啊,像你自己新建的这个,呃,模型名里面添加这个模块啊,添加, 哎,调好了之后呢,这个模块就来了啊,就到这了,嗯, 这个呢是我原来建的啊,这在这里,我把它删掉,就是删掉。好,这是一个一种方法,还有一种比较简单的一种方法啊,我们知道这个模型名呢,他叫做 constant 模块啊,所以呢还有一种方法,就是啊,在模型啊,你既然的这个空的模型名的 任意一个位置双击啊,然后这里呢啊, constant 啊, constant 他啊,你输入 constant 或者是 constant 前几个,呃,英文字母啊,他会自动的联想,然后呢联想的第一个啊,他就是这个, 然后呢你可以回车啊,回车。哎,这样呢,也是一样的啊,这个模块也被加载到这个模型里面去了,好,呃,这是我们今天要使用的这模块,然后呢我们为了方便观测,我们要加一个,呃,观测模块啊,观测模块呢?这里呢?我们用 display 啊, display 啊 display, 然后呢也是用第一个啊选择,呃,回车它呢,这个啊,然后连到一起啊,这就是我们今天要讲解的这个呃 模型 d display, 这个模块呢它显示的是一个,呃,就是数值型,数值型动态显示,呃那个我们以前用过 scope, scope 呢,它是一个动态显示,你可以呃一段时间内看你这个数据的变, 因为我们是个常数,所以呢我们只需要看到它的数值就行了。好,然后呢我们对这个模型进行一个配置,我们看一下双击, 双击里面你看它上面写的是一个 constant, 然后写上它的一个基本功能,他说输出有常量值参数指定的常量, 如果常量值是向量,并且将向量参数解释为一位向量处于启用状态,则常量值是为一位数组,否则输出七为数与常数值相同的矩阵。啊,这个呃 比较长啊,三句话啊,第一句话就说他输出的是一个长量值啊。啊,然后呢在这里我们可以看一下, 如果默认值是一好,那么一,然后呢我们就仿真一下,好点击这个运行, 呃点击运行这里呢之前呢你看他可以看到,呃, ctrl 加 t 也是,呃仿真运行啊,以后呢我们就按 ctrl 加 t 啊,然后点击他,哎,你看他就把这个长值,呃,据说这个模块他输出了,就是你输入了这个长值啊, 我们知道我们输入的话如果,如果有时候是一个数组,呃一个元素啊,就是一个长数是一个也有可能呢是长啊,就是 长的,呃长的,呃向量,或者是长的矩阵,对吧?啊?我们再输入一下,看看每输一个长的呃向,呃长的向量啊,一 二啊,这样长项量呢,他就这样写。是就是中间要加个中国号啊,跟我们这个矩阵表示是一样的, 然后呢这个是一二,呃,只呃元数一呢是一,元数二呢是二,然后呢中间空格啊就行了,然后点击确定啊,然后我们把它再稍微拉大一点,哎,他显示的时候啊,就可以看到是这样的,然后呢我们再访问一下, 哎,你看哈这个时候啊,注意啊, 这个时候他就 这时候,你看哈它就是, 嗯,把一和二这两个元素都都输出了啊,都输出了, 好,嗯,这是这样的,如果你就是说是一个,其他的,比如说是一个,嗯,再再来一个是二乘以二的矩阵啊,二乘三四啊,这样的话啊,我们看一下效果 啊,这样看抽屉啊,哎,这样的话,你看他就是输出一个一二三四是一个矩阵,相当于就说这个场量呢,可以是呃标量啊,也可能向量,也可以是矩阵,就说他这个这个就是形式比较多多样,嗯, 好,这个是我们要长竖直角填的第二个,我们看一下这个,这个呢他勾上了,就是默认的是将向量参数解释为一位向量,什么意思呢?我给大家举个例子啊,还是刚才这个啊,我们显示 是一二啊,让他显示一二,我们看一下,反正啊一二的时候他把一二直接呃输出了,但是呢他这个矩阵的这个尾数啊,是二,呃呃,矩阵的这个尾数显示的是二,我们看一下啊。 呃,矩阵尾数怎么看?查看呢?我们可以在这里啊,其他显示里面,嗯,信号和端口啊啊显示信号的维度啊,信号的维度啊,这里面就是如果你把它勾上,它显示的是一个二啊,维度是二, 就是他以项链的形式就是有几个元素,这个项链里面有几个元素为数呢?是呃二啊,如果你不勾上啊,我们看一下啊,如果你不勾上啊,就说你把这个长量不解释为因为 向量不解释因为向量,那是什么呢?那就是呃,矩阵对吧?矩阵,我们知道我们现在这个矩阵是一,一行两列,对吧?啊?一行两列哎,你看他的输出还是一和二,但是呢他的形式就不一样了,他呢就是他的尾数就是一乘以二,就相当于 你把它勾上啊,把它勾上,你把这个给勾上的时候,当这个长数值是一个 向量的形式,他输出的他输出的为数是向量的个数啊, 如果你不把它勾上,那么它输出的就是一个矩阵啊,一个矩阵它的维度就是一乘以二,就是一行两列啊,默认情况呢,我们是把它勾上啊,默认情况把它勾上啊,点击应用。哎呀 ok, 好,我们再访问一下, ctrl, 哎,他就是这个,就说你不管你是勾还不勾,最后的输出的这个值呢,是一样的,只不过呢在输出的过程当中他的维度显示是不一样的啊,这是这个原这一个功能啊,这个呢是采样时间, 产项时间呢,最好是用 r n f 啊, r n f 是相当于长量就相当于,因为你既然是长数嘛,你就 就是相当于每次不需要采样,因为你只负一次值就可以了。如果你写成负一的话,那么每个周期,每个周期这个 呃,他都会重新给某给输出的这个变量,然后负啊负这个元素的值啊,这样是浪费 cpu 的时间,尤其是在呃嵌入式系统里面啊,最好呢,我们是用 rnf 啊,这里呢我们就讲完了, 接下来我们往后看,这里有一个输出的最小值,最大值啊,如果你对他进行线服,你这个里可以写那个数最小最大,一般呢我们这个都不用啊。 然后这个输出类型啊,讲解一下啊,输出类型默认的话呢,就是 constant, 就是 double 类型啊, double 类型,如果你不用 double, 那么你就要在这里进行命名啊,比如一二,我用,比如说啊,我用 in the in the 十六啊, in 十六 啊,然后我再访问一下,哎哎,他输出的值还是一二,但是呢,但是他真正在呃计算机里面内存里面呢,占用了呃字节的个数是不一样的,就是 int 十六呢,是只占两个字级啊,这个呢是康斯定的是呃,是是是,是八个字 啊,一般的都是呃 w 类型,是八个字节啊,这是这一个类型,然后这个呢是锁定输出类型啊,呃,背定点工具啊,如果你使用使用到了那个定点工具箱 注,就要注意这个地方要不要勾和不勾,一般情况下,如果你不使用定点工具箱,这个地方都是空的啊,都是空的啊。这节课我们就主要学习了这个 constant 这个模块的使用。

大家好,今天给大家展示一下如何使用 simulink 里面的 bus 结合模块和 bus 分离模块。 我们先这是搭建好的一个模型,我们先进行仿真一下, 打开试播器, 在这里我们可以看到第一个信号是这个黄色的,是第一个信号,他没有被放大,第二个信号是被放大的两倍的 一个信号,可以看出仿真结果和预期的是一致的。我们接下来看一下如何正确的搭建这样的一个模块。 首先把这个模块删除掉, 然后打开 simulink 里面的库,选择 simulink 里面的第一第一排,这就是这一栏里面是常用的一些模块。我们今天讲解 最前面的这两个,首先把鼠标点击到这里,然后点击右键,然后加载到我们刚才的那个空模 井里面去,同时把这个 bus 分离模块也加进去 好,加进去之后,因为我们除了这个还需要其他的一些模块,他们分别是呃争议模块在这里也有,然后右键 点击加进去。好,还有一个呃 sport 七模块,然后点击右键加进去。 此外我们还需要一个圆,这里的这个圆呢,我们使用身边宁可提供提供的自带的这个 counter li limited 计数器模块。 好了,加载好之后,我们首先把模型进行排布,首先是原计数器模块,然后试播器放到后面,然后还有一个争议模块, 这个是这个是分离模块,这个是结合模块,我对齐之后点击这个模块有点小了,我们拉大一下, 好,这个点击好,这边用线接到这段一起,为了美观,我们把线对齐 啊,这个也对齐, 为了方便观看,我们这里,呃, bus 分离模块呢?我们这个其实总线里面是 bus 模块,是有两个信号,我们这里只分离其中的一个信号。 阿姨, 好,接下来我们要给我们的 bus 模块每个信号进行命名,在这里大家注意一下,首先你点到第一个第一个信号,然后双击这个线, 然后给它取个名字,这里呢我们取一个名字, 信号一, 这个呢我们取信号二。 好,这个为可以拉过来对齐, 然后这个争议呢?呃,默认是一,我们为了已是区别,我们这里呢放大两倍,嗯,因为这个是一倍嘛,然后这个是两倍的区别。好,这个这时候我们再看一下总线, 这里面你看它就有两个信号,同时这两个信号的名字分别是 single 一和 single 二, 然后这个是总线分离,我们这时候呢总线我们只取其中的一个信号,那么就选其中的 一个,这里呢我们把原来的都给删掉,然后把其中的我们选选信号二,选信号二。好,点击确定, 再把试播器接上,好,这样你看选好之后我们就可以,它自动的会显示,呃,你显的是信号二,接下来我们对整个模型进行求解器进行配置,点击模型配设置, 然后这里呢?呃,开始时间是零,我们仿真时间呢?停止时间选为一啊,就是一秒,然后呢这里选求解不长,我们选的定不长,然后 求解器呢?我们选离离散求解器,然后不长的时间,是呢,零点一秒, 我们这里选定步长和离离散求解器,主要是为了,呃,嗯,进行数字化处理,因为, 嗯,很多控很多,那个像,呃实际的控制器啊,他呃跑在单片机里面或者是千数设备里面,他呢?呃不支持这个变不长的, 所以呢我们为了打能够达到仿真和实际控制器一致的效果,那么我们在做仿真的时候呢,就选择定布长和离散化的这个球结器。好,选好之后,接下来我们进行仿真, 点击仿真,然后点击这里仿真运行按钮,很快,因为这个模型非常简单,很快就可以看到。接下来我们看一下信号二, 好,按照我们的分析,这个就说他应该是原来信号,呃进行放大了两倍,然后我们看一下默认的这个信号信号源的配置,他呢是上限是七,那么 它是一个计数器,它呢就是从零到七,然后到了七之后再回到零,那我们再看一下它这个 他这个结果,你看刚开始是零,接下来这一个呢应该是,呃,接下来这个应该是二,因为 一乘以二就变成了二,对吧?然后最上层的这个呢,因为它最高是到七,那最后最后我们可以看一下它是十四,所以和我们这个理论分析啊和仿真啊是一致的。 这样的话呢,我们就基本上掌握了这个这两个 bus 总线,嗯,结合和分离这两个如何操作?


link 里边卡尔曼铝箔器里边对这个 a、 b、 c、 d 四个矩阵进行一个复制,现在介绍一下这个卡尔曼铝箔器,这个卡尔曼铝箔器呢,在这个 simulink 里边 它是有现成的这个模块,输入 k、 a、 l 在这边第一个模块,这个模块在 simulink 里边呢是是有现成的,就是不用自己去编写程序,在 simulink 里边直接单用就行了。然后打开这个模块, 打开这个模块呢,首先第一个,第一个这有一个食欲,在食欲里边呢可以选择这个 离散离散时间和这个连续时间,在这个模型当中选择的是一个离散时间,然后下面,然后下面这个选项呢?然后下面这个 model model source, 然后下面这个 model source 里边有三个选项,一般常用的是这个第二个选项,就是调出来这个第二个选项之后,就可以对这个卡尔曼绿波里边的四个矩阵进行一个复制。 在 my lab 里边那个 m 文件里边已经已经对这个 a、 b、 c、 d 进行复制了,这边我就直接输入这个 a、 b、 c、 d 对应的矩阵就可以。然后这有一个来源,这个来源呢就是选择这个 选择,第一个就在这里对,直接对这个 carman 绿波里边所选择的这个状态变量,就在这里对这个 carman 绿波里边状态量进行一个复出值,在这在这里出值复的是两个都是零,也就是刚开始的时候这个 直音磁盘卷贝塔和这个横排角速度 omegr, 就是刚开始的时候都是零,然后这个呢?这个矩阵 g 和 h, 这个我也没太明白什么意思,然后主要是下面这个 q r、 n, 这个 q 呢,就是就是你建模过程中所引入的噪声的一个方叉,这个这个 q 的值越大,相当于相当于你建立的这个模型更不准确。那在这里呢,在这个例子里边 所提到这个模型就是车辆二十九度汽车模型,那如果这个 q 等于零呢,就相当于你所设计的这个模型, 就是它的可信度是百分百,它是这个模型过程中它是没有误差的。然后下面这个 r 矩阵,就是你传感器采集一些车、 汽车的一些信号的时候可信度,这个 r 呢,就是观测方程中由于传感器误差所引来的一个观测噪声的一个方差, 同样这个方差,这个这个数值如果越大的话,相当于你传感器的误差就更大, 这个误差就代表了你传感器的一个误差,那么同时就是你对这个传感器所测量的这个数据 是并不太相信的。如果这个 r 等于零的话,相当于你对这个传感器所测量出来的这个数据是百分百确信的。 这个 q 和 r 两个数值的一个大小会决定这个卡尔曼争议,因为卡尔曼争议相当于是对你模型所估计出来的一个估计值和这个通过传感器 观测的一个观测值,就是两者进行一个加权,这个 q 和 r 呢,就能决定你最终的结果是更加偏向于这个 传感器所测量出来的一个一个观测值,还是你车辆二十度模型估计值 n 等于零,然后下面这个 n 等于零,就代表这个过程造成 q 和这个观测造成 r, 就是这两个数值是独立的, 是中间是没有什么关系的,就是一般在在这里就是填一个零就可以。然后下面是这个 simple time, simple time 就是它的一个,就是这个卡尔曼绿波的一个采样时间,因为这个是离散系统,你需要设置系统的一个采样时间,那在这里,在这个模 模型里边会涉及到很多需要在这个模型里边有很多模块会涉及到这个采样时间,这个采样时间就是要尽量保持一致, 如果不是一致的话,运行就会报错。然后现在呢,我把这个 cassim 里边设置好以后,跟这个 similink 模型进行一个联合仿真, 在在这儿,在这儿会注意到这个这个 carmen 绿波这个框它发红,它发红的原因呢?就是 他这,你看他这提示,他这说这个 a、 b、 c、 d 这四个矩阵,就是你这样写 a、 b、 a、 b、 c、 d, 他不知道这个 a、 b、 c、 d 是什么意思,这个问题就是因为咱刚才写那个 m 文件,他并没有运行,运行完运行完以后,这个模型就是检测到这个 a、 b、 c、 d 这个模型就可以运行了,这是刚才写好的一个 m 矩阵,就是里边包含这个 a、 b、 c、 d 这四个矩阵的一个信息。然后现在运行一下,运行完以后工作区间上已经有这些。

我们知道 matlab 对向亮和矩阵的支持非常友好,那么如何从 simulink 里面提取向亮中的某些元素呢?一般有两种方法, 第一种就是使用 index 模块, 它呢支持动态信号选择,就是说你从项链里面动态的提取,呃,一些元素就是比如这个周期我提取第三个元素,下个周期我提取第五个元素,这种它是支持的。 有些时候在使用的时候,我们不需要动态提取,我们只 只需要静态提取就可以了,比如说我们就提取第二个或第三个,其他的我不要。就是这个时候呢,可以使用 select 模块,它支持静态信号选址。今天我们就看一下这两种模块如何使用。 首先搭建了一个模型,这个呢是一个信号源,我们打开双击一下, 我们可以看到他是一个技术模块,他呢上线技术,上线是七,那么他最后的输出呢就是零、 一、二、三、四、五、六、七啊,这这这八个数字,他计数时间呢?就是我们可以用,嗯, 一秒记一次,那么就是记八秒。然后我们给的数据呢,它使用了我们上一节节的 max 模块,它是把两个 一行四列的矩阵混在一起,那么就变成了一行八列啊,一行八列的一个矩阵,也说这里面的数据啊就是一行八列了,同时为了区分这八个数是不同的,我们呢前四个都是正数啊,后四个都是负数,这样以示区分。 好,接下来我们看一下 index 模块如何使用。首先你双击这个模块, 我们我们可以看到,呃,它上面有一些汉字,然后解释了这一部分就解释了如何使用啊? 它呢有两个输入,就是这个输入和这个输入。呃,第一个输输入端口呢,它是一个控制信号,也就说你可以呃输入它, 呃提取你元素的对应的,呃,元素标号在这里呢。元素标号,嗯,他可以从零开始,也可以从一开始,这是默认是从零开始,这和我们 c c 语言有点呃相似。 当然了,我你也可以选择从一开始啊,从一开始的话,那么你这前面这个控制信号的时候,就必须是大于等于一的整数啊。 它实现的功能就说当这个信号,当第一个信号假如输入 r 的时候,那么它就会把这里面的 这个项链里面的第二个元素提取出来,然后输送到这里面去。嗯, 呃,就因为我们这个是动态的,也就说他的控制信号是零到七,一个不断阶梯变化的,那么他就会呃, 比如他就会第一个周期我提取第零个元素,下一个周期我提取的是呃第一个元元素,然后依次类推,那么最后一个周期呢,就是提取了是第七个元素,嗯, 好。这一个是 select 模块,它呢就相对来说比较更容易了。我们双击一下, 在这里我们可以看到,呃输入参数里面有一个输入尾数啊,输入尾数 这里呢,我们也可以认为是一啊写一,然后呢输入这下面有一个输入端口的,如果你是一尾啊,那个端口还有个大小,那么就是我们可以写八,因为这这里面这个信号里面呢是一个呃有八个数据,那么就写八, 在这里面还有一个呃,所以模式,所以模式和第一个呃 index 模块有点类似,它是可以指定的,就是说你可以从零开始,也可以从一开始,我们为了统一啊,那么都是从零开始, 这里有一个锁引编号,就说这里面总共有有八个元素,你选的是哪哪几个呢?啊?你这里可以写啊,当然了,你我这里选的是第零个和第七个,那么就第一个和最后一个啊, 然后你选择其他的话呢,你可以在空格然后再选,然后你点击确定啊,点击确定了之后,然后他会有一个,呃,有一个这个显示,那么就会显示你喊就是你选的第一个啊,我 端输入的时候有八个,但是呢,我只输出的时候呢,只选了第一个和最后一个,这图像化非常清楚,知道什么意思。好,我们接下来看一下仿真效果。 好,我们先看一下第一个动态仿真图,我们可以看到,哎,呃,因为输的话呢,它是零到七啊, 零到七,我们看当他是零的时候,也就说他提取的是这个元素里面的。呃,第零个元素,第一零个元素是谁呢?我们可以看一下,就是理论上应该是十,对吧,然后你看输出结果,哎,也是十,那么 这一个周期和我们分析是一致的,我们看一下下一个周期,下一个周期,那么计数的时候就变成了一,那么他就要提取这里面的第, 呃,一个啊,序号为一的这个元素,那么他就应该是啊,序号唯一,那就是二十,我们看,哎,输出的是二十,那么这几个就和我们分析的啊是一致的了。 好,这一个我们就一直好,接下来我们看一下第二个 select select 呢,它就比较简单了。嗯,因为 他就他是静态的,他输出那的数字不变。那么就是啊,第一个和最后一个,我们看一下,第一个呢他是十啊,最后一个呢是负十啊,所以我们用这个试播器 看呢,就是十负四十,哎,和我们分析的是一致的啊,这就这节课就讲了一下这两个模块的具体的使用。

今天我们来分享一下 facebook 的这个 nama 的一个推理的这个代码当中的呃一个一个 norm, 这部分的一个代码, 就是可以看到这个地方,这个 model 这个文件里面它有一个 ruming square norm, 就是用来做 norm 的这么一段代码,这段代码不是很长,但是的话它还是比较经典的。然后我们看一下它的原理,它是有一篇论文的, 就是这个讲的话就是呃 rumi square layer norm 这个 layer norm 的话,它主要是用来在这个深度学习当中,呃对于这个某一层的这个输入的这个特征去做一个规划啊,他做这个规划的目的就是说 为了防止某一层他的这个参数会会随着他的这个他的输入的数据的变化而不断去做一个变化漂移。为了防止这种啊,从而使这个模型能够快速的去训练收敛,所以提出这么一个规划的这么一个 呃一个模块。然后他这篇论文的话,他主要是说他提出了一种方式,就是叫做如明 square 这么一种类 nome, 那这种方式的话,他和以前的这种类 nome 的优势在于说啊,他的计算量会比较小, 能够在这种大型的这种深度学习这种网络当中能够减少他的一个计算量。 然后我们看一下他的这个背景相关的知识。呃,这这个,这 这就是他的一个输入的一个特征,然后他去呈上这么一个权重的话,就得到了一个呃呃一个输出,然后再通过一个这个呃非线性的一个函数就得到了一个最终的一个成的一个输出。 那他在这个计算过程中啊,他会去做一个呃, leonalm, 他具体是怎么做呢? 啊?这个就是他的一个规划,他相当于是去哎,在每一个特征上面去减上,减去他的这个均值,然后再去除以他的这个方差,然后再去乘上他的一个 啊一个参数,就得到一个输出,那后面的话就是正常的这个输出,再加上片子,再去过一个非现行的一个激活层,就得到了一个层的这个输出。那这个呃呃,规划 这一部分的话,他主要是要去求这个君子跟他方叉。这个君子的话,就是对每一个这个这个项量每一个值,然后去求和,再去嗯,除以 n, 就得到一个 一个均值,那方差的话,这个是标准差。标准差的话就是呃去呃减,去用每个特征去减去他的一个均值啊平方和,再呃再去求他的平均值,再去开根号,这就是一个标准的求标准差的这么一个过程, 那它这个过程的话就相当于去求这两个参数啊,它是这个 mu 和 c 格码这两个参数啊,它是就是它是比较重的,然后 呃这篇论文的话,它是去提出来一个,就是 remiscrear 这种 note 这种方式,它的改进之处在于是,呃呃呃,就就是下面这一个公式。 那它第一步的话,首先去求一下这个 rumin square 这么一个一个值,那它要它用每一个这个特征,嗯,去平方,然后再去求和 啊,再去呃求君子,再去开方,就是这种,这个就是被定义为这个呃军方根 啊,然后再用每一个这个特征去除以这个均方根,然后再去乘一个他的这个呃一个参数,就直接得到了一个就是呃规划之后的这么一个字,这样的话他的这个计算量主要就是在啊在这一块他就会减少这个 这个去求这个规划的这么一个计算量。然后我们来看一下这个在,呃在这个就是 number 里面他的这个对应的原代码的一个实线, 然后我们对应一下这个就是它的一个 rooming square norm 的一个实现,然后它去实现了一个呃 touch 里面的一个成,然后它去继承了 touch 点 n n 点 model 这么一个 啊类,然后里面是一个首先肯定是有一个 forward 的这么一个函数,这个就是他的一个呃成的一个输入,然后他会去做一个操作,就是他会去调用这个类里面的这个 number 这个方法,那这个方法的话主要就是去实现啊论文当中的 呃这一部分操作啊。然后我们对应的看一下它首先会去调用这个 note 这个,呃这个方法,呃调用之前的话,它首先去把这个输入,它首先去转换成一个 flow 这么一个类型的值,然后调用这个方法,最后再把它转换成这个呃这个输入的之前的这个类型,然后在这个 number 这个方法里面的话,那首先的话他会去做一个呃,对每一个这个项量的每个直线去做一个平方, 那就对应的这个操作,然后再去在最后一个维度再去求他的一个呃均值,那就对应的这个除以这个 n, 然后再去加,再去加一个 epcent, 这个的话再去求这个,呃求这个呃,呃求这个呃根,他是为了防止的话,就是这个前面这个值为零,如果你输的这个所谓的这个,嗯,这个值的话是一个零项量的话,那 可能就是会去相当于对一个零去开开方,这样的话会有问题,这样的话他就会避免这个问题,去加一个这个这么一个,一个非常小小的一个值,就是他是十的负六之方。 嗯,然后这个的话是,呃,他不是直接去那个求平方根,他是加了一个 reverse, 就相当于在这个地方去把这个呃这个均方根算完了以后的话,再去给他求一个倒数 啊,同时再去乘上这个 x, 就是相当于是这个地方,那这样的话这一个 norm, 这个杠, norm 这个函数的话,它主要去完成的一个功能,就是 啊这一块所有的功能,然后计算完了以后他再去呈上一个这个权重,这个权重的话他是声明了 一个参数,然后初始化为一个项量,它是全是唯一,那这个 wait, 这个 wait 的话实际上就是对应的这个 g, 它是一个争议的这么一个参数,那最终的话就算出这么一个字,就是这个成的这种输出,那就在这个地方 啊,最终去返回,那这样的话就是呃完整的这个,呃一个 rooming square 的它的一个原理和一个实线。