早教吧 育儿知识 作业答案 考试题库 百科 知识分享

simulink中的s函数我用simulink搭建了一个模块,用到了s函数,用来实现以下功能:对于一个给定的连续信号u,输出y(t)=(u(t)+u(t+T)+u(t+2*T)+u(t+3*T)+u(t+4*T)+u(t+5*T)+u(t+6*T)+u(t+7*T)+u(t+8*T)+u(t+9*T))/10,其中T是采

题目详情
simulink中的s函数
我用simulink搭建了一个模块,用到了s函数,用来实现以下功能:对于一个给定的连续信号u,输出y(t)=(u(t)+u(t+T)+u(t+2*T)+u(t+3*T)+u(t+4*T)+u(t+5*T)+u(t+6*T)+u(t+7*T)+u(t+8*T)+u(t+9*T))/10,其中T是采样时间(T=0.1s),其主要目的是使有噪声的信号u变的平滑,请问实现这一功能如何用s函数实现,并希望能附带必要的解释,
我用simulink搭建了一个模块,用到了s函数,用来实现以下功能:对于一个给定的连续信号u,输出y(t)=(u(t)+u(t+T)+u(t+2*T)+u(t+3*T)+u(t+4*T)+u(t+5*T)+u(t+6*T)+u(t+7*T)+u(t+8*T)+u(t+9*T))/10,其中T是采样时间(T=0.1s),请问实现这一功能如何用s函数实现,并希望能附带必要的解释,
▼优质解答
答案和解析
function [sys,x0,str,ts] = filter(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes; %调用初始化函数
case 2,
sys=mdlUpdate(t,x,u); %调用离散函数
case 3,
sys=mdlOutputs(t,x,u); %调用输出函数
case {1,4,9},
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes %定义10个离散变量及初值,1个输入,1个输出
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 10;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0=[0 0 0 0 0 0 0 0 0 0];%依次用来保存u(t)到u(t-9T)
str = [];
ts = [1e-4];
function sys=mdlUpdate(t,x,u)
for i=9:-1:1
x(i+1)=x(i);%每调用依次s-function,则将x中的数值向右移动,为计算做准备
end
x(1)=u(1);
sys=x;
function sys=mdlOutputs(t,x,u)
sys=sum(x)/10;%计算平均值