[simulink] --- simulink模块(二)https://developer.aliyun.com/article/1442547
3.3 查表模块
所谓查表,就是说目标位一个填满数据的向量或矩阵表格,根据对应维数的输入能够在表中定位一个对应的输出。
1-D Lookup Table
Number of table dimensions:设置查找表维数,可以通过下拉框选择14的维数,或者输入130的维数。
Table data:查找把表的数值。
Breakpoints 1:查找表第一维输入向量,必须按照从下到大严格单调递增。
Edit table and breakpoints:按下次按钮可以在表格里编辑查找表输入及内容。
Interpolat:
Flat:使用输入值和相邻两个breakpoint中较小的一个。
Linear:线性插值法。
Cubic spline:三次样条插值方法。
Extrapolation:
Clip:使用breakpoint端点值。
Linear:线性插值法。
Cubic spline:三次样条插值方法。
示例:256长度正弦查找表
3.4 其他常用模块
数学函数模块
随机数模块
随机数模块是一个信号源模块,可以产生正态分布的随机信号
Mean:产生随机数序列的均值。
Variance:产生随机数序列的方差。
Seed:用于产生随机数序列的种子,可以是0或正整数,根据种子可以产生周期性的伪随机数。保持参数不变,可以在多次仿真中保持同样的输出结果。
示例:对带有噪声的正弦信号进行滤波
传递函数模块
传递函数是描述线性系统动态特性的基本数学工具之一,经典控制理论的主要研究方法——频率相应法和根轨迹法都是建立在传递函数的基础之上。
Numerator coefficients:传递函数的分子向量。
Denomibator coefficients:传递函数的分母向量。
3.5 用户自定义模块
用户可以使用M语言或C语言根据Simulink运行原理编写拥有自定义功能的模块。
Fcn
可输入abs、acso、asin、atan、atan2、ceil、cos、cosh、exp、fabs、floor、hypot、ln、log、log10、pow、power、rem、sgn、sin、sinh、sqrt、tan、tanh组合的函数表达式,输入信号用u表示。当输入信号为多维时,从上到下输入信号的每个维的元素一次用u(1)、u(2)、…表示。
MATLAB Function
双击该模块,可以打开一个M代码编辑窗,它支持的MATLAB内建函数比Fun要广泛很多。
根据Simulink运行机制,每个采样点会调用一次MATLAB Function的函数,两次调用之间,同一个变量的两次计算的终值如何传递到当前计算周期是一个问题。
使用persistent变量可以处理这一问题。
function y = fcn(u) persistent sum_val; if isempty(sum_val) sum_val=0; end sum_val=sum_val+u; y=sum_val;
persistent变量时定义在某个函数内的变量类型,可在函数调用的不同次数间保持上一次退出该函数的值。它同global全局变量的类似之处在于MATLAB为他们创建永久数据区域,不同之处在于它只能被声明它的函数内部识别,目的是免除 此类变量被其他函数或命令修改值而造成用户无法确保其值得困扰。
声明persistent变量时它刚被创建,其内容为空值[ ]。
使用persistent变量需要注意:
persistent变量不能作为函数的输入输出参数,否则会报错。
persistent变量不能同当前工作空间中已经存在的变量同名,否则会报错。
persistent变量不能声明在Command Window中,只能在函数中声明。
示例:自定义3-D绘图函数
function scope_3d(u) % #codegen eml.extrinsic('plot3','scatter3','close','delete'); len=length(u); persistent data; if isempty(data) data=zeros(3,100000); end persistent n; if isempty(n) n=1; else n=n+1; end data(:,n)=u; persistent h; if isempty(h) h=plot3(data(1,1:n),data(2,1:n),data(3,1:n),'o'); else delete(h); h=plot3(data(1,1:n),data(2,1:n),data(3,1:n),'o'); end
S函数