查看: 306|回复: 1|关注: 0

[未答复] 萌新想写一个频率可调的脉冲信号S函数,大佬们求帮忙

[复制链接]

新手

5 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
发表于 2019-3-15 21:30:56 | 显示全部楼层 |阅读模式
本帖最后由 『GENT』 于 2019-3-16 15:14 编辑
  1. <div>function [sys,x0,str,ts,simStateCompliance] = sfun(t,x,u,flag)</div><div>switch flag
  2.   case 0
  3.     [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  4.   case {1,2,9}
  5.     sys=[];
  6.   case 3
  7.     sys=mdlOutputs(t,x,u);
  8.   case 4
  9.     sys=[];
  10.   otherwise
  11.     DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
  12. end</div><div>function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes</div><div>sizes = simsizes;</div><div>sizes.NumContStates  = 0;
  13. sizes.NumDiscStates  = 0;
  14. sizes.NumOutputs     = 1;
  15. sizes.NumInputs      = 1;
  16. sizes.DirFeedthrough = 1;
  17. sizes.NumSampleTimes = 1;   % at least one sample time is needed</div><div>sys = simsizes(sizes);</div><div>x0  = [];</div><div>str = [];</div><div>ts  = [0 0];</div><div>simStateCompliance = 'UnknownSimState';</div><div>function sys=mdlOutputs(t,x,u)
  18. f=4000; %频率
  19. n=0;
  20. while 1
  21.   if (5<=u)&&(u<=400)
  22.       f=f-50;
  23.   elseif (-400<=u)&&(u<=-5)
  24.       f=f+50;
  25.   end
  26.   while (n/(2*f)<t)&&(t<(n+1)/(2*f))  %周期前半段
  27.       sys=3.3;  
  28.   end
  29.   while ((n+1)/(2*f)<t)&&(t<(n+2)/(2*f))  %周期后半段
  30.       sys=0;
  31.   end
  32.   if t==(n+2)/(2*f)
  33.       n=n+2;
  34.   end
  35. end
  36. </div>
复制代码

第一次用s函数,求大佬们帮帮忙,看看哪里出错了

新手

5 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-3-17 10:56:15 | 显示全部楼层
自顶自顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表