LTI vs LTV — 振盪器對 noise 的敏感度是週期時變的
先備:oscillator_phase · phase_vs_amplitude_noise | 接下來:從 impulse 到 phase shift 的推導
訊號與系統課教我們用脈衝響應 與卷積描述線性系統。但那套是 LTI(Linear Time-Invariant,線性非時變) 的故事。Hajimiri–Lee 在 [P1] 最關鍵的洞見是:
振盪器對 noise 的相位響應不是 LTI,而是 LTV(Linear Time-Variant,線性時變)。
這一頁說清楚 LTI 與 LTV 差在哪、為什麼振盪器一定是 LTV、以及為什麼這個差別正好就是 ISF(Impulse Sensitivity Function,脈衝敏感度函數) 的存在理由。
物理直覺(先講結論):LTI 系統「不看現在幾點」——同一個脈衝,今天打跟明天打, 反應形狀一模一樣,只是時間平移。振盪器不是這樣:因為它的狀態在 limit cycle 上不停 轉動,同一顆 noise 電流注在「波峰」跟注在「零交越」會得到完全不同的相位偏移。 系統對輸入的敏感度本身隨時間(隨注入相位)週期變化——這就是「週期時變敏感度」, 把它整理成一個 週期、無因次的函數,就是 ISF 。
1. 複習:LTI 的
線性非時變系統有兩個性質:線性(疊加成立)與時不變(輸入延遲 ,輸出也只是 延遲 、形狀不變)。時不變的後果是它的脈衝響應只依賴時間差 :
- 為何只看 :在 注入單位脈衝得到 ,在 注入得到 ——同一個形狀,只是平移。系統不在乎「絕對時刻 」,只在乎「過了多久」。
- 單位檢查:卷積核 的維度由輸出/輸入決定;這裡重點是「形狀不變」而非數值。
- 這就是大學學的那套:RLC 濾波器、放大器小訊號等效——只要工作點固定,都是 LTI。
2. 振盪器:脈衝響應變成 ,多了一個自變數
振盪器沒有固定工作點——它的狀態在 limit cycle 上不停移動(見 oscillator_phase)。所以「此刻系統對擾動多敏感」會隨 狀態(也就是隨注入相位 )改變。脈衝響應因此同時依賴兩個時間:
[P1] 寫出的 excess-phase 脈衝響應正是這個形式([P1] Eq.(10), p.182):
把它拆開看,剛好把 LTV 的兩個自變數分給兩個因子,意義清楚:
-
階高(step height):只依賴注入相位 。 這是「時變」的部分——同樣大小的脈衝,注入相位不同,跳的高度不同。
-
時間形狀 :一個 unit step(單位階梯),只依賴 。它編碼「相位偏移 一旦發生就永久保持」(相位沒有恢復力,見 phase_vs_amplitude_noise)。
-
單位檢查 / dimension: 無因次、 單位 C、 無因次,所以 的單位是 ;對電流(A)卷積後 得 無因次 = rad ✓。
-
為何是 而不是 :敏感度隨「波形相位」週期變化, 週期是 (每轉一圈 limit cycle 回到相同敏感度)。所以 的自變數是相位 ,且 是 週期函數——這就是「週期時變敏感度」。
3. 為什麼同一個 impulse 在不同位置得到不同 phase shift
把第 2 步的 step height 套到操作型 ISF 定義([P1] Eq.(11) 的脈衝極限):
固定 、掃注入相位 , 就照著 的形狀 起伏。對理想 LC,:
| 注入相位 | 波形位置 | 結果 | |
|---|---|---|---|
| 波峰(斜率 0) | ,純改振幅 | ||
| 下降零交越(斜率最負) | 最大 | ||
| 波谷(斜率 0) | ,純改振幅 | ||
| 上升零交越(斜率最正) | 最大、反向 |
- 物理原因(接 oscillator_phase 第 4 步):相位偏移大小取決於電壓跳變投影到 limit cycle 切線方向的分量。零交越時狀態速度(切線)正好沿著電壓軸,固定的 幾乎 全部變成切向位移 → 最大;波峰時切線垂直於電壓軸, 幾乎全是徑向 (純振幅)→ 。切向分量 ,故對正弦波 。
- 這就 是 LTV 的指紋:若振盪器是 LTI, 應該與 無關(只看 )—— 但實際上 週期起伏。敏感度本身隨時間變 = time-variant。
把 LTI 與 LTV 並排看最清楚:
| LTI | LTV(振盪器相位) | |
|---|---|---|
| 脈衝響應 | (只看時間差) | |
| 換注入時刻 | 形狀不變,只平移 | 階高隨 改變 |
| 敏感度 | 與絕對時刻無關 | 週期時變(= ISF) |
| 卷積 |
右下角那個 LTV 卷積就是 [P1] Eq.(11), p.182——下一章 convolution_derivation 會用它把任意 noise 電流 疊加成 。
4. 對照圖:LTI 形狀不變 vs LTV 階高隨相位變
下圖上半是一個 LTI 系統(簡單一階衰減)的脈衝響應:在 注入, 得到同一個形狀、只是平移。下半是振盪器的 LTV 相位響應 :在不同注入 相位 ,階梯高度 跟著改變(甚至變號)。

