LTspice中的亂數是真亂數嗎?
LTspice中的亂數是真亂數嗎?
作者:ADI 首席工程師 Anne Mahaffey
摘要
本文討論如何在LTspice®模擬中利用 flat(), gauss()和mc() 函數來實現偽亂數和真亂數的生成,並介紹如何使用設定面板的Hacks部分中的Use the clock to reseed the MC generator(使用時脈重新設定MC生成器的隨機種子)選項。文章探討了偽亂數和真亂數之間的利弊權衡,同時比較了蒙特卡羅統計模擬與更有針對性的最壞情況模擬之間的差異。
引言
在 LTspice® 原理圖中,有多種方法可模擬隨機性。LTspice中的 flat(), gauss()和 mc() 函數支援在LTspice模擬中引入隨機性。本文以 mc()函數為例,說明如何模擬被動元件值的容差。打開LTspice後,選擇 Help > LTspice Help (“幫助”>“LTspice幫助”,或按F1))可打開《幫助手冊》,瞭解有關 flat()和 gauss()的更多資訊。
圖1中的示例使用mc() 來設定R1和C1的標稱值和容差。例如,R1的標稱值為10 kΩ,容差為5%。 mc(x,y)函數將生成在x*(1-y)和x*(1+y)之間均勻分佈的偽亂數。請繼續閱讀,深入瞭解偽亂數和真亂數之間的區別,以及如何強制LTspice生成真亂數。 .STEP 指令用於指示LTspice運行模擬的反覆運算次數。在以下的示例中, .STEP 指令以1為增量將一個虛擬參數從1逐步增加到100,進而進行100次模擬運行,其中R1和C1的值都是隨機生成。
觀察 mc() 函數在每一步反覆運算中的行為:圖2顯示了一個僅使用電壓源的簡單示例。此示例使用 mc()將標稱電壓設定為10 V,並將容差設定為100%。因此,預計將得到一個在0 V和20 V之間均勻分佈的電壓。從波形檢視器和SPICE輸出日誌中的結果可以看到,在10次反覆運算中,電壓變化範圍是2.7 V至19.92 V,分佈並不完全均勻,但更多次反覆運算將有助於確保結果在統計上更加合理。
我們不妨更仔細地觀察,並反覆進行這個模擬。在這些模擬過程中,數值是否發生了變化?在我的電腦上,每次進行模擬時,每一步反覆運算都得到相同的電壓值。這稱得上「隨機」嗎?
您所看到的是程式碼和電腦在生成亂數時的典型表現。程式設計語言中的亂數產生器有一個與之關聯的可選seed()方法。想要獲得真亂數(即每次運行程式時得到不同的亂數),需要調用seed()方法,並為其指定動態變化的種子值。通常,程式設計人員會將當下的系統時間傳遞給seed()方法來實現這種隨機性。
這與我們的LTspice模擬有何關係?如果希望每次運行模擬時獲得不同的隨機值,則必須在設定面板的Hacks部分中啟用Use the clock to reseed the MC generator選項(參見圖3)。
此 Use the clock to reseed the MC generator 選項也適用於 flat() 和 gauss()函數。這些函數可以用在mc()所使用的地方。
不過,請慎重考慮否是需要刻意實現這種模擬行為。您希望模擬過程是真隨機的嗎?倘若如此,您的模擬將失去可預測性和可重複性。
為了說明這一點,讓我們回顧圖2中的示例。如果目標是類比一個在0 V和20 V之間均勻分佈的電壓呢?當下的示例不太符合預期。然而,透過將反覆運算次數從10次增加到100次,我們可以使模擬結果更接近目標(圖4)。這種調整使得模擬更接近實現預期的分佈範圍。
現在有兩點已經很明確:(a) mc()反覆運算運行100次,便能得到一個相當好的數值分佈;(b)如果不啟用 reseed the MC generator (重新設定MC產生器的隨機種子)功能,則每次運行模擬將得到可重複的結果。
如果電路中多處使用 mc()呢?能否保證透過100次反覆運算能夠覆蓋所有容差?圖5展現了此一嘗試,其中顯示了兩個使用mc()的電壓源。將V(out1)作為y軸、V(out2)作為x軸進行繪圖,可以清楚地看到,V1和V2的組合呈現出高度隨機的座標分佈(按右鍵x軸標題,將x軸從步進虛擬參數更改為V(out2))。但從技術上來看,這些電壓的最小值和最大值並非同時達到,因此導致極端(角落)情況的覆蓋有些不足。
如果目標是接近完全覆蓋,則需要更多次反覆運算(圖6)。
對於這個簡單的例子,模擬運行速度相當快,即便運行1000次也毫無問題。但如果模擬執行時間很長,運行多次反覆運算需要數小時或數天時間呢?應考慮啟用 Use the clock to reseed the MC generator選項是否有幫助。如果在一次模擬運行中, mc()產生 的值令人滿意,那麼接下來的目標是讓這些結果在每次運行時可重複,還是隨機變化呢?啟用此項功能之前,這是一個值得考慮的好問題。
為了大幅縮短模擬時間,我們來看一種相對不太隨機的方法。
圖7所示的例子確保了模擬能夠覆蓋被動元件容差的所有邊緣情況,同時保持整體模擬時間盡可能越短越好。這個例子遍歷了R1的三個值和C1的三個值,進行了九次模擬,並覆蓋了元件值同時達到最小值(或最大值)的情形。
結論
如果目標是探索電路在極端工作環境下的行為,則相對不太隨機的方法可能更為合適。相反的,如果目標是對模擬在一系列變化下的行為進行統計分析,則使用大量模擬並透過隨機函數引入隨機性可能是更好的方法。但無論哪種情況,您現在應該已經對如何在LTspice模擬中導入(或不導入)隨機性有了更進一步的理解。
欲瞭解更多資訊,請閱讀相關文章「如何使用LTspice對複雜電路的統計容差分析進行建模」。






