用S-函数编写Simulink中的正弦模块
生活随笔
收集整理的這篇文章主要介紹了
用S-函数编写Simulink中的正弦模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、用S-函數實現一個正弦波信號源。要求其幅度、頻率和初始相位參數可由外部設置,并將這個信號源進行封裝。
S-函數程序代碼如下:
function [sys,x0,str,ts] =ch2example17Sfun(t,x,u,flag,Amp,Freq,Phase)
% 正弦波信號源
switch flag,
????case 0?????? % flag=0 初始化
???????[sys,x0,str,ts]=mdlInitializeSizes;
????case 3?????? % flag=3 計算輸出
???????sys=mdlOutputs(t,Amp,Freq,Phase);
????case {1, 2, 4, 9 }??? % 其他作不處理的flag
???????sys=[];??????????? % 無用的flag時返回sys為空矩陣
otherwise % 異常處理
???????error(['Unhandled flag = ',num2str(flag)]);
end
% 主函數結束
% 子函數實現(1)初始化函數----------------------------------
function [sys,x0,str,ts] = mdlInitializeSizes? %
sizes = simsizes;?????????? % 獲取SIMULINK仿真變量結構
sizes.NumContStates? = 0;?? % 連續系統的狀態數為0
sizes.NumDiscStates? = 0;?? % 離散系統的狀態數為0
sizes.NumOutputs???? = 1;?? % 輸出信號數目是1
sizes.NumInputs????? = 0;?? % 輸入信號數目是0
sizes.DirFeedthrough = 0;?? % 該系統不是直通的
sizes.NumSampleTimes = 1;?? % 這里必須為1
sys = simsizes(sizes);
str = [];?????????? % 通常為空矩陣
x0? = [];?????????? % 初始狀態矩陣x0 (零狀態情況)
ts? = [0 0];??????? % 表示連續取樣時間的仿真
% 初始化函數結束
?
% 子函數實現(2)系統輸出方程函數-----------------------------
function sys = mdlOutputs(t,Amp,Freq,Phase)
sys = Amp*sin(2*pi*Freq*t+Phase);% 這里寫入系統的輸出方程矩陣形式即可
% 修改這個函數可以得到任意的波形輸出
% 系統輸出方程函數結束
?
?
2、在該S-函數接口中,我們使用了三個輸入參數項分別作為正弦波的幅度、頻率和初
相位的輸入,相應地在使用S-函數模塊調用該函數時需要在設置對話框中的S-function?
parameters中填寫這些輸入參數項,然后對S-函數模塊進行封裝,就得到了一個子系
統和相應的參數設置對話框。完成后的系統如下圖所示。最后,設置好示波器顯示范
圍和仿真參數就可以啟動仿真實驗了。
圖:S-函數實現的信號源和封裝結果
總結
以上是生活随笔為你收集整理的用S-函数编写Simulink中的正弦模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC实现图像灰度、采样和量化功能详解
- 下一篇: 操作系统--内核级线程实现