用simulink產生三角脈衝的正確方法

產生三角波(脈衝)

有兩種方法,一個是使用simulink自帶的Repeating sequence模塊,可以在模塊設置界面設置脈衝的形狀和週期,方法比較簡單。

第二種是使用Matlab Function模塊,如圖所示
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δ\delta產生一個寬度爲 2δ2\delta 峯值爲1δ\frac{1}{\delta} ,面積爲1的三角脈衝,其δ=0.25\delta = 0.25時的圖像如圖所示
delta = 0.25時的波形

三角波失真

問題產生

仿真時間爲2s時

上一節介紹了兩種產生三角波的方法在使用過程中,如果δ\delta 過小,比如0.10.0025其理想中的圖形應該時這樣的

delta =0.0025
delta = 0.1

但是在默認情況下simulink輸出的波形卻是這樣的,可以發現δ=0.1\delta = 0.1的三角形尖的部分被削去了,δ=0.0025\delta = 0.0025乾脆啥都沒有了

失真的delta = 0.1
消失的delta = 0.0025
如果把這兩個波形(δ=0.0025\delta = 0.0025δ=0.1\delta =0.1)分別輸入如圖所示的一階系統(dy(t)dt(t)+2y(t)=x(t)\frac{dy(t)}{dt(t)}+2y(t) =x(t))中,則會產生如圖的衝激響應
一階系統
delta = 0.0025時的響應
delta = 0.1時的響應

可以看到,simulink沒有正確計算δ=0.0025\delta = 0.0025(啥都沒有),δ=0.1\delta = 0.1也出現了明顯的失真

問題原因

經過分析,其原因在於simulink在仿真時,仿真時間步長相對固定(具體根據使用到的元件自動確定,但一般不會太高),如果脈衝持續時間過短則會導致仿真過程中跳過一些時間點。

例如在δ=0.0025\delta = 0.0025時波形出現失真就是因爲在time=0.0025time = 0.0025處在兩個時間節點之間

問題解決

調整sikmulink的仿真時間步長可以解決這個問題,具體設置方法如圖所示

  1. 按下ctrl+e快捷鍵打開Model settings
  2. 修改方框圈起來的參數(根據實際需要修改最大和最小時間步長,這裏δ\delta最小爲0.0025所以我就設置最大時間步長爲0.0001,最小時間步長爲0.00001,以儘可能平滑)

Model steeings設置

之後再次運行仿真,我們可以看到simulink產生了很好的三角脈衝
delta =0.0025
delta = 0.1

一階系統對不同δ\delta的相應

仿真時間爲2s ,把三角脈衝(δ=0.0025\delta = 0.0025)輸入之前說的一階系統,觀察響應與理想的衝激響應做對比

三角脈衝響應
delta = 0.0025時的響應
理想衝擊響應
理想衝擊響應

系統對不同δ\delta取值的響應

系統對不同寬度三角脈衝的響應

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章