產生三角波(脈衝)
有兩種方法,一個是使用simulink自帶的Repeating sequence模塊,可以在模塊設置界面設置脈衝的形狀和週期,方法比較簡單。
第二種是使用Matlab Function模塊,如圖所示
雙擊該模塊出現腳本編輯界面,這裏我使用以下代碼。(代碼高亮好像不支持matlab。。。)
function y = fcn(time,delta)
if time <=delta
y = time/delta^2;
elseif time< delta*2
y = 1/delta-(time-delta)/delta^2;
else
y = 0;
end
end
它接收一個時鐘信號time
和產生一個寬度爲 峯值爲 ,面積爲1
的三角脈衝,其時的圖像如圖所示
三角波失真
問題產生
仿真時間爲2s時
上一節介紹了兩種產生三角波的方法在使用過程中,如果 過小,比如0.1
和0.0025
其理想中的圖形應該時這樣的
但是在默認情況下simulink輸出的波形卻是這樣的,可以發現的三角形尖的部分被削去了,乾脆啥都沒有了
如果把這兩個波形(和)分別輸入如圖所示的一階系統()中,則會產生如圖的衝激響應
可以看到,simulink沒有正確計算(啥都沒有),也出現了明顯的失真
問題原因
經過分析,其原因在於simulink在仿真時,仿真時間步長相對固定(具體根據使用到的元件自動確定,但一般不會太高),如果脈衝持續時間過短則會導致仿真過程中跳過一些時間點。
例如在時波形出現失真就是因爲在處在兩個時間節點之間
問題解決
調整sikmulink的仿真時間步長可以解決這個問題,具體設置方法如圖所示
- 按下ctrl+e快捷鍵打開Model settings
- 修改方框圈起來的參數(根據實際需要修改最大和最小時間步長,這裏最小爲
0.0025
所以我就設置最大時間步長爲0.0001
,最小時間步長爲0.00001
,以儘可能平滑)
之後再次運行仿真,我們可以看到simulink產生了很好的三角脈衝
一階系統對不同的相應
仿真時間爲2s
,把三角脈衝()輸入之前說的一階系統,觀察響應與理想的衝激響應做對比
三角脈衝響應
理想衝擊響應
系統對不同取值的響應