這張圖怎麼解讀:
- 上半(LTI):三條曲線疊起來形狀一模一樣,只是起點平移——「系統不看絕對時刻」。
- 下半(LTV):三條都是階梯(,永久保持),但階高不同: 時 (注在波峰,階高 0、無相位偏移); 時 (注在零交越,階高最大、負向); 時 (注在波谷,階高 0)。
- 訊息:LTV 的「形狀」固定(都是階梯,因相位無恢復力),但「強度」週期時變——這正是 ISF。
下面這張是把 step height 對注入相位連續掃出來的結果(lab_04 的相位掃描),等於把上表那一欄畫成連續曲線,數值與理論 幾乎重合:

這張圖怎麼解讀:橫軸是注入相位 (一個週期),縱軸是注入後持續保留的 (固定 )。藍點是數值模擬、黑虛線是 。 隨注入相位週期起伏就是 LTV 的 眼見為憑;它正比於 ISF,所以這張掃描圖本質上就是「量出來的 」。
用真實函式產生這兩張圖
兩張圖都由 simulations/lab_04_impulse_sweep.py 產生。LTV 對照圖用解析 ISF
設定階高;相位掃描圖用 extract_isf_by_injection()
在 limit-cycle 模型上真的注入小電荷、量持續相位偏移:
import numpy as np
from oscillator_models import extract_isf_by_injection
# (1) LTV 對照:階高 = ISF(注入相位),時間形狀都是 u(t - tau)
f0 = 1.0
for tau in [0.0, 0.25, 0.5]:
gamma = -np.sin(2 * np.pi * f0 * tau) # ISF at injection phase
# h_phi(t, tau) = gamma * u(t - tau) -> 階高隨 tau 改變,形狀(階梯)不變
# (2) 相位掃描:數值反推 ISF,對比解析 -sin(theta)
theta, g_num, g_ana = extract_isf_by_injection(
f0=1.0, fs=8000.0, n_inject_periods=6, settle_periods=4,
dq_over_qmax=1e-3, n_points=48, mu=0.3)
# g_num ≈ g_ana = -sin(theta),最大誤差約 0.001
完整 script:simulations/lab_04_impulse_sweep.py
(核心模型 simulations/common/oscillator_models.py 的 extract_isf_by_injection、simulate_lc)。
參數表:
| 參數 | 符號 | LTV 對照圖 | 相位掃描圖 | 單位 |
|---|---|---|---|---|
| 振盪頻率 | 1.0(normalized) | 1.0(normalized) | Hz | |
| 取樣率 | 2000 | 8000 | Hz | |
| 注入相位 | 週期 | 掃 48 點遍歷一週期 | — | |
| 相對注入電荷 | (示意階高) | (小訊號) | — | |
| 沉降週期數 | — | — | 4 | — |
| 振幅恢復強度 | —(解析階高) | 0.3 | — |
toy model 警告:兩張圖都是 pedagogical toy model,非 transistor-level。LTV 圖用 解析 設定階高;掃描圖用一個正規化 2-D limit-cycle 模型重現「敏感度週期時變」的機制, 數值是教學用的。對應 [P1] Eqs.(10),(11) 與 Sec. III、Fig. 4。
5. 為什麼非得用 LTV——LTI 模型錯在哪
歷史上早期把振盪器 noise 當 LTI(如把雜訊直接乘上 tank 的轉移函數)會漏掉兩件事,正是 LTV/ISF 才補得起來的:
- 頻率轉換(frequency translation):因為敏感度 本身是週期的 (含 的諧波),它會把 附近的 noise 混頻搬到 載波旁邊。LTI 不會混頻,因此無法解釋為何 device 在 DC 與在