在哪里可以找出matlab中的s函数模板

已举报 回答
在哪里可以找出matlab中的s函数模板
问在线客服
扫码问在线客服
  • 回答数

    5

  • 浏览数

    917

5个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳
在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。
它的第一行是这样的:
function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。
下面结合sfuntmpl.m中的代码来讲具体的结构:
switch flag, %判断flag,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在sfuntmpl.m的149行,我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下
size = simsizes; %用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 0; %模块连续状态变量的个数
sizes.NumDiscStates = 0; %模块离散状态变量的个数
sizes.NumOutputs = 0; %模块输出变量的个数
sizes.NumInputs = 0; %模块输入变量的个数
sizes.DirFeedthrough = 1; %模块是否存在直接贯通(直接贯通我的理解是输入能直接控制输出)
sizes.NumSampleTimes = 1; %模块的采样时间个数,至少是一个
sys = simsizes(sizes); %设置完后赋给sys输出
取消 评论
在simulink中找到S-Function,点开后输入你保存的M文件名就行了
取消 评论
不得不说啊 呵呵 有点专业 学过 这是我的收藏 可用的 还包括了高斯噪声处理 呵呵 附图是我处理一个实验SEM的图
%椒盐躁声 中值滤波 均值滤波
N=imread('1.jpg'); %读取图像
M=rgb2gray(N);
imshow(M) %显示原始图像
title('original')
P1=imnoise(M,'gaussian',0.02); %加入高斯躁声
figure,imshow(P1) %加入高斯躁声后显示图像
title('gaussian noise');
P2=imnoise(M,'salt pepper',0.02); %加入椒盐躁声
figure,imshow(P2) %%加入椒盐躁声后显示图像
title('salt pepper noise');
g=medfilt2(P1); %对高斯躁声中值滤波
figure,imshow(g)
title('medfilter gaussian')
h=medfilt2(P2); %对椒盐躁声中值滤波
figure,imshow(h)
title('medfilter salt pepper noise')
l=[1 1 1 %对高斯躁声算术均值滤波
1 1 1
1 1 1];
l=l/9;
k=conv2(P1,l) ;
figure,imshow(k,[]) ;
title('arithmeticfilter gaussian')
%对椒盐躁声算术均值滤波
d=conv2(P2,l) ;
figure,imshow(d,[]) ;
title('arithmeticfilter salt pepper noise')
取消 评论
楼主,你知道怎么把matlab程序封装成S函数吗?求经验啊
取消 评论
matlab目录下
\toolbox\simulink\blocks

里的sfuntmpl.m
取消 评论
ZOL问答 > 在哪里可以找出matlab中的s函数模板

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?