system🚧

system

「系統」。多變量函數,輸入多道訊號,輸出多道訊號。

電子、機械相關科系基礎知識。數學、計算機科學則不會介紹。

應用非常廣泛,知識相當普及。本文不打算精雕細琢,只打算通盤概括。暫且先講重點,有空再談細節。

MATLAB專精矩陣運算,也專精訊號處理。以下所有演算法,MATLAB通通都有實作。一行指令解決問題,沒有選項無需權衡。大家沒有閒情逸致鑽研演算法細節。

線性非時變系統的演算法,已經被鑽研得相當透徹。即便學會這些演算法,你也難以大展拳腳。線性非時變系統的演算法,只是衍生變種。它們最初源自數值線性代數、計算代數數論。即便學會這些演算法,那也只是細枝末節。

實務上與理論上都已大功告成。這就是我為何不打算精雕細琢。

課程關係圖

 多變量微積分  微分方程  動態系統  訊號與系統   聲學
        ↘       ↘        ↘          ↘       ↘
力學 → 電磁學 → 電路學 → 化學動力學 → 自動控制 → 電聲學

system

「系統」。函數,輸入一串數列、輸出一串數列。

每個輸出變數分開來看,系統其實是由許多函數組成。

簡單的例子是每項加1的系統、每項延遲1時刻的系統。

當全部函數都相同,僅索引值(時刻)不同,可以簡化成一個函數。

system model

以訊號格式分類
1. SISO system / MIMO system
2. discrete-time system / continuous-time system

以電路格式分類
1. open-loop system
2. closed-loop system

以數學性質分類
1. causal system / noncausal system
2. time-invariant system / time-variant system
3. linear system / nonlinear system

以結構元件分類
1. system
2. system with internal state
3. system with conditional function
重要特例
linear time-invariant causal system (LTI system)

電子系統、機械系統幾乎都是這種特例。
教科書優先介紹這種特例。

system model — LTI system🚧

signal

SISO system / MIMO system

輸入輸出只有一串訊號
輸入輸出有許多串訊號

discrete-time system / continuous-time system

訊號是離散數列/連續函數。
sequence x[n] = (x[0], x[1], x[2], ...)
function x(t)

訊號數值則沒有明講。
訊號數值可以離散(整數,經過量化)、也可以連續(浮點數)。
後綴-time就是為了強調此事。但是很多人省略後綴-time。

只區分橫軸,不區分縱軸。
函數x(t),經常省略括號,寫成函數x。
數列x[n],亦可省略括號,寫成數列x。
為了避免混淆數列和數字,以下內容將採用此標記方式:
數列x:一連串數字x[0] x[1] ...。
數字x[n]:數列第n項。

loop

open-loop system / closed-loop system

開迴路系統:輸入訊號經過系統得到輸出訊號
閉迴路系統:輸出訊號也做為輸入訊號
input signal:  x = (x[0], x[1], ...)
output signal: y = (y[0], y[1], ...)
open-loop system:   f⃗(x) = y
closed-loop system: f⃗(x,y) = y
open-loop system:

       ┌─────┐ 
x ────→│  f  │────→ y
       └─────┘

closed-loop system:

       ┌─────┐
x ──┬─→│  f  │──┬─→ y
  +-↑  └─────┘  │
  ×÷└───────────┘
SISO system, denoted by functional:

  f⃗(x,y) = y

SISO system, denoted by set of functions:

  ⎧ f₀(x[0], x[1], x[2], ...,       y[1], y[2], ...) = y[0]
  ⎨ f₁(x[0], x[1], x[2], ..., y[0],       y[2], ...) = y[1]
  ⎩                       :                              :

  等號兩側的y不能有相同時刻。為了形成函數。

linear time-invariant causal system

causal system / time-invariant system / linear system

因果系統:輸入變數索引值小於等於輸出變數索引值。
非時變系統:輸入移位導致輸出移位。
線性系統:輸入相加導致輸出相加、輸入倍率導致輸出倍率。
(1) causal system

  ⎧ f₀(x[0])                               = y[0]
  ⎪ f₁(x[0], x[1], y[0])                   = y[1]
  ⎨      :                                     :
  ⎪ fₙ(x[0], ..., x[n], y[0], ..., y[n-1]) = y[n]
  ⎩      :                                     :

  y只能是過去時刻。為了形成函數。

(2) time-invariant system (shiftable system)

  f⃗(x ⇧ k, y ⇧ k) = y ⇧ k

  ⎧ f₀(x[0+k], x[1+k], ...) = y[0+k]
  ⎨ f₁(x[0+k], x[1+k], ...) = y[1+k]
  ⎩               :              :

  <=> fₙ₊ₖ(x[0], x[1], ...) = fₙ(x[k], x[k+1], ...)
      ∀n≥0 and ∀k≥0

(3-1) additive system

  f⃗(x₁ + x₂, y₁ + y₂) = y₁ + y₂

  ⎧ f₀(x₁[0] + x₂[0], x₁[1] + x₂[1], ...) = y₁[0] + y₂[0]
  ⎨ f₁(x₁[0] + x₂[0], x₁[1] + x₂[1], ...) = y₁[1] + y₂[1]
  ⎩                  :                            :

(3-2) homogeneous system of order 1

  f⃗(k x, k y) = k y

  ⎧ f₀(k x[0], k x[1], k x[2], ...) = k y[0]
  ⎨ f₁(k x[0], k x[1], k x[2], ...) = k y[1]
  ⎩              :                :

Now you can understand why people prefer functional.
An illustration is even better. However, I am lazy to do that.

linear time-invariant causal system (LTI system)

大家習慣省略causal。
在線性非時變系統當中,
因果系統:遞迴函數的輸入變數都是過去時刻與當前時刻。
非時變系統:遞迴函數不因時刻而變。
線性系統:遞迴函數是線性函數。
causal & time-invariant <=> recurrence

  y[n] = f(x[n], ..., x[n-p], y[n-1], ..., y[n-q])

  where f ≜ f₀ = f₁ = ...
        p ≥ 0
        q ≥ 1
        x[n] ≜ 0 , if n < 0
        y[n] ≜ 0 , if n < 0

therefore, LTI system can be denoted by recurrence.

(1) causal system
    p ≥ 0 and q ≥ 1
(2) time-invariant system
    f₀ = f₁ = ...
(3) linear system
    y₁[n] + y₂[n] = f(x₁[n] + x₂[n], ...)
    k y[n] = f(k x[n], ...)
              中譯 意譯
cause (noun)  原因 原因
cause (verb)  導致 因此而
cause (conj)  因為 because的精簡講法,原因是
causal        因果 原因的
系統視作函數,同時滿足四種性質:因果性、移位性、加性、倍性。
關於移位性,曾有訊號學家提出shiftable這個詞彙。然而並未風行。
我認為shiftable的優缺點如下。
缺點:shiftable意義不夠精準。
無法表示不變性。
優點:shiftable是肯定詞彙。
causal和linear是肯定詞彙。time-invariant卻是否定詞彙,
我認為一律使用肯定詞彙比較妥當。
X-invariant transformation有兩種定義。此處屬於第二種定義。
1. f(X(x,y)) = f(x,y)  輸入套用X,輸出仍然不變。
2. f(X(x,y)) = X(y)    輸入套用X,輸出也會套用X。

linear difference equation / linear differential equation

線性非時變系統,可以表示成線性遞迴函數。
線性遞迴函數,教科書習慣介紹這兩種:
線性差分方程式:離散時間系統、加權總和。用於電腦計算。
線性微分方程式:連續時間系統、微分加權總和。用來描述物理現象。

注意到,權重是常數。
也就是說,方程式的係數是常數,不隨時刻而變。

方程式的變數,源自輸入訊號/輸出訊號。
方程式的變數,都在同一條船上,只有時刻不同,因而形成遞迴函數。

moving average model / autoregressive model

線性非時變系統(線性差分方程式),有三種款式。
移動平均數模型:輸入訊號的加權總和=輸出訊號 (all zero) 
自迴歸模型:輸出訊號的加權總和=輸出訊號 (all pole)
兩種都用:輸入訊號的加權總和=輸出訊號的加權總和
MA model    f(x) = y
AR model    f(y) = y
ARMA model  f(x,y) = y

MA model    y[n] = f(x[n], x[n-1], ..., x[n-p])
AR model    y[n] = f(      y[n-1], ..., y[n-q])
ARMA model  y[n] = f(x[n], x[n-1], ..., x[n-p],
                           y[n-1], ..., y[n-q])

MA model    y[n] = a[0]x[n] + a[1]x[n-1] + ... + a[p]x[n-p]
AR model    y[n] =            b[1]y[n-1] + ... + b[p]y[n-p]
ARMA model  y[n] = a[0]x[n] + a[1]x[n-1] + ... + a[p]x[n-p]
                            + b[1]y[n-1] + ... + b[p]y[n-p]
(let b[0] = 0)
【確認一下y[n]要寫在等號哪邊。差一個負號不知道有何影響。】
【確認一下最終項y[n+1]還是y[n]比較好。】

system with internal state

state-space model / Kálmán filter

未知因:ARMA model
已知業:state-space model
已知果:output signal

未知輸入(因)已知函數(業)已知輸出(果),求因。
精髓:果的誤差,通過反濾波器,用以修正因。
I don't know the name:
⎰ x[k+1] = A x[k]
⎱ y[k]   = C x[k]

Kalman filter:
⎰ x[k+1] = A x[k] + B u[k]
⎱ y[k]   = C x[k]

state-space model:
⎰ x[k+1] = A x[k] + B u[k]
⎱ y[k]   = C x[k] + D u[k]

x: internal state
u: input signal
y: output signal

hidden Markov model / Bayes filter

未知因:Markov chain
未知業:hidden Markov model
已知果:output signal

請見本站文件「hidden Markov model」。
未知輸入(因)未知函數(業)已知輸出(果),求因。
精髓:已知果,梯度下降法(反向傳播法)找最大值,得到機率最大的業。
   未知果,動態規劃找最佳路線,得到機率最大的因。
hidden Markov model:
⎧ P(q[t] = j) = sum P(q[t] = j | q[t-1] = i) P(q[t-1] = i)
⎨                i
⎪ P(o[t] = k) = sum P(o[t] = k | q[t] = j) P(q[t] = j)
⎩                j

q: hidden state
o: output signal

system with conditional function

ReLU

branch (if statement)從二元邏輯推廣成連續函數
數學家從未討論條件函數、從未建立數學理論。
導致深度學習只有工程沒有科學,只有經驗沒有理論。
即便已經發現許多應用,卻無法進行論證。
有人形容為煉金術。大家都在碰運氣、都在唬爛。
光靠唬爛就可以得到圖靈獎和諾貝爾獎。你們城裡人真會玩。

年輕時候缺錢,老婆出錢幫忙車庫創業。
創業成功發大財,開始為所欲為,偷吃員工、逛蘿莉島。
搞到高階主管紛紛離職,CEO從高加索人變印度人,金流轉向皮衣客。
為了讓公司再次偉大,搞起置入性行銷。找人來當模特,頒獎給他們。
三立鄉土劇演到一半出現業配,就是這個概念。

fuzzy logic

把布林數的AND和OR運算,變成函數的min和max運算。
Karnik–Mendel algorithm

autogressive model

每一個數值,皆是先前緊鄰的K個數值的加權總和,權重是定值。反覆套用線性遞迴函數、代入數列最後N個數值,就能預測下一個即將出現的數值。此行為稱作「線性預測linear prediction」。

一串長長的數列,壓縮成一個線性遞迴函數,只需儲存K個函數係數、K個初始數值。反覆套用函數、代入數列最後K個數值,解壓縮得到一串長長的數列。此行為稱作「線性預測編碼linear predictive coding」。

I don't know the name

使用測量儀器h,時時收集數據y,時時推敲現況x。推定現況是自迴歸系統f,合乎自然規律。自創測量儀器是系統h,合乎電路原理。根據結果,推敲原因,此行為稱作「線性二次估計linear quadratic estimation」。

autoregressive model and moving average model

遞迴數列作為系統的輸入。
求解。求得原本遞迴數列。
resolution: ⎰ f(?) = ? ⇧ 1 , find x
            ⎱ h(?) = y

輸出誤差,通過反系統,得到輸入誤差,用以修正輸入。

為什麼要大費周章,將觀察值的誤差通過反系統,而不是直截了當,將觀察值通過反系統?我也不清楚。

h(x) = y
狀態 x₀ x₁ x₂ ...   未知(線性遞迴數列)
函數 h₀ h₁ h₂ ...   已知(數列每一項皆有一個函數)
觀察 y₀ y₁ y₂ ...   已知(數列每一項皆有一個輸出)

狀態是自迴歸模型    xₙ = f(xₙ₋₁, xₙ₋₂, ..., xₙ₋ₖ)
                    xₙ = a₁xₙ₋₁ + a₂xₙ₋₂ + ... + aₚxₙ₋ₖ

函數是平均值移動模型   yₙ = hₙ(xₙ, xₙ₋₁, xₙ₋₂, ..., xₙ₋ₚ)
                       yₙ = bₙ₀xₙ + bₙ₁xₙ₋₁ + ... + bₙₚxₙ₋ₚ

函數可以一樣        h₀ = h₁ = h₂ = ...

從 x₁ 開始一個一個算到 xᵢ,現在要算 xᵢ 是多少:

1. x̂ᵢ = f(xᵢ₋₁)              x 數列估計下一項。 (x₀ = 0)
                             此處以一階函數為例。

2. ŷᵢ = hᵢ(x̂ᵢ)               y 數列估計下一項。
                            盜版 ŷᵢ 通常不等於正版 yᵢ。
                             這表示 x̂ᵢ 不夠準,需要修正。

3. kᵢ⁻¹                      求得誤差的反系統 kᵢ⁻¹。稱作Kalman gain。
                             kᵢ(x̂ᵢ - xᵢ) = (ŷᵢ - yᵢ)

 (1) pᵢ = (x̂ᵢ - xᵢ)²         為了計算反系統,需要 xᵢ 的誤差的平方。
        = cov(x̂ᵢ - xᵢ)       即是誤差的covariance。
     sᵢ = (ŷᵢ - yᵢ)²         不過由於我們還沒求出 xᵢ,所以不能這樣算。
        = cov(ŷᵢ - yᵢ)

 (2) p̂ᵢ = f²(pᵢ₋₁)           p 數列估計下一項。 (p₀ = 0)
        = f pᵢ₋₁ fᵀ          原理是 Var[k⋅X] = k² ⋅ Var[X]。

 (3) ŝᵢ = hᵢ²(p̂ᵢ)            s 數列估計下一項。
        = hᵢ p̂ᵢ hᵢᵀ          如果 f h 各有誤差項:常態分布 q r,平均數0。
                             那麼 p̂ᵢ ŝᵢ 各加上 var(q) var(r)。

 (4) kᵢ⁻¹ = p̂ᵢ hᵢᵀ ŝᵢ⁻¹      反系統是變異數的比值。這是什麼鬼啦?

4. xᵢ = x̂ᵢ - kᵢ⁻¹(ŷᵢ - yᵢ)   修正 x。
                             yᵢ 的誤差,通過反系統,還原成 xᵢ 的誤差。
                             x̂ᵢ 補上誤差,答案就對了。

5. pᵢ = p̂ᵢ - kᵢ⁻²(ŝᵢ)        修正 p。
      = p̂ᵢ - kᵢ⁻¹ ŝᵢ kᵢ⁻¹ᵀ

system analysis🚧

system analysis

「系統分析」。工程師觀察現實世界現象,視作系統。藉由輸入訊號、輸出訊號,判斷系統類型、系統參數。方法有反卷積/轉移函數/脈衝響應/頻率響應。觀念有系統實現/系統識別。

system analysis — system coefficients🚧

system coefficients

已知輸入訊號、輸出訊號,求得系統。
如果已知係數數量,那麼係數數值有唯一解。
因為對象是LTI system,所以形成linear equation。
高斯消去法可以求解。

現實世界的訊號數值,無法完美精確的測量出來,總是有偏差。
大家習慣改用least squares method,找到平方誤差最小的解。
因為對象是LTI system,所以形成linear least squares。
normal equation可以求解。
訊號學家自創一個詞彙impulse response。
我認為這個詞彙不太妥當。因為這個詞彙有兩種意義。
原義:輸入訊號是脈衝函數,所得到的輸出訊號。
引申義:系統的數學公式的係數。(只適用LTI system。)
本章所談的是引申義。
後面章節會區分原義和引申義,而且會有兩者同時登場的情況。

我認為應該另造一個詞彙。
方便起見,下文稱作系統係數system coefficients。
此詞彙借鑒了通訊學詞彙:通道係數channel coefficients。
意義是對等的。

moving average model

representation

polynomial representation
多項式表示法:系統視作權重

y[n] = a[0]x[n] + a[1]x[n-1] + a[2]x[n-2] + ... + a[k]x[n-k]

matrix representation no.1
矩陣表示法:系統視作矩陣

⎡ a[0]   0    0  ...   0    0    0  ⎤ ⎡ x[0] ⎤   ⎡ y[0] ⎤
⎢ a[1] a[0]   0  ...   0    0    0  ⎥ ⎢ x[1] ⎥   ⎢ y[1] ⎥
⎢ a[2] a[1] a[0] ...   0    0    0  ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢   :    :    :        :    :    :  ⎥ ⎢   :  ⎥ = ⎢   :  ⎥
⎢   0    0    0  ... a[0]   0    0  ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢   0    0    0  ... a[1] a[0]   0  ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎣   0    0    0  ... a[2] a[1] a[0] ⎦ ⎣ x[n] ⎦   ⎣ y[n] ⎦
                  A                       x          y

polynomial representation
多項式表示法:輸入訊號視作權重

y[n] = x[n]a[0] + x[n-1]a[1] + x[n-2]a[2] + ... + x[n-k]a[k]

matrix representation no.2
矩陣形式:輸入訊號視作矩陣

⎡ x[0]     0    ...   0      ⎤            ⎡ y[0] ⎤
⎢ x[1]   x[0]   ...   0      ⎥ ⎡ a[0] ⎤   ⎢ y[1] ⎥
⎢   :      :          :      ⎥ ⎢ a[1] ⎥   ⎢   :  ⎥
⎢   :      :          :      ⎥ ⎢   :  ⎥ = ⎢   :  ⎥
⎢   :      :          :      ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢ x[n-1] x[n-2] ... x[n-k-1] ⎥ ⎣ a[k] ⎦   ⎢   :  ⎥
⎣ x[n]   x[n-1] ... x[n-k]   ⎦            ⎣ y[n] ⎦
            x                      a          y

operation

operation                   │ expression
─────────────────────────────────────────────────
evaluation (moving average) │ f(x) = ?   find y
resolution (inverse filter) │ f(?) = y   find x
regression (Wiener filter)  │ ?(x) = y   find f
inversion                   │ ?(y) = x   find f⁻¹
求值(順向通過系統)
求解(反向通過系統)
迴歸(求系統)
反函數(求反系統)
四種運算都有時域和頻域兩種解法。
頻域解法的時間複雜度較低,但是沒人用!
一、系統係數通常很少。傅立葉轉換反而浪費時間。
二、系統無法完美轉換到頻域。

evaluation (moving average)

求值(順向通過系統):滑動視窗,取加權平均數。時間複雜度O(NK)。

resolution

求解(反向通過系統):滑動視窗,解加權平均數方程式。時間複雜度O(NK)。

regression (Wiener filter)

迴歸(求系統):兩種演算法。
一、輸入訊號視作矩陣。找到平方誤差最小的解。
  公式解是normal equation。時間複雜度O(N³)。

⎡ x[0]     0    ...   0        0      ⎤            ⎡ y[0] ⎤
⎢ x[1]   x[0]   ...   0        0      ⎥ ⎡ a[0] ⎤   ⎢ y[1] ⎥
⎢   :      :          :        :      ⎥ ⎢ a[1] ⎥   ⎢   :  ⎥
⎢   :      :          :        :      ⎥ ⎢   :  ⎥ = ⎢   :  ⎥
⎢   :      :          :        :      ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢ x[n-1] x[n-2] ... x[n-k]   x[n-k-1] ⎥ ⎣ a[k] ⎦   ⎢   :  ⎥
⎣ x[n]   x[n-1] ... x[n-k+1] x[n-k]   ⎦            ⎣ y[n] ⎦
                 X                          a          y

normal equation:
Xᵀ X a = Xᵀ y
a = (Xᵀ X)⁻¹ Xᵀ y
二、旁門左道的解法是Wiener–Hopf equation。
  矩陣拉高變得漂亮。輸出訊號超出尾端的K個未定義數值NaN通通改成0。
  答案不對,但是算得快。
  一、建立矩陣:卷積。O(NK)甚至O(NlogN)。
  二、矩陣求解:循環矩陣求解。O(K²)甚至O(KlogK)。

⎡ x[0]                      ⎤            ⎡ y[0] ⎤
⎢   :  x[0]                 ⎥            ⎢   :  ⎥
⎢   :    :                  ⎥ ⎡ a[0] ⎤   ⎢   :  ⎥
⎢   :    :        x[0]      ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢   :    :  .....   :  x[0] ⎥ ⎢   :  ⎥ = ⎢   :  ⎥
⎢ x[n]   :          :    :  ⎥ ⎢   :  ⎥   ⎢ y[n] ⎥
⎢      x[n]         :    :  ⎥ ⎣ a[k] ⎦   ⎢  NaN ⎥
⎢                   :    :  ⎥            ⎢   :  ⎥
⎢                 x[n]   :  ⎥            ⎢   :  ⎥
⎣                      x[n] ⎦            ⎣  NaN ⎦
              X                   a          y

⎡ xx[0]   xx[1]   ... xx[k]   ⎤ ⎡ a[0] ⎤   ⎡ xy[0] ⎤
⎢ xx[1]   xx[0]   ... xx[k-1] ⎥ ⎢ a[1] ⎥   ⎢ xy[1] ⎥
⎢    :       :           :    ⎥ ⎢   :  ⎥ = ⎢    :  ⎥
⎢ xx[k-1] xx[k-2] ... xx[1]   ⎥ ⎢   :  ⎥   ⎢    :  ⎥
⎣ xx[k]   xx[k-1] ... xx[0]   ⎦ ⎣ a[k] ⎦   ⎣ xy[k] ⎦
             Xᵀ X                   a         Xᵀ y

xx(t) = ∑ x(i-t)⋅x(i)   autocorrelation of x(i-t) and x(i).
xy(t) = ∑ x(i-t)⋅y(i)   cross-correlation of x(i-t) and y(i).

對應項平方誤差總和最小,即是滿足 Xᵀ X a = Xᵀ y。
Xᵀ X 和 Xᵀ y 乘起來,稱作Wiener–Hopf equation。
xx(t):數列x延遲t時刻、數列x,兩者的自相關數(相差t時刻,兩串相同數列的點積)。
xy(t):數列x延遲t時刻、數列y,兩者的互相關數(相差t時刻,兩串不同數列的點積)。

inversion

反函數(求反系統)
我查不到相關資料!
我猜是隨便找一組輸出輸入,對調一下,然後迴歸。

autoregressive model

representation

自迴歸模型。輸入與輸出是同一數列,但是輸出延遲1時刻。
其餘同前。

operation

operation                   │ expression
─────────────────────────────────────────────────────
evaluation (iteration)      │ f(?) = (? ⇧ 1)   find y
regression (autoregression) │ ?(y) = (y ⇧ 1)   find f
求值(求遞迴數列)
迴歸(求遞迴函數)

evaluation (iteration)

求值(求遞迴數列):三種演算法。
線性遞迴函數K項,求數列第N項。
一、動態規劃,第0項算到第N項。O(NK)。
二、同伴矩陣的N次方。O(K³logN)。假設矩陣相乘O(K³)。
三、xᴺ模特徵多項式。O(K²logN)甚至O(KlogKlogN)。
當K是常數,一變成O(N),二三變成O(logN)。

regression (autoregression)

迴歸(求遞迴函數):兩種演算法。
一、Berlekamp–Massey algorithm。時間複雜度O(NK)。
二、旁門左道的解法是Yule–Walker equation。
  矩陣拉高變得漂亮。輸出訊號超出尾端的K-1個未定義數值NaN通通改成0。
  答案不對,但是算得快。
 一、建立矩陣:卷積。O(NK)甚至O(NlogN)。
 二、矩陣求解:循環矩陣求解。O(K²)甚至O(KlogK)。
y[n] = b[1]y[n-1] + b[2]y[n-2] + ... + b[k]y[n-k]

⎡ y[0]                            ⎤            ⎡ y[1] ⎤
⎢   :    y[0]                     ⎥            ⎢   :  ⎥
⎢   :      :                      ⎥ ⎡ b[1] ⎤   ⎢   :  ⎥
⎢   :      :        y[0]          ⎥ ⎢   :  ⎥   ⎢   :  ⎥
⎢   :      :    ...   :    y[0]   ⎥ ⎢   :  ⎥ = ⎢   :  ⎥
⎢ y[n-1]   :          :      :    ⎥ ⎢   :  ⎥   ⎢ y[n] ⎥
⎢        y[n-1]       :      :    ⎥ ⎣ b[k] ⎦   ⎢  NaN ⎥
⎢                     :      :    ⎥            ⎢   :  ⎥
⎢                   y[n-1]   :    ⎥            ⎢   :  ⎥
⎣                          y[n-1] ⎦            ⎣  NaN ⎦
                 Y                     b           y

⎡ yy[0]   yy[1]   ... yy[k-1] ⎤ ⎡ b[0]   ⎤   ⎡ yy[1]   ⎤
⎢ yy[1]   yy[0]   ... yy[k-2] ⎥ ⎢ b[1]   ⎥   ⎢ yy[2]   ⎥
⎢    :       :           :    ⎥ ⎢   :    ⎥ = ⎢    :    ⎥
⎢ yy[k-2] yy[k-1] ... yy[1]   ⎥ ⎢ b[k-1] ⎥   ⎢ yy[k-1] ⎥
⎣ yy[k-1] yy[k-2] ... yy[0]   ⎦ ⎣ b[k]   ⎦   ⎣ yy[k]   ⎦
              Yᵀ Y                  b           Yᵀ y

system analysis — transfer function🚧

transfer function

system coefficients從時域轉換到頻域,藉由傅立葉轉換。

簡單起見,考慮MA model。
針對訊號:時域signal=頻域spectrum。
針對系統:時域system coefficients=頻域transfer function。
順向通過系統:時域sequence convolution=頻域polynomial multiplication。
反向通過系統:時域sequence deconvolution=頻域polynomial division。

已知輸入訊號的頻譜、輸出訊號的頻譜,求得系統的頻譜。
如果已知係數數量,那麼係數數值的頻譜有唯一解。
多項式除法可以求解。

訊號數值的頻譜有偏差,那麼改用least squares method。
最佳化演算法可以求解。
訊號學家自創一個詞彙transfer function。

transfer function = 𝓩(y) / 𝓩(x)

白話文:

                   spectrum(input signal)
spectrum(system) = ———————————————————————
                   spectrum(output signal)

進階的系統模型,
系統係數的構造更複雜,無法直接從時域轉換到頻域。
只好參考MA model,只好間接採用「輸出訊號頻譜除以輸入訊號頻譜」。

物理意義:
輸入訊號、輸出訊號,拆解成各種頻率的複弦波疊加,
其振幅放大倍率、相位偏移角度。

spectrum

Fourier transform / time domain / frequency domain

因為真實世界的訊號幾乎都是一堆波,
所以大家用傅立葉轉換,把訊號分解成波。
原本訊號稱作時域(座標軸是時間),傅立葉轉換之後稱作頻域(座標軸是頻率)。

spectrum / Bode plot / amplitude spectrum / phase spectrum

訊號實施傅立葉轉換(時域轉頻域)。
一串數列的傅立葉轉換是一串數列,每個數值都是複數。
複數長度是振幅。頻譜每個數值的振幅,形成振幅頻譜。
複數角度是相位。頻譜每個數值的相位,形成相位頻譜。
兩者合稱頻譜。
振幅頻譜橫軸與縱軸都取log,相位頻譜橫軸取log,兩者合稱波特圖。

frequency response / transfer function / gain / phase shift

訊號實施傅立葉轉換(時域轉頻域)。
一串數列的傅立葉轉換是一串數列,
每個數值代表每種頻率(frequency)的波(wave)的振幅(amplitude)和相位(phase)。

值得一提的是,除了訊號可以分解成波,其實系統也可以分解成波。
系統弄成加權總和的形式,然後把權重當作訊號,拿去分解。
(因為z-transform和convolution theorem)

兩種方式可以得到系統的頻譜:
一、系統的頻譜(權重做傅立葉轉換)。
二、輸出訊號頻譜除以輸入訊號頻譜(訊號做傅立葉轉換,再相除)。

頻率響應:系統的頻譜的數值,針對特定頻率。
轉移函數:系統的頻譜的數學式,變數是頻率。
增益:系統的振幅頻譜。各種頻率的波的振幅變化倍率。
相位偏移:系統的相位頻譜。各種頻率的波的相位變化差距。

generating function

z-transform / Laplace transform / z-domain / s-domain

實務上,
差分方程(離散訊號)/微分方程(連續訊號)
實施離散傅立葉轉換/連續傅立葉轉換,
改寫成複弦波,形成frequency domain。

理論上,
差分方程(離散訊號)/微分方程(連續訊號)
實施z-transform / Laplace transform,
改寫成生成函數,形成z-domain / s-domain。

上述「理論上」觀點其實是錯的。很不幸地,教科書習慣介紹這種觀點。
很多人將拉普拉斯轉換解讀成z轉換的連續版本,但是這種解讀不太對。
拉普拉斯轉換其實也有離散版本、應當先講離散版本。
嚴格來說,z轉換是普通生成函數,拉普拉斯轉換是指數生成函數。性質截然不同。

錯誤的解讀方式:
一、z轉換和拉普拉斯轉換兩者對比,宛如離散和連續兩者對比。

正確的解讀方式:
一、z轉換(普通生成函數)。無法推廣為連續版本。
二、z轉換的重要變種是拉普拉斯轉換(指數生成函數)。可以推廣成連續版本。
三、z轉換與拉普拉斯轉換的重要特例是傅立葉轉換。可以推廣為連續版本。
四、推廣為連續版本,前提是積分結果受限(不會是正負無限大)。
五、離散z轉換可以改寫成連續拉普拉斯轉換,稱作bilinear transform。
https://math.stackexchange.com/questions/105800/

bilinear transform

mapping from z-domain to s-domain
https://www.youtube.com/watch?v=acQecd6dmxw
https://www.google.com/search?q=mapping+from+s-domain+z-domain+transfer+function&udm=2
喪心病狂。

Fourier transform / Laplace transform

傅立葉轉換:振幅為1、頻率為自然數/各種數值。
拉普拉斯轉換:振幅為各種數值、頻率為各種數值。

離散傅立葉轉換:z轉換當中,多項式代入特定數值。
        分別代入N種不同數值,z = exp(𝑖(2π/N)f),f從0到N-1。

離散時間傅立葉轉換:z轉換當中,多項式代入特定數值。
          分別代入∞種不同數值,z = exp(𝑖2πω),ω從-∞到+∞。
exp的指數從自然數f推廣成實數ω。
完整名稱應該是離散時間連續頻率傅立葉轉換。重點在於連續頻率。

連續傅立葉轉換:訊號從離散數列推廣成連續函數。
        分別代入∞種不同數值,z = exp(𝑖2πω),ω從-∞到+∞。

拉普拉斯轉換:訊號從離散數列推廣成連續函數。
       分別代入∞×∞種不同數值,z = exp(s),s是各種複數a+b𝑖。
exp的指數從實數ω推廣成複數s。

傅立葉轉換是特例,拉普拉斯轉換是通例,導致教科書很喜歡用拉普拉斯轉換。
然而拉普拉斯轉換在現實世界當中沒有對應的物理現象。
而且拉普拉斯轉換的時間複雜度和空間複雜度遠遠大於傅立葉轉換。
因此實務上只會使用傅立葉轉換。完全不用拉普拉斯轉換。

拉普拉斯轉換用來在網路論壇裝逼。用來假裝自己講話有份量。

transfer function: linear difference equation

implicit form / explicit form

system (implicit form): L(x(t), y(t)) = 0
system (explicit form): y(t) = F(x(t))

LTI system (implicit form): L(x(t), x′(t), x″(t), ...,
                              y(t), y′(t), y″(t), ... ) = 0
LTI system (explicit form): y(t) = x(t) ∗ f(t)
recurrence representation (implicit form)
遞迴函數表示法:系統視作權重

y[n] = a[0]x[n] + a[1]x[n-1] + a[2]x[n-2] + ... + a[k]x[n-k]

convolution representation (explicit form)
卷積表示法:系統視作移動視窗
輸入訊號超出頭端,必須視作0。
輸出訊號超出尾端,必須視作未定義。

(x[0], ..., x[n]) ∙ (a[0],   0 ,   0 , ...       ) = y[0]
(x[0], ..., x[n]) ∙ (a[1], a[0],   0 , ...       ) = y[1]
(x[0], ..., x[n]) ∙ (a[2], a[1], a[0], ...       ) = y[2]
        :                          :                  :
(x[0], ..., x[n]) ∙ (      ... , a[2], a[1], a[0]) = y[n]
(x[0], ..., x[n]) ∙ (      ... , a[3], a[2], a[1]) = NaN
        :                          :                  :
(x[0], ..., x[n]) ∙ (      ... ,   0 ,   0 , a[k]) = NaN

         x        ∗                a               = y

shift operator / generating function / characteristic equation

                   ordinary
┌───────────────┐  generating  ┌──────────────────┐
│ time domain   │  function    │ frequency domain │
│ implicit form │←────────────→│ implicit form    │
└───────────────┘              └──────────────────┘
       ↑                                ↑
       │ shift and dot                  │ divide zᵏ
       │                                │ at both sides
       ↓           ordinary             ↓
┌───────────────┐  generating  ┌──────────────────┐
│ time domain   │  function    │ frequency domain │
│ explicit form │←────────────→│ explicit form    │
└───────────────┘              └──────────────────┘
原理請見本站文件「transformation」。
線性代數的相似變換、傅立葉轉換的乘法卷積對偶,都是此原理。
遞迴函數/轉移函數
線性遞迴函數與根/轉移函數與特徵值
Ŷ(z) z⁻ᵏ = G(z) Y(z) z⁻⁽ᵏ⁻¹⁾ + H(z) E(z)
z-transform, denoted by sequence:

  𝓩{x} = X(z)
         ^^^^
         polynomial function of z
         its name is uppercase X

z-transform, denoted by set of numbers:

  𝓩{(x[0], x[1], x[2], ...)} = x[0]z⁰ + x[1]z⁻¹ + x[2]z⁻² + ...
shiftable function: 𝓩{x ⇧ k} = zᵏ X(z)
linear function:    𝓩{x₁ + x₂} = X₁(z) + X₂(z)
                    𝓩{k x} = k X(z)

convolution–multiplication duality (convolution theorem)

convolution theorem:

  𝓩{a∗x} = 𝓩{a} 𝓩{x}

convolution:

  (a∗x)[n] = a[0]x[n] + a[1]x[n-1] + a[2]x[n-2] + ...

number -> sequence:

  a∗x = a[0] x + a[1] (x ⇧ -1) + a[2] (x ⇧ -2) + ...

z-transform:

  𝓩{a∗x}
= 𝓩{a[0] x + a[1] (x ⇧ -1) + a[2] (x ⇧ -2) + ...}
= a[0] 𝓩{x} + a[1] 𝓩{x ⇧ -1} + a[2] 𝓩{x ⇧ -2} + ...
= a[0] 𝓩{x} + a[1] z⁻¹ 𝓩{x} + a[2] z⁻² 𝓩{x} + ...
= (a[0] + a[1] z⁻¹ + a[2] z⁻² + ...) 𝓩{x}
= 𝓩{a} 𝓩{x}
只有數列可以做z-transform。
然而教科書的數學符號表示法,不區分數字和數列。

另外必須假設:
訊號超過頭端(負索引值),必須視做0。
訊號往左移位可以超過頭端(負索引值)。

transfer function / zero / pole

z-transform:訊號=>多項式
convolution theorem:訊號加權總和=>多項式乘法
transfer function:輸出多項式作為分子,輸入多項式作為分母。
zero:分子多項式的根(多項式變成0)。
pole:分母多項式的根(多項式變成±∞)。
大家用示波器看zero pole,然後反向推理系統是什麼。
ARMA model:

    a₀ x[n] + a₁ x[n-1] + a₂ x[n-2] + ...
  = b₀ y[n] + b₁ y[n-1] + b₂ y[n-2] + ...

z-transform:

  𝓩{a} 𝓩{x} = 𝓩{b} 𝓩{y}

transfer function:

  𝓩{a}   𝓩{y}
  ———— = ———— = transfer function
  𝓩{b}   𝓩{x}

zero / pole:

  roots(𝓩{y}) = zeros
  roots(𝓩{x}) = poles

explicit formula

┌──────────────────┐              ┌──────────────────┐
│ time domain      │ power series │ frequency domain │
│ implicit form    │━━━━━━━━━━━━━🢂│ implicit form    │
└──────────────────┘              └──────────────────┘
         │                                ┃
         │ find                           ┃ 1 & 2
         │ formula                        ┃
         ↓                                🢃
┌──────────────────┐              ┌──────────────────┐
│ time domain      │   power sum  │ frequency domain │
│ explicit formula │🡸━━━━━━━━━━━━━│ explicit formula │
└──────────────────┘              └──────────────────┘

1. polynomial factorization
2. partial fraction expansion
linear difference equation (with zero initial value):

  a₀ x[n] + a₁ x[n-1] + a₂ x[n-2] + ...
= b₀ y[n] + b₁ y[n-1] + b₂ y[n-2] + ...

  where x[0] = 0

z-transform (time domain -> z-domain):

  a₀ z⁰ X(z) + a₁ z⁻¹ X(z) + a₂ z⁻² X(z) + ...
= b₀ z⁰ Y(z) + b₁ z⁻¹ Y(z) + b₂ z⁻² Y(z) + ...

  (a₀ z⁰ + a₁ z⁻¹ + a₂ z⁻² + ...) X(z)
= (b₀ z⁰ + b₁ z⁻¹ + b₂ z⁻² + ...) Y(z)

transfer function:

       Y(z)   a₀ z⁰ + a₁ z⁻¹ + a₂ z⁻² + ...
F(z) = ———— = —————————————————————————————
       X(z)   b₀ z⁰ + b₁ z⁻¹ + b₂ z⁻² + ...

polynomial factorization:

       Y(z)   (z-z₀)(z-z₁)(z-z₂)...
F(z) = ———— = —————————————————————
       X(z)   (z-p₀)(z-p₁)(z-p₂)...

partial fraction expansion (when all poles are distinct):

        C₀     C₁     C₂
F(z) = ———— + ———— + ———— + ...
       z-p₀   z-p₁   z-p₂

where C₀ = ... , C₁ = ... , C₂ = ...

inverse z-transform (z-domain -> time domain):

f[n] = C₀ p₀ⁿ + C₁ p₁ⁿ + C₂ p₂ⁿ + ...
線性差分方程式求解(隱式改成顯式,並且找到公式),
計算過程其實就是對偶變換和對偶運算,繞一圈回來。
一、最初是線性差分方程式。
二、改寫成transfer function(時域轉頻域)。形成多項式分式。
三、改寫成因式分解。分母的根pole、分子的根zero。
四、改寫成部分分式。形成分式連加。
五、改寫成符號解(頻域轉時域)。形成power sum。
https://eng.libretexts.org/Bookshelves/Electrical_Engineering/Signal_Processing_and_Modeling/Signals_and_Systems_(Baraniuk_et_al.)/04%3A_Time_Domain_Analysis_of_Discrete_Time_Systems/4.08%3A_Solving_Linear_Constant_Coefficient_Difference_Equations

BIBO stability

滿足穩定性,才能形成穩態,才能控制。
不滿足穩定性,輸出可能正負無限大。
導致電路過載燒掉、動力機械暴衝、反應槽爆炸。
BIBO stability (and steady state is zero):

   if |x[n]| < ∞ then |y[n]| < ∞          for all n≥0
=> if |x[n]| < ∞ then |Cᵢ pᵢⁿ| < ∞        for all n≥0 and i≥0
=> |pᵢⁿ| < ∞                              for all n≥0 and i≥0
=> |pᵢ| < 1                               for all i≥0
stability criterion:
輸入受限則輸出受限:可以改寫成訊號L¹-norm受限。
線性差分方程式的情況下:所有pole都在複平面單位圓內或上。
訊號學家還希望收斂至零:所有pole都在複平面單位圓內。

stability test:
(1) 直覺的方法是使用多項式函數求根演算法,求得所有pole。
    經典演算法是companion matrix求特徵值,時間複雜度O(N³T)。
(2) 特殊的方法是使用特殊數學公式,檢查正負號。
    經典演算法是Jury's test,時間複雜度O(N²)。

transfer function: linear differential equation

explicit formula

┌──────────────────┐   Laplace   ┌──────────────────┐
│ time domain      │  transform  │ frequency domain │
│ implicit form    │━━━━━━━━━━━🢂│ implicit form    │
└──────────────────┘             └──────────────────┘
         │                                ┃
         │ find                           ┃ 1 & 2
         │ formula                        ┃
         ↓             inverse            🢃
┌──────────────────┐   Laplace   ┌──────────────────┐
│ time domain      │  transform  │ frequency domain │
│ explicit formula │🡸━━━━━━━━━━━│ explicit formula │
└──────────────────┘             └──────────────────┘

1. polynomial factorization
2. partial fraction expansion
linear differential equation (with zero initial condition):

  a₀ x(t) + a₁ x′(t) + a₂ x″(t) + ...
= b₀ y(t) + b₁ y′(t) + b₂ y″(t) + ...

  where x(0) = x′(0) = x″(0) = ... = 0

Laplace transform (time domain -> s-domain):

  a₀ s⁰ X(s) + a₁ s¹ X(s) + a₂ s² X(s) + ...
= b₀ s⁰ Y(s) + b₁ s¹ Y(s) + b₂ s² Y(s) + ...

  (a₀ s⁰ + a₁ s¹ + a₂ s² + ...) X(s)
= (b₀ s⁰ + b₁ s¹ + b₂ s² + ...) Y(s)

transfer function:

       Y(s)   a₀ s⁰ + a₁ s¹ + a₂ s² + ...
F(s) = ———— = ———————————————————————————
       X(s)   b₀ s⁰ + b₁ s¹ + b₂ s² + ...

polynomial factorization:

       Y(s)   (s-z₀)(s-z₁)(s-z₂)...
F(s) = ———— = —————————————————————
       X(s)   (s-p₀)(s-p₁)(s-p₂)...

partial fraction expansion (when all poles are distinct):

        C₀     C₁     C₂
F(s) = ———— + ———— + ———— + ...
       s-p₀   s-p₁   s-p₂

where C₀ = ... , C₁ = ... , C₂ = ...

inverse Laplace transform (s-domain -> time domain):

          C₀          C₁          C₂
f(t) = ————————— + ————————— + ————————— + ...
       exp(-p₀t)   exp(-p₁t)   exp(-p₂t)

     = C₀ exp(p₀t) + C₁ exp(p₁t) + C₂ exp(p₂t) + ...
https://tutorial.math.lamar.edu/classes/de/IVPWithLaplace.aspx
https://lpsa.swarthmore.edu/LaplaceXform/InvLaplace/InvLaplaceXformPFE.html

BIBO stability

BIBO stability (and steady state is zero):

   if |x(t)| < ∞ then |y(t)| < ∞          for all t≥0
=> if |x(t)| < ∞ then |Cᵢ exp(pᵢt)| < ∞   for all t≥0 and i≥0
=> |exp(pᵢt)| < ∞                         for all t≥0 and i≥0
=> Re[pᵢt] < 0                            for all t≥0 and i≥0
=> Re[pᵢ] < 0                             for all i≥0
stability criterion:
輸入受限則輸出受限:可以改寫成訊號L¹-norm受限。
線性微分方程式的情況下:所有pole都在左半複平面。
訊號學家還希望收斂至零:所有pole都在左半複平面,但不含虛軸。

stability test:
(1) 直覺的方法是使用多項式函數求根演算法,求得所有pole。
    經典演算法是companion matrix求特徵值,時間複雜度O(N³T)。
(2) 特殊的方法是使用特殊數學公式,檢查正負號。
    經典演算法是Routh–Hurwitz test,又稱Routh array,時間複雜度O(N²)。

diagram

block diagram

for transfer function of causal LTI system,

1. series connection

──→ G₁ ──→ G₂ ──→  =  ──→ G₁G₂ ──→

2. parallel connection

──┬─→ G₁ ──┬──→  =  ──→ G₁+G₂ ──→
  └─→ G₂ ──┘+

3. feedback connection

u  e          y
──┬─→ G₁ ──┬──→  =  ──→ G₁/(1+G₁G₂) ──→
 -└── G₂ ←─┘

y = G₁e = G₁(u-G₂y) = G₁u - G₁G₂y
u = (y + G₁G₂y)/G₁ = y(1 + G₁G₂)/G₁
y/u = G₁/(1+G₁G₂)
4.
──→ G₁ ─┬─→ G ──→  =  ──→ G₁ ──→ G ─┬─→
──→ G₂ ─┘             ──→ G₂ ──→ G ─┘

5.
──→ G ──┬─→ G₁ ──→  =  ─┬─→ G ──→ G₁ ──→
        └─→ G₂ ──→      └─→ G ──→ G₂ ──→

6.
──┬─→ G₁ ──┬──→  =  ──→ 1/G₂ ──┬─→ G₂ ──→ G₁ ──┬──→ 
 -└── G₂ ←─┘                  -└───────←───────┘
主角是頻域transfer function。
主角其實也可以改成時域system coefficients。
串聯series:函數複合。
並聯parallel:函數相加。
回饋feedback:遞迴函數。

LTI system串聯/並聯/回饋,仍是LTI system。
非常棒的數學性質。
藉由時域system coefficients,證明變得容易。
藉由頻域transfer function,公式變得漂亮。

signal-flow graph

Mason's rule
https://en.wikipedia.org/wiki/Mason's_gain_formula

invariant

convolution identity: impulse response

以輸出訊號分類
1. finite impulse response system (FIR system)
2. infinite impulse response system (IIR system)
脈衝響應分成兩種。
1. finite impulse response
   有限脈衝響應。輸入脈衝函數,輸出很快歸零。時長有限。好人不長壽。
2. infinite impulse response
   無限脈衝響應。輸入脈衝函數,輸出永不歸零。時長無限。禍害遺千年。
系統有兩種款式。
1. FIR system = open-loop system = MA model = all zero system
   開迴路。系統的數學式不含輸出訊號。
   開迴路=>輸入的加權總和=>輸入只取幾項=>有限
2. IIR system = closed-loop system = ARMA model = pole—zero system
   閉迴路。系統的數學式包含輸出訊號。
   閉迴路=>輸入與輸出的加權總和=>強行展開=>輸入取所有項=>無限

frequency invariance: frequency response

frequency invariance of LTI system:
針對LTI system,輸入弦波,輸出也是弦波。
而且頻率不變,僅振幅和相位改變。
【待補證明】

response

dynamic response

已知輸入、系統,求得輸出。
輸入:已知函數(教科書習慣討論下述三種)
系統:已知函數(教科書習慣討論一次微分方程、二次微分方程)
輸出:未知函數。

1. impulse response:脈衝波。
2. frequency response:複弦波。
frequency response理論上是輸入複數exp波,實務上是輸入實數cos波。
必須自行推導cos波經過傅立葉轉換之後的振幅和相位。

steady state

已知輸入、系統,求得輸出最終數值。
輸入:教科書習慣討論步進函數(step response)
系統:教科書習慣討論一次微分方程、二次微分方程
輸出:求得穩態

step response

1. impulse response:脈衝波。隔壁棚結構分析很常用,控制系統則不使用。
2. frequency response:複弦波。得到波特圖其中一個數值。
3. step response:單位步進函數。主角。例如啟動馬達至定速。

步進函數:傅立葉轉換是1/s。
最終值定理:時域穩態(時間趨近無限大)=頻域乘上s後頻率趨近無限大。
系統改寫成transfer function形成分式。觀察分母:
一、實根(一次多項式):輸出指數衰減。
  步進函數恰好跟最終值定理互相抵銷,剩下系統。
二、共軛複根(二次多項式):輸出振盪。兩種表達方式。
 甲、decay rate σ and damped frequency ωd
 乙、damping ratio ζ and natural frequency ωn

其他情況:
一、連乘積:實係數多項式因式分解,總是得到一次暨二次多項式連乘積。
  因此只需討論實根、共軛複根兩種情況。
  最後讓transfer function相乘。
二、重根:一次暨二次多項式的次方。

ARMA model

一個比較簡單的例子是MA model。
system (MA model):   f(x) = y
LTI system:          x ∗ f = y
spectrum:            𝓩(x) 𝓩(f) = 𝓩(y)
transfer function:   𝓩(y) / 𝓩(x) = 𝓩(f)

FIR system / IIR system

FIR system property:
(1) convergence: converge to zero at infinite
(2) stability: all poles at origin
IIR system property:
(1) stability: initial condition matters
(2) two amplification factor

ARMA model

http://feldman.faculty.pstat.ucsb.edu/174-03/lectures/l7.pdf
AR(1) model:

u ───┬─────────────┬────→ y
    +↑         ┌───────┐
     │         │ delay │   amplifier should be a triangle
     │  ┌────┐ └───────┘
     └──│ ×a │←────┘
        └────┘

y[k] = a y[k-1] + u[k]

transfer function:

      ┌──────────┐
      │    1     │
u ───→│ ———————— │───→ y
      │ 1 - az⁻¹ │
      └──────────┘

          1
Y(z) = ———————— U(z)
       1 - az⁻¹
ARMA(1,1) model:

u ─────┬─────────────┬──┬─────────────┬────→ y
   ┌───────┐        +↑ +↑         ┌───────┐
   │ delay │         │  │         │ delay │
   └───────┘ ┌────┐  │  │  ┌────┐ └───────┘
       └────→│ ×b │──┘  └──│ ×a │←────┘
             └────┘        └────┘
            MA                  AR

y[k] = a y[k-1] + u[k] + b u[k-1]

impulse response:

y[0] = u[0]       = 1
y[1] = a y[0] + b = a + b
y[2] = a y[1]     = a^2 + a^1 b
y[3] = a y[2]     = a^3 + a^2 b
y[k] = aᵏ⁻¹ (a + b)

transfer function:

      ┌──────────┐
      │ 1 + bz⁻¹ │
u ───→│ ———————— │───→ y
      │ 1 - az⁻¹ │
      └──────────┘

G(z) = 1 + sum { aᵏ⁻¹ (a + b) z⁻ᵏ }
          k=1⋯∞

           (a + b)z⁻¹
     = 1 + ——————————
            1 - az⁻¹

       1 + bz⁻¹
     = ————————
       1 - az⁻¹
ARMA(p,q) model:

u ───────┬─────────────┬──┬─────────────┬──────→ y
     ┌───────┐        +↑ +↑         ┌───────┐
   ⎧ │ delay │         │  │         │ delay │ ⎫
   ⎪ └───────┘ ┌────┐  │  │  ┌────┐ └───────┘ ⎪
   ⎪     ├────→│ ×b │──┤  ├──│ ×a │←────┤     ⎪
   ⎪ ┌───────┐ └────┘ +↑ +↑  └────┘ ┌───────┐ ⎪
   ⎪ │ delay │         │  │         │ delay │ ⎪
   ⎪ └───────┘ ┌────┐  │  │  ┌────┐ └───────┘ ⎪
 q ⎨     ├────→│ ×b │──┤  ├──│ ×a │←────┤     ⎬ p
   ⎪     :     └────┘  :  :  └────┘     :     ⎪
   ⎪     :             :  :             :     ⎪
   ⎪     :             :  :             :     ⎪
   ⎪ ┌───────┐        +↑ +↑         ┌───────┐ ⎪
   ⎪ │ delay │         │  │         │ delay │ ⎪
   ⎪ └───────┘ ┌────┐  │  │  ┌────┐ └───────┘ ⎪
   ⎪     └────→│ ×b │──┘  ├──│ ×a │←────┤     ⎪
   ⎩           └────┘    +↑  └────┘ ┌───────┐ ⎪
                          │         │ delay │ ⎪
                          │  ┌────┐ └───────┘ ⎪
                          └──│ ×a │←────┘     ⎪
                             └────┘           ⎭
              MA                  AR

y[k] =        a[1] y[k-1] + a[2] y[k-2] + ... + a[p] y[k-p]
     + u[k] + b[1] u[k-1] + b[2] u[k-2] + ... + b[p] u[k-q]

system analysis — system realization🚧

system realization

system representation / system realization

訊號學家自創一個同義詞彙realization。
硬要區分的話嘛:
representation是表示法本身。
realization是表示法轉換過程。
使用impulse response。
輸入是脈衝函數,輸出稱作脈衝響應。
LTI系統當中,脈衝響應恰是系統係數。
最後,系統係數進一步改寫成矩陣運算。

LTI system

state-space representation

線性函數(狹義版本)、線性遞迴函數,可以改寫成矩陣。

線性非時變系統可以改寫成矩陣,有兩種方式:
一、MIMO系統、線性非時變系統、一階。
  改寫成矩陣,外觀仍是MIMO系統、一階。
  將一個時刻的每種訊號併成向量。此向量是狀態。
  經典應用是數值模擬的數值方案。
二、SISO系統、線性非時變系統、n階。
  改寫成矩陣,外觀變成MIMO系統、一階。
  將連續n個訊號數值併成向量。此向量是滑動視窗。
  經典應用是遞迴數列的快速冪演算法。
此處使用二。
然而訊號學家卻將二稱作狀態空間表示法。成為歷史共業。

時域頻域隱式顯式,四種格式形成四邊形。
四種格式皆可以改寫成矩陣,也會形成四邊形。
然而訊號學家將兩個四邊形畫成其他東西。成為歷史共業。

companion matrix realization

3rd-order linear differential equation:

   d³            d²            d
   ——— f(x) + c₂ ——— f(x) + c₁ —— f(x) + c₀ f(x) = 0
   dx³           dx²           dx

=> f‴(x) + c₂ f″(x) + c₁ f′(x) + c₀ f(x) = 0

=> f‴(x) = - c₂ f″(x) - c₁ f′(x) - c₀ f(x)

   ⎧ (f )′ = f′
=> ⎨ (f′)′ = f″                       the trick is here
   ⎩ (f″)′ = -c₂f″ - c₁f′ - c₀f

   ⎧ f₀′ = f₁
=> ⎨ f₁′ = f₂                         rename variables
   ⎩ f₂′ = -c₂f₂ - c₁f₁ - c₀f₀

   ⎡ f₀′ ⎤   ⎡  0   1   0  ⎤ ⎡ f₀ ⎤
=> ⎢ f₁′ ⎥ = ⎢  0   0   1  ⎥ ⎢ f₁ ⎥   matrix representation
   ⎣ f₂′ ⎦   ⎣ -c₀ -c₁ -c₂ ⎦ ⎣ f₂ ⎦

=>   f⃗′    =        A          f⃗      rename variables

5th-order linear differential equation:

⎡ f₀′ ⎤   ⎡  0   1   0   0   0  ⎤ ⎡ f₀ ⎤
⎢ f₁′ ⎥   ⎢  0   0   1   0   0  ⎥ ⎢ f₁ ⎥
⎢ f₂′ ⎥ = ⎢  0   0   0   1   0  ⎥ ⎢ f₂ ⎥
⎢ f₃′ ⎥   ⎢  0   0   0   0   1  ⎥ ⎢ f₃ ⎥
⎣ f₄′ ⎦   ⎣ -c₀ -c₁ -c₂ -c₃ -c₄ ⎦ ⎣ f₄ ⎦
3rd-order linear difference equation:

   f[x+3] + c₂ f[x+2] + c₁ f[x+1] + c₀ f[x] = 0

=> f[x] + c₂ f[x-1] + c₁ f[x-2] + c₀ f[x-3] = 0   rename variables

=> f[x] = - c₂ f[x-1] - c₁ f[x-2] - c₀ f[x-3]

   ⎧ (f )′ = f′
=> ⎨ (f′)′ = f″                       the trick is here
   ⎩ (f″)′ = -c₂f″ - c₁f′ - c₀f

   ⎧ f₀′ = f₁
=> ⎨ f₁′ = f₂                         rename variables
   ⎩ f₂′ = -c₂f₂ - c₁f₁ - c₀f₀

   ⎡ f₀′ ⎤   ⎡  0   1   0  ⎤ ⎡ f₀ ⎤
=> ⎢ f₁′ ⎥ = ⎢  0   0   1  ⎥ ⎢ f₁ ⎥   matrix representation
   ⎣ f₂′ ⎦   ⎣ -c₀ -c₁ -c₂ ⎦ ⎣ f₂ ⎦

=>   f⃗′    =        A          f⃗      rename variables

for analog signal, use linear differential equation:
x′ = A x

for discrete signal, use linear difference equation:
x[n+1] = A x[n]

LTI system 🚧

下表針對AR model。
至於ARMA model,再右乘一個矩陣B。
╭────────────────────────────┬────────────────────────────╮
│ polynomial representation  │ matrix representation      │
├────────────────────────────┤────────────────────────────┤
│ sequence                   │ companion matrix           │
│ g = (g[0], g[1], g[2], ⋯)  │     ⎡    0     1     0  ⋯ ⎤│
│                            │     ⎢    0     0     1  ⋯ ⎥│
│                            │ A = ⎢    0     0     0  ⋯ ⎥│
│                            │     ⎢    :     :     :    ⎥│
│                            │     ⎣ -g[0] -g[1] -g[2] ⋯ ⎦│
╞════════════════════════════╧════════════════════════════╡
│ time domain: implicit form                              │
│ linear difference equation                              │
╞════════════════════════════╤════════════════════════════╡
│ recurrence                 │ recurrence                 │
│ y[k] = g[1] y[k-1]         │ y⃗[k] = A y⃗[k-1]            │
│      + g[2] y[k-2]         │                            |
│      + ...                 │                            │
├────────────────────────────┤────────────────────────────┤
│ expansion                  │ expansion                  │
│ y[k] = .......             │ y⃗[k] = Aᵏ y⃗[0]             │
╞════════════════════════════╧════════════════════════════╡
│ time domain: explicit form                              │
│ impulse response representation                         │
╞════════════════════════════╤════════════════════════════╡
│ convolution                │ Toeplitz matrix            │
│ y = g * y                  │ bili bili blah blah        │
├────────────────────────────┤────────────────────────────┤
│ solution                   │ solution                   │
│ g(t) = C₀ exp(λ₀t)         │ g(t) = C₀ exp(At)          │
│      + C₁ exp(λ₁t)         │                            │
│      + ...                 │                            │
╞════════════════════════════╧════════════════════════════╡
│ frequency domain: implicit form                         │
│ characteristic equation                                 │
╞════════════════════════════╤════════════════════════════╡
│ characteristic polynomial  │ characteristic polynomial  │
│ G(z) = 0                   │ det(λI-A) = 0              │
|                            |                            |
│ λᵏ = g[1] λᵏ⁻¹             │                            │
│    + g[2] λᵏ⁻²             │                            │
│    + ...                   │                            │
├────────────────────────────┤────────────────────────────┤
│ roots (poles)              │ eigenvalues (poles)        │
│ λ₁, λ₂, ...                │ λ₁, λ₂, ...                │
╞════════════════════════════╧════════════════════════════╡
│ frequency domain: explicit form                         │
│ transfer function representation                        │
╞════════════════════════════╤════════════════════════════╡
│ generating function        │ resolvent                  │
│ G(z) = g[0] z              │ (zI-A)⁻¹                   │
│      + g[1] z⁻¹            │                            │
│      + ...                 │                            │
╰────────────────────────────┴────────────────────────────╯

system with internal state

專著《Filtering and System Identification: A Least Squares Approach》

observability / controllability

H = OC = Hankel(g)   constant-skew diagonal matrix

state-space representation

唵嘛呢叭咪吽

Ho–Kálmán realization

conjugate decomposition of Hankel(g)
Hankel(g)做共軛分解
https://math.stackexchange.com/questions/3275985/
https://par.nsf.gov/servlets/purl/10312038

system with internal state 🚧

╭────────────────────────────┬────────────────────────────╮
│ polynomial representation  │ matrix representation      │
├────────────────────────────┤────────────────────────────┤
│ sequence                   │ companion matrix           │
│ a,b,c,d                    │ A,B,C,D                    │
│ a = (a[0], a[1], ...)      │                            │
│ b = (b[0], b[1], ...)      │                            │
│ c = (c[0], c[1], ...)      │                            │
│ d = (d[0], d[1], ...)      │                            │
╞════════════════════════════╧════════════════════════════╡
│ time domain: implicit form                              │
│ linear difference equation                              │
╞════════════════════════════╤════════════════════════════╡
│ recurrence                 │ recurrence                 │
│ ⎧ x[k+1] = a[0] x[k] + ⋯   │ ⎰ x⃗[k+1] = A x⃗[k] + B u⃗[j] │
│ ⎨        + b[0] u[k] + ⋯   │ ⎱ y⃗[k]   = C x⃗[k] + D u⃗[k] │
│ ⎪ y[k]   = c[0] x[k] + ⋯   │                            │
│ ⎩        + d[0] u[k] + ⋯   │                            │
├────────────────────────────┤────────────────────────────┤
│ expansion                  │ expansion                  │
│ y[k] = .......             │ y[1⋯n] = O x[0] + Φ u[0⋯n] │
│                            │                            │
├────────────────────────────┤────────────────────────────┤
│ impulse response           │ similarity transformation  │
│ y[k] = ⎰ d[0] , if k = 0   │ y[k] = ⎰ D      , if k = 0 │
│        ⎱ ......            │        ⎱ CAᵏ⁻¹B , otherwise│
╞════════════════════════════╧════════════════════════════╡
│ time domain: explicit form                              │
│ impulse response representation                         │
╞════════════════════════════╤════════════════════════════╡
│ convolution ???            │ Hankel matrix ???          │
│ y = g * u                  │ H = OC                     │
│                            │                            │
├────────────────────────────┤────────────────────────────┤
│ solution                   │ solution                   │
│ g(t) = C₀ exp(p₀t)         │ g(t) = C exp(At) B + D δ(t)│
│      + C₁ exp(p₁t)         │                            │
│      + ...                 │                            │
╞════════════════════════════╧════════════════════════════╡
│ frequency domain: implicit form                         │
│ characteristic equation                                 │
╞════════════════════════════╤════════════════════════════╡
│ characteristic polynomial  │ characteristic polynomial  │
│ G(z) = 0                   │ det(λI-A) = 0              │
│ λᵏ = g[1] λᵏ⁻¹             │                            │
│    + g[2] λᵏ⁻²             │                            │
│    + ...                   │                            │
├────────────────────────────┤────────────────────────────┤
│ roots (poles)              │ eigenvalues (poles)        │
│ λ₁, λ₂, ...                │ λ₁, λ₂, ...                │
╞════════════════════════════╧════════════════════════════╡
│ frequency domain: explicit form                         │
│ transfer function representation                        │
╞════════════════════════════╤════════════════════════════╡
│ generating function        │ resolvent                  │
│ G(z) = g[0] z              │ C(zI-A)⁻¹B + D             │
│      + g[1] z⁻¹            │                            │
│      + ...                 │                            │
╰────────────────────────────┴────────────────────────────╯

system analysis — system identification🚧

system identification

system identification / system estimation

訊號學家自創一個同義詞彙identification。
硬要區分的話嘛:
identification是找到系統類型。
estimation是找到系統參數。
已知輸入訊號、輸出訊號,找到系統。
換句話說,就是迴歸!

mean squared error / Kullback–Leibler divergence

兩道訊號的距離。
換句話說,就是誤差!迴歸的時候拿來用吧。

input signal

輸入特殊訊號,直接量頻譜。
(1) chirp: 餘弦波頻率漸增,依序得到輸出訊號頻譜每個bin。
(2) white noise: 訊號頻譜是常數函數,方便計算系統的gain。
(3) pseudorandom binary sequence:針對數位訊號。功能類似white noise。

sampling / filtering

數位訊號有spectral leakage。
解法:輸出平滑化/輸入窗函數。

數位訊號要考慮sampling rate。

【what is the sampling rate?】
【how to do fast DTFT?】

LTI system

estimation

系統沒有誤差項,事情非常單純。
時域:輸出與輸入的反卷積
頻域:輸出頻譜除以輸入頻譜

系統擁有誤差項,才有討論意義。
衍生許多演算法。
(1) impulse response:
    u[0] = 1
    u[1] = u[2] = ... = 0
    g[k] = y[k]

(2) frequency response:
    u[k] = cos(ωk)
    |G(ω)| = max {y[k]} / max {u[k]}      magnitude
    ∠G(ω) = argmax Ruy[k]                 phase
          = argmax { xcorr(u[k], y[k]) }

(3) deconvolution:
    y = g * u
    Xᵀ X g = Xᵀ y
    g = (Xᵀ X)⁻¹ Xᵀ y

(4) pointwise division:
    G = Y / U

polarization

2D plot
[u[k]]ᵀ[ |G|         * ] [u[k]] = |G|² sin²(∠G)
[y[k]] [ -|G|cos(∠G) 1 ] [y[k]]

這明明就是光學課本裡面的東西。

在系統識別談論polarization,
怎麼說呢,就好比在西餐廳吃雞排飯,就是有種文青的感覺。
it's just like this kind of flavor.

FIR system with error (MAX model)

Gaussian noise / white noise

Gaussian: all samples of signal form Gaussian distribution
          (time domain)
white: all bins of power spectrum form uniform distribution
       (frequency domain)
Gaussian:每一個訊號都是浮動數值,呈高斯分布。
white:能量/功率頻譜是常數函數。

system identification

time domain method:
(1) correlation: least squares estimation
    input signal has time-invariant autocorrelation.
    e.g. weakly stationary process
(2) correlation spectrum: H₁ estimate and H₂ estimate
    input signal has time-invariant autocorrelation.
    e.g. weakly stationary process

frequency domain method:
(3) frequency response: ???
    input signal is sinusoid.
    e.g. cosine wave
(4) transfer function: empirical transfer function estimate
    input signal is purpose-built.
    e.g. white noise

correlation

correlation

兩道訊號,取兩個時間點相乘(SISO)/點積(MIMO)
autocorrelation function:   Rxx[t1,t2] = E[x[t1] x[t2]]
cross-correlation function: Rxy[t1,t2] = E[x[t1] y[t2]]

time-invariant correlation

當time-invariant,可以簡化成位移量t = t2 - t1。位置k = t2。
autocorrelation function:   Rxx[t] = E[x[k] x[k-t]]
cross-correlation function: Rxy[t] = E[x[k] y[k-t]]
where k is arbitrary

property:
Rxy[t] ≠ Ryx[t]    cross-correlation is not commute
Rxy[t] = Ryx[-t]   useless. negative input is not defined.

dynamic response

impulse response
針對FIR系統,輸入訊號採用脈衝函數,輸出訊號很快歸零。
輸出訊號歸零之後,形成time-invariant correlation,即可使用此方法。
不覺得這很奇怪嗎?零有什麼好算。

step response
針對FIR系統,輸入訊號採用步進函數,輸出訊號很快變成常數,稱作DC gain。
輸出訊號收斂之後,形成time-invariant correlation,即可使用此方法。
不覺得這很奇怪嗎?常數有什麼好算。

輸入訊號到底該用什麼函數才對呢?
白雜訊嗎?

ergodic process

(1) ensemble average
    calculate expected value E[] with multiple experiments
(2) time average
    calculate expected value E[] with 1 experiments
    by sliding window
ergodic process: ensemble average = time average
多次實驗的平均值,改成滑動視窗的平均值,節省計算時間。
so far, so good.

              sliding window
               t1     t2
                |-->   |-->
experiment 1: ~~~~~~~~~~~~~~~   |
experiment 2: ~~~~~~~~~~~~~~~   | ensemble average
     :                          V
              -------------->
               time average

Rx[t]  = 1/N  sum  { x[k] x[k-t] }
            k=0⋯N-1
Rxy[t] = 1/N  sum  { x[k] y[k-t] }   (not commute)
            k=0⋯N-1

least squares estimation

FIR system with zero-mean white noise

               │ e (zero-mean white noise)
      ┌─────┐  ↓
u ───→│  g  │─────→ y
      └─────┘

y[t] =  sum  g[k] u[t-k] + e[t]
       k=0⋯∞

assume e and u are independent

independent => uncorrelated E[e[t] u[k-t]] = 0

用correlation消除雜訊影響

Ryu[t] = E[y[k] u[k-t]]
       = E[(......) u[k-1]]
       = sum g[k] u[t-k] + E[e[t] u[k-t]]
                           ^^^^^^^^^^^^^^
                           = 0 since uncorrelated

解一次方程組得到系統 given Ryu and Ru, solve g

assume g[t] = 0 when t > N

Ryu[t] =  sum g[k] Ru[t-k]   (N+1 points)
         k=0⋯N

[ Ryu[0] ]   [ Ru[0]  ... Ru[N] ] [ g[0] ]
[   :    ] = [  :          :    ] [  :   ]
[ Ryu[N] ]   [ Ru[-N] ... Ru[0] ] [ g[N] ]
   Ryu                Ru             g
               Toeplitz matrix

g = Ru⁻¹ Ryu
I prefer Cyu.
However, Ryu is better than Cyu for memorizing, I guess.

correlation spectrum

correlation spectrum

autocorrelation spectrum    Φx[ω]  =  sum  { Rx[t] exp(-𝑖ωt) }
cross-correlation spectrum  Φxy[ω] =  sum  { Rxy[t] exp(-𝑖ωt) }
                                    t=-∞⋯+∞
正式名稱如下。名稱太長了,很少人使用。
autocorrelation spectral density function
cross-correlation spectral density function

統計學與訊號學當中,
spectral density function是指定義域是頻域的函數(統計而得)。
大家習慣簡稱spectral density,省略後綴function。
其中spectral是指定義域是頻域。
其中density function是指機率密度函數(積分等於一、已經正規化)。
但是大家不一定有做正規化。

spectrum也是定義域是頻域的函數。
因此大家常常將spectral density改稱為spectrum。
畢竟大家不一定有做正規化。無傷大雅。

甚至有人省略主角correlation。喪心病狂。縮短後名稱如下:
auto spectral density / cross-spectral density
autospectrum / cross-spectrum
cross-correlation spectrum
是指dtft(xcorr(x,y))

spectral cross-correlation
是指xcorr(dtft(x),dtft(y))

bilinear的情況下,兩者應該相等吧?【尚待確認】
dtft(xcorr(x,y)) = xcorr(dtft(x),dtft(y))

power spectrum

energy spectrum = squared amplitude spectrum
power spectrum = squared amplitude spectrum / N
energy/power差別在於沒做正規化/有做正規化。
Wiener–Khinchin theorem:
autocorrelation spectrum = power spectrum

periodogram:
使用autocorrelation spectrum,作為power spectrum的估計值。

time-invariant autocorrelation:
此定理的前提是兩個時間點t1 t2可以簡化成一個時間差。
完全沒有必要使用weakly stationary process。
但是教科書喜歡使用weakly stationary process。成為歷史共業。

integrability and boundness:
此定理的前提是傅立葉轉換必須存在。
傅立葉轉換是積分變換,必須滿足可積性。
可積性細分許多條件,其中包含受限性。
受限性:輸出受限(不會是正負無限大)。
積分變換的情況下:輸入受限,而且在無限遠處趨近零。輸出亦然。
即是autocorrelation approaches zero at infinite lag。
autocorrelation spectrum亦然。

stable system:
穩定的FIR system的impulse response會變成零。
穩定的IIR system的impulse response會趨近零。
進而滿足autocorrelation approaches zero at infinite lag。

H₁ estimate and H₂ estimate

此方法只能得到振幅頻譜,不能得到相位頻譜。
               │ e (zero-mean white noise)
      ┌─────┐  ↓
u ───→│  g  │─────→ y
      └─────┘

Re[t] = σ² δ[t]                          since e is white
Φe[ω] = sum { σ² δ[t] exp(-𝑖ωt) } = σ²   since e is white

Ry[t] = g[t] ∗ Ruy[t] + σ² δ[t]
Φy[ω] = G(ω) Φuy[ω] + Φe[ω]      where Φe[ω] = σ²
    │ d          │ e (zero-mean white noise)
    ↓   ┌─────┐  ↓
u ─────→│  g  │─────→ y
        └─────┘

H₁ estimate: Ĝ₁ = Φyu / Φu = (G Φu) / Φu + Φd
H₂ estimate: Ĝ₂ = Φy / Φuy = (G Φuy + Φe) / Φuy
inequality: |Ĝ₁| ≤ |G| ≤ |Ĝ₂|
https://dsp.stackexchange.com/questions/71811/

bias–variance tradeoff

(1) time smoothing       相鄰N窗做N次,結果取平均。
(2) frequency filtering  窗函數

窗越窄窗越多,bias越大variance越小

frequency response

frequency response

cosine wave:
理論上是輸入複數exp波,實務上是輸入實數cos波。
必須自行推導cos波經過傅立葉轉換之後的振幅和相位。
手法是取real part。

impulse representation:
y[k] = sum g[i] u[k-i] = G(z) u[k]
                         ^^^^ ^^^^
                   polynomial scalar
  that is not related to k???

cosine wave:
let u[k] = Re( exp(𝑖ωk) ) = cos(ωk)

y[k] = sum g[i] Re( exp(𝑖ω(k-i)) )
     = G(ω) Re( exp(𝑖ωk) )
     = |G(ω)| cos(ωk + ∠G(ω))   詭異的不行
輸入餘弦波,頻率ω、振幅α、相位0。
調整輸入振幅α,避免輸出訊號太弱太強而測量不到。

   α cos(ωk) ┌─────┐
u ──────────→│  g  │──→ y
             └─────┘

u[k] = α cos(ωk)
y[k] = α |G(ω)| cos(ωk + ∠G(ω)) + e[k] + transient
看到transient忽然冒出來,就知道推導過程一定有問題。

donno the name of this estimate

如果沒有誤差,那麼很容易計算系統頻譜。
為了應付誤差,輸出做amplitude modulation。分別用餘弦波和正弦波。

                             cos(ωk)
                                ╷
                      e        ×↓ ┌───────────────┐
                      ╷       ┌──→│N-point average│──→ Ic(ω)
   α cos(ωk) ┌─────┐ +↓       │   └───────────────┘
u ──────────→│  g  │────→ y ──┤
             └─────┘          │   ┌───────────────┐
                              └──→│N-point average│──→ Is(ω)
                               ×↑ └───────────────┘
                                ╵
                             sin(ωk)

u[k] = α cos(ωk)

y[k] = α |G(ω)| cos(ωk + ∠G(ω)) + e[k] + transient

Ic(ω) = sum { y[k] cos(ωk) } = +½ α |G(ω)| cos(ωk)
       k=1⋯N
Is(ω) = sum { y[k] sin(ωk) } = -½ α |G(ω)| sin(ωk)
       k=1⋯N
積化和差公式
cos(a) cos(b) = ½ cos(a-b) + ½ cos(a+b)

推導過程
Ic(ω) = sum { y[k] cos(ωk) }
      = sum { (......) cos(ωk) }
      = ½ α |G(ω)| cos(ωk)                         ①
      + ½ α |G(ω)| (1/N) sum { cos(2ωk + ∠G(ω)) }  ②
      + (1/N) sum { e[k] cos(ωk) }                 ③

②→0 as n→∞. since cos() has zero mean.
③→0 as n→∞. since e and u are independent by assumption.
hence only ① remains.
estimate
Â(ω) = sqrt(Ic²(ω) + Is²(ω)) / (α/2)   amplitude
φ̂(ω) = -tan⁻¹(Is(ω) / Ic(ω))           phase

transfer function

empirical transfer function estimate

系統頻譜=輸出頻譜/輸入頻譜
Ĝ = Y/U

頻譜相除=振幅相除&相位相減
複數相除=長度相除&角度相減
|Ĝ| = |Y| / |U|   amplitude
∠Ĝ = ∠Y - ∠U      phase

ETFE,重劍無鋒大巧不工
故意造個長一點的句子,聽起來更有中二感

bias–variance tradeoff???

(1) bias (X) / absolute error (O)
    |E[Ĝ-G]| < C₁ / (sqrt(N)|U|)       where C₁ is constant
                     ^^^^^^^
                     N變大可以減少估計誤差(平均數)

(2) variance (X) / squared error (O)
    E[|Ĝ-G|²] < (Φ / U) + (C₂ / N)     where C₂ is constant
                ^^^^^^^
                N再大也減少不了估計誤差(變異數)
                解法是correlation

spectral coherence???

(3) G(ω₁) and G(ω₂) are asyptocially uncorrelated.
    即便ω取樣間距變小,函數曲線也不會變得比較連續平滑。
    解法是frquency filtering
     G
     |      ______
  G₁ | __---      ---____
     |    __------__  
  G₂ | ---           -----  
     ------+-----+------> ω
           ω₁    ω₂

AR model with error (ARX model)

專著《Modeling, Identification and Simulation of Dynamical Systems》

ARX(1) model:

            e
            ╷
           +↓
u ───┬──────┴──────┬─────→ y
    +↑         ┌───────┐
     │         │ delay │
     │  ┌────┐ └───────┘
     └──│ ×a │←────┘
        └────┘

y[k] = a y[k-1] + u[k] + e[k]

impulse response (with zero-mean white noise):

      ┌──────────┐  │ e ~ WN(0,σ²)
      │    1     │  ↓
u ───→│ ———————— │─────→ y
      │ 1 - az⁻¹ │
      └──────────┘

          1
y[k] = ———————— u[k]
       1 - az⁻¹

y[k] = a y[k-1] + u[k]

autocorrelation (with zero-mean white noise):

Ry[t] = σ² pow(a,|t|)     (0 < a < 1)

          σ² (1 - a²)          σ² (1 - a²)
Φy[ω] = ———————————————— = ——————————————————
        |1 - a exp(-𝑖ω)|²   1 + a² - 2a cos(ω)

(Φy is white iff a = 0)

Ry[t]                       Φy[ω]                  
  |                           |        __            
1 |        /\                 |       /  \          
  |       /  \                |     _-    -_      
  | ____--    --_____         | __--        --___  
  |--------|----------> t     |--------|----------> ω
           0                           0

(the peak is slightly higher than 1)

example:

respiration (low  frequency) (slow)
ECG         (high frequency) (fast)

Rx[t] 
  |         __
1 |     __--/\--__    
  | __--   /  \   --__slow  
  | _____--    --_____fast
0 |---------|----------> t
            0

IIR system with error (ARMAX model)

system identification

選個系統,跑個迴歸/最佳化。
分析一下bias和variance。
1. system model
 (1) type of model
 (2) order of model
2. least squares estimation
 (1) linear regression (output error model / ARX model)
 (2) optimization

system model

AutoRegressive Moving Average model with eXogenous inputs
自迴歸移動平均模型ARMA附帶外生輸入X
(此處的外生輸入是指white noise)

system model (frequency domain)

output error model  Y = (B/A)U + E
ARX model           Y = (B/A)U + (1/A)E
ARMAX model         Y = (B/A)U + (C/A)E
Box–Jenkins model   Y = (B/A)U + (C/D)E
ARMAX model:

let G := B/A and H := C/D
Ŷ(z) = (1 - A(z)⁻¹) Y(z) + A(z)⁻¹ G(z) U(z)

注意到y[k]的時刻有減一,而e[k]的時刻沒有減一。
轉移函數分母多一個z。【尚待確認】

system model (time domain)

output error model:

                  │ e (zero-mean white noise)
      ┌─────┐  w  ↓
u ───→│ B/A │──────────→ y
      └─────┘

⎧   w[k] + a[1] w[k-1] + a[2] w[k-2] +... + a[♯a] w[k-♯a]
⎨ =        b[1] u[k-1] + b[2] u[k-2] +... + b[♯b] u[k-♯b]
⎪
⎩   y[k] = w[k] + e[k]

ARX model:

               │ e
      ┌─────┐  ↓   ┌─────┐
u ───→│  B  │─────→│ 1/A │───→ y
      └─────┘      └─────┘

  y[k] + a[1] y[k-1] + a[2] w[k-2] + ... + a[♯a] y[k-♯a]
=        b[1] u[k-1] + b[2] u[k-2] + ... + b[♯b] u[k-♯b] + e[k]

ARMAX model:

      ┌─────┐
e ───→│  C  │──┐
      └─────┘  │
      ┌─────┐  ↓   ┌─────┐
u ───→│  B  │─────→│ 1/A │───→ y
      └─────┘      └─────┘

  y[k] + a[1] y[k-1] + a[2] y[k-2] + ... + a[♯a] y[k-♯a]
=        b[1] u[k-1] + b[2] u[k-2] + ... + b[♯b] u[k-♯b]
+ e[k] + c[1] e[k-1] + c[2] e[k-2] + ... + c[♯c] e[k-♯c]

Box–Jenkins model:

      ┌─────┐ v
e ───→│ C/D │──┐
      └─────┘  │
      ┌─────┐  ↓
u ───→│ B/A │─────→ y
      └─────┘ w

⎧   w[k] + a[1] w[k-1] + a[2] w[k-2] + ... + a[♯a] w[k-♯a]
⎪ =        b[1] u[k-1] + b[2] u[k-2] + ... + b[♯b] u[k-♯b]
⎪
⎨   v[k] + c[1] v[k-1] + c[2] v[k-2] + ... + c[♯c] v[k-♯c]
⎪ =        d[1] e[k-1] + d[2] e[k-2] + ... + d[♯d] e[k-♯d]
⎪
⎩   y[k] = w[k] + v[k]

least squares estimation

這次沒用correlation。不要問我為什麼。

linear regression (time-domain)

linear regression:
針對output error model和ARX model,得以使用一次迴歸。
公式解是normal equation。
針對ARMAX model和Box–Jenkins model,無法使用一次迴歸。
無法處理誤差項。

theroem:
(1) linear regression
(2) linear regression with zero-mean Gaussian white error
兩者公式解恰巧相同。
公式解是normal equation。
因此系統模型可以省略誤差項。

linear regression with ARX model:

ĝ = argmin ε(g)

ε(g) = sum ‖y[k] - ŷ(k;g)‖²
      k=1⋯L

ŷ(k;g) = g[1] y[k-1] + g[2] y[k-2] + ... + g[N] y[k-N]

linear regression (in matrix representation):

⎡ y[k]   ⎤   ⎡ y[k-1] ... y[k-N] ⎤
⎢   :    ⎥   ⎢   :          :    ⎥ ⎡ g[1] ⎤
⎢   :    ⎥ = ⎢   :          :    ⎥ ⎢   :  ⎥
⎢   :    ⎥   ⎢                   ⎥ ⎣ g[N] ⎦
⎣ y[k+L] ⎦   ⎣                   ⎦
                 thin matrix A

let k = 1 and L ≥ N
也可以改成k = N,甚至更大,這樣一來矩陣右上角不必補零。

solution:
g = (Aᵀ A)⁻¹ Aᵀ y

validation:
得到正確答案之後,驗證系統模型是否正確。
檢查各個時刻的誤差值,照理來說,整體呈現常態分布。
如果不是常態分布,那麼系統模型不正確。

optimization (time-domain)

不適合使用一次迴歸、多項式迴歸,
那就將迴歸問題化作最佳化問題。
gradient descent / Newton's method隨便你用。
請見本站文件「optimization」。

optimization (frequency domain)

least sequares estimation in frequency domain

方才介紹時域的迴歸。現在介紹頻域的迴歸。
出現兩個問題。
一、不再是高斯誤差。迴歸函數(系統模型)不能省略誤差項。
二、不再是一次迴歸。沒有公式解。
只能將迴歸問題化作最佳化問題。

optimization with Box–Jenkins model:

ĝ = argmin ε(g)

ε(g) = sum ‖Y(z) - Ŷ(z;g)‖²   where z = exp(𝑖2πω)
      ω=1⋯L

let G := B/A and H := C/D
Ŷ(z) = G(z) U(z) + H(z) E(z)

validation:
得到正確答案之後,驗證系統模型是否正確。
檢查誤差項E(z)的分布,照理來說,整體呈現均勻分布(白雜訊)。
如果不是均勻分布,那麼系統模型不正確。

system with internal state

subspace identification

                               rename
LTI system with internal state ------> subspace identification 
N4SID
past signal / future signal

system analysis — stochastic process🚧

stochastic process

stochastic process

訊號的數值,從固定的改成浮動的。

deterministic process / random process

deterministic process = evolution rule is fixed
random process = evolution rule is random

訊號的數值的數學公式,確定的和隨機的。
確定的:訊號數值有明確數學公式。甚至使用了前後數值。
隨機的:訊號數值亂七八糟。甚至看不出是否使用了前後數值。

數學公式使用了過往數值,此時稱作causal。
數學公式使用了過往數值,而且每個數值的數學公式都相同,此時形成recurrence。

constant function / time-invariant function

in K-12 mathematics,
(1) constant                = value remains unchanged
(2) constant/variable       = value is known/unknown

in mathematics,
(1) constant function       = output remains unchanged
                              by different input
(2) time-invariant function = function remains unchanged
                              by different time

in signals and systems,
(1) constant input/output   = signal remains unchanged
(2) time-invariant system   = system remains unchanged

stationary process / mutually independent process

stationary = looks like non-changing (aperiodic)
mutually independent = looks like non-regressive (acausal)
等號兩側其實不一樣,只是表面上看起來很可能是那樣。
stationary: variables and time are independent.
mutually independent: not depend on others.
stationary => identically distributed
mutually independent => pairwise independent
identically distributed process = time-invariant distribution
X₁ = X₂ = X₃ = ...

stationary process = time-invariant joint distribution
X₁ = X₂ = X₃ = ...
(X₁, X₂) = (X₂, X₃) = (X₃, X₄) = ...
(X₁, X₂, X₃) = (X₂, X₃, X₄) = (X₃, X₄, X₅) = ...
      :

pairwise independent process = constant marginal distribution
                               in 2-joint distribution
X₁ = (X₁, X₂ = x) for all x
X₁ = (X₁, X₃ = x) for all x
X₁ = (X₁, X₄ = x) for all x
 :         :
X₂ = (X₂, X₁ = x) for all x
X₂ = (X₂, X₃ = x) for all x
X₂ = (X₂, X₄ = x) for all x
 :         :

mutually independent process = constant marginal distribution
                               in joint distribution
X₁ = (X₁, X₂ = x₂) for all x₂
X₁ = (X₁, X₃ = x₃) for all x₃
X₁ = (X₁, X₄ = x₄) for all x₄
 :
X₁ = (X₁, X₂ = x₂, X₃ = x₃) for all x₂, x₃
X₁ = (X₁, X₂ = x₂, X₄ = x₄) for all x₂, x₄
X₁ = (X₁, X₃ = x₃, X₄ = x₄) for all x₃, x₄
 :
https://math.stackexchange.com/questions/3269920/
https://math.stackexchange.com/questions/1920473/

independent and identically distributed process

原本定義是
i.i.d. = identically distributed & mutually independent

但是有一個定理是
i.i.d. => stationary

因此實際上是
i.i.d. = stationary & mutually independent
https://www.statlect.com/glossary/stationary-sequence

moment / coherence

moment: statistics of one random variable
coherence: statistics of two random varibles
indentical => time-invariant moment
stationary => time-invariant moment and coherence
pairwise independent => no 1st coherence
mutually independent => no higher-order coherence
kth moment
E[Xᵏ]

kth central moment
E[(X-X̄)ᵏ]   where X̄ = E[X] is mean

1st coherence
E[XY]

1st standardized coherence
    E[(X-X̄)(Y-Ȳ)]
———————————————————————
(E[(X-X̄)²]E[(Y-Ȳ)²])¹⸍²

higher-order coherence
E[(XY,YZ,XZ)]            C(3,2)
E[(AB,AC,AD,BC,BD,CD)]   C(4,2)
moment: mean
central moment: zero, variance, skewness
coherence: correlation
standardized coherence: correlation coefficient

weakly stationary process

weakly stationary process

教科書習慣採用weakly stationary達成time-invariant autocorrelation。
但是(1)是多餘的,成為歷史共業。
identically distributed process = time-invariant distribution
stationary process = time-invariant joint distribution
stationary process:
(1) time-invariant moment (mean/variance/skewness/...)
(2) time-invariant coherence (autocorrelation/...)

stationary process example:
1. i.i.d. process
2. steady states
weakly stationary process:
(1) time-invariant 1st moment (mean)
(2) time-invariant 1st coherence (autocorrelation)
性質更弱。失去了高階動差和高階相干。

property:
(3) time-invariant 2nd central moment (variance)
(1) & (2) => (3)。證明省略。也有人將(3)直接納入定義。

weakly stationary process example:
1. white noise
2. random phase cosine wave

white noise

white noise:
power spectrum is uniform

white noise in time domain:
never discovered

a sufficient but not necessary condition:
weakly stationary process with Wiener–Khinchin theorem

white noise in theory:
(1) time-invariant 1st moment (mean)
(2) time-invariant 1st coherence (autocorrelation)
(3) autocorrelation approaches zero at infinite lag
其中(2)和(3)足以實施逆向傅立葉轉換。

white noise in practice:
(1)   constant mean
      E[x[k]] = μ for all k
(1&2) constant variance
      Var[x[k]] = σ² for all k
(2&3) impulse autocorrelation (uncorrelated)
      Rx[t] = σ² δ[t]
實務上無視高階動差,只處理mean和variance。
實務上無視高階相干,只處理autocorrelation,並且視作不相關。

white noise example:
1. white Gaussian noise N(μ,σ²)
2. white uniform noise  U(a,b)

stable system

stable system

definition:
1. stable:     difference of two sequences is bounded
2. convergent: sequence approaches constant (steady state)
3. stationary: sequence is constant

theorem:
convergent => stationary at steady states

(talking about a trivial thing like a theorem)
for LTI system,

theorem:
1. stable:     sequence is bounded
2. stable <=> Re[pᵢ] < 0 <=> convergent
3. convergent: sequence approaches zero (steady state)

大家習慣省略主角convergent。喪心病狂。
1. stable => stationary at steady states
2. stable <=> Re[pᵢ] < 0

(people pretend not to see 'convergent')
(textbooks replace all 'convergent' with 'stable')

system functionality🚧

system functionality

不知道該下什麼標題才好。

「系統功能」。系統是函數、甚至是函數網路。工程師設計函數網路,達成特定任務,例如生成/濾波/控制/觀測。

生成器:沒有輸入訊號。輸入一些參數,輸出一道訊號。
濾波器:系統輸出之後,追加一個系統,用來調整輸出訊號。
控制器:系統輸入之前,追加一個系統,用來調整輸入訊號暨輸出訊號。
觀測器:系統輸出之後,追加一個系統,用來觀測系統狀態。
verb     | action noun | agent noun
---------|-------------|-----------
generate | generation  | generator
filter   | filter      | filter
observe  | observation | observer
control  | control     | controller

system functionality — generator🚧

generator

「生成器」。函數,輸入參數,輸出訊號。

pulse generator / oscillator

脈衝生成器:產生三角形函數或者鐘形函數,寬度極窄,自訂寬度。
振盪器:產生週期函數。例如方波、三角波、鋸齒波、弦波。
實作方式採用程式語言,事情非常簡單。將函數直接寫成程式碼。
實作方式採用電子電路、生化反應,事情非常複雜。此處省略。

system functionality — filter🚧

filter

「濾波器」。函數,輸入訊號,輸出訊號。

LTI system

low-pass filter / high-pass filter

濾波器只保留低頻波、只保留高頻波。

band-pass filter / band-stop filter

濾波器只保留中頻波、只刪除中頻波。

Shelving filter / Butterworth filter

濾波器保留低頻波或高頻波;其餘的波,頻率相差越遠、保留越少。比較平滑柔順啦。
濾波器保留中頻波;其餘的波,頻率相差越遠、保留越少。比較平滑柔順啦。
Shelving filter其實有時域公式喔!
http://www.cs.cf.ac.uk/Dave/CM0268/PDF/10_CM0268_Audio_FX.pdf

peak filter / notch filter

濾波器頻譜呈現一個尖峰、頻譜呈現一個尖谷。

difference filter / feedforward comb filter / feedback comb filter

延遲1刻  yn = xn + a xn-1
延遲d刻  yn = xn + a xn-d   (頻譜的振幅呈現連綿圓峰)
改成回饋 yn = xn + a yn-d   (頻譜的振幅呈現梳子)(連綿圓丘上下顛倒)

2nd-order其實就是延遲時刻有小數點,需要做線性內插。
https://thewolfsound.com/allpass-filter/

all-pass filter

濾波器頻譜,振幅不變(常數1)、相位改變。
例如feedforward comb filter與feedback comb filter串聯。
https://ccrma.stanford.edu/~jos/pasp/Allpass_Two_Combs.html

moving average filter

k點平均  yn = (xn + xn-1 + ... + xn-k+1) / k
(頻譜的振幅呈現連綿縮小圓丘)

window function / spectral leakage

傅立葉轉換,只有整數倍頻率波。
如果訊號不是整數倍頻率波所組成,那就完蛋了。
非整數倍頻率波,將分散到各個整數倍頻率波,漏的到處都是。
訊號預先乘以窗函數,才做傅立葉轉換,稍微有點療效。
窗函數也可以想成是一種濾波器:連綿圓丘,消滅非整數倍頻率波。

sampling / aliasing

取樣,連續波變離散波。
根據取樣定理,
頻率超過取樣頻率兩倍的連續波(高頻連續波、取樣間隔太大),
將得到頻率稍小的離散波(波長稍長)。
固定取樣頻率時,若上述連續波頻率增大,則上述離散波頻率減小。
從頻譜來看,差不多是往左鏡射、往左翻書,中譯疊頻。
解法是連續波事先做lowpass filter。
去除高頻連續波,讓它沒有東西用來鏡射翻書。
但是濾波器無法做到完美矩形,只能陡降斜下。
稱作sharp cutoff lowpass filter。
曲線越陡價格越貴。

system functionality — observer🚧

observer

「觀測器」。已知系統、輸入訊號、輸出訊號,求得系統狀態。

state transition
state estimation (state observer)
https://control.asu.edu/Classes/MAE507/507Lecture09.pdf

Luenberger observer


sliding mode observer

https://medium.com/@saurav310304/f9fc11c0177a

system with internal state

找到迴歸函數之後,就可以預測訊號啦。
常見方式有Kálmán filter和hidden Markov model。
http://www.princeton.edu/~stengel/MAE546Seminars.html
一階微分 = 取前一個時刻
二階微分 = 取前兩個時刻

markov process就是引入機率的連續動態系統
markov chain就是引入機率的離散動態系統

system functionality — controller🚧

controller

「控制器」。一個系統,一道輸入訊號,一道輸出訊號。調整輸入訊號,得到特別的輸出訊號。

control應用十分廣泛,是世上最實用的演算法之一。

https://www.mathworks.com/solutions/control-systems/feedback-control-systems.html
https://ctms.engin.umich.edu/CTMS/index.php

LTI system

control

in practice:
                                    plant
                            ╭┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╮
reference ─┬─→ controller ─→┆actuator ─→ process┆──┬──→ output
           ↑                ╰┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╯  │
           └────────────── sensor ←────────────────┘

in theory:

reference ─┬─→ controller ──→ plant ──┬──→ output
           ↑                          ↓
           └──────────────←───────────┘
                 時域  頻域
reference  參考訊號  r(t)  R(s)
output     輸出訊號  y(t)  Y(s)
controller 控制器   k(t)  K(s)
plant      受控廠   g(t)  G(s)
actuator   致動器
process    程序
sensor     感測器   h(t)  H(s)

controller / plant

追加一個系統(控制器),用來控制原本系統(受控廠)。
控制器的輸出訊號,作為受控廠的輸入訊號。
控制器調整了輸入訊號,受控廠得到了特別的輸出訊號。

regulation / tracking

輸出訊號趨近(固定不變的)固定數值
輸出訊號趨近(即時改變的)參考訊號

open-loop controller / closed-loop controller

open-loop controller:

r               u          y
──→ controller ──→ plant ──→

closed-loop controller:

r    e=r-y              u             y
───┬──────→ controller ──→ plant ──┬──→
  -└─────────────←─────────────────┘
開迴路控制:控制器的輸入是參考訊號。
閉迴路控制:控制器的輸入是誤差。
誤差是參考訊號減輸出訊號(跟統計學家的習慣相反)。
用膝蓋想也知道,誤差訊息量更多,於是效果更好。
其實兩者可以一併使用,尤其是非線性系統。
甚至沒有必要計算誤差,直接使用參考訊號與輸出訊號,尤其是多變數系統。
效果更好的正式說法是靈敏度較低:
(dT/T)/(dG/G),控制系統變化與受控廠變化的比值。
教科書談靈敏度,喜歡以P controller的穩態誤差當作範例。只是在誤導大眾。

PID controller

e(t) = r(t) - y(t)     error

u(t) = kp e(t) + ki ∫ e(t) dt + kd d/dt e(t)   control
       ^^^^^^^   ^^^^^^^^^^^^   ^^^^^^^^^^^^   signal
    proportional   integral      derivative
     controller   controller     controller

y(t) = u(t) ∗ g(t)     output
proportion    比例。乘上某個百分比的結果。
integral      積分。積分運算的結果。
derivative    導數。微分運算的結果。
P controller:原值,再乘上權重kp。誤差當前數值。
I controller:積分,再乘上權重ki。誤差前綴和。過往累計。
D controller:微分,再乘上權重kd。誤差相鄰差。瞬間變化。
closed-loop PID controller (in theory):

───┬──→ kp + ki/s + kd*s ──→ G(s) ──┬──→
  -└───────────────←────────────────┘

rate feedback PID controller (in practice):

───┬──→ kp + ki/s ───────┬─→ G(s) ──┬──→
  -│                    -└── kd*s ←─┤
   └────────────────←───────────────┘

PID tuning

此處討論tracking。參考訊號是步進函數(目標數值是1,當前數值是0)。

此時大家觀察下述指標,評定優劣。
rising time     tr  到達1的時間(從0.1到0.9的時間,避免計入緩速時段)
settling time   ts  到達穩態的時間(保持在0.99到1.01之內)
peak time       tp  到達第一個局部極值的時間(最高峰)
peak overshoot  Mp  超過1的部分(最高峰減1,單位百分比)

此時PID controller調整參數,輸出訊號會有下述效果。
kp  調整斜率、改變頻率。增益(效果是放大縮小)。
ki  調整平均、改變穩態。高通濾波器(效果是鋸齒化)
kd  調整曲率、改變振幅。低通濾波器(效果是平滑化)。

Ziegler–Nichols tuning:古聖先賢發明了經驗公式。兩種調參方法。
1. quarter decay ratio
2. ultimate sensitivity method
https://my.ece.utah.edu/~ece3510/Notes_PID_Tuning_long.pdf

程式範例,受控廠是二次微分方程、0 zero 2 poles、-1 -2。

詳細圖解,位於影片後段。

stability analysis

pole–zero plot

極零圖:transfer function的poles與zeros。極X零O。
畫出poles和zeros的位置,以便判斷穩定性。
如果極X都在左半複平面(開區間、不含虛軸),則穩定。
如果右半複平面沒有極X(閉區間、包含虛軸),則穩定。

transfer function的poles,就是分母的zeros。
畫出分母的極零圖,亦可判斷穩定性。
如果右半複平面沒有零O,則穩定。
PID tuning的四個指標,可以畫成圖形,併入極零圖。

參考訊號是步進函數,R(s) = 1/s。
參考訊號R(s)、閉/開迴路系統T(s),串聯就是乘法,
得到輸出訊號Y(s) = R(s)T(s)。
極零圖基本不變,只多了一個pole位於原點。

教科書只針對開迴路,受控廠G(s)是二次微分方程,沒有控制器K(s) = 1。
(教科書討論開迴路,但是照理應該討論閉迴路。因此以下結論沒有實用價值。)
(討論閉迴路,結果相當複雜,缺乏美感。)
(作者故意將閉迴路改成開迴路,然後挪到前面章節,我猜是為了美化。)

R(s) = 1/s                   unit step function

K(s) = 1                     no controller
               ωn²
G(s) = ———————————————————   second-order causal LTI system
       s² + 2 ζ ωn s + ωₙ²
                                ωn²
Y(s) = R(s)K(s)G(s) = ——————————————————————   open-loop
                      s(s² + 2 ζ ωn s + ωₙ²)   controller

y(t) = 1 - exp(-ζ ωn t) sin(ωd t + ϕ) / sqrt(1 - ζ²)

where ωd = ωn(1 - ζ²)
      ϕ = tan⁻¹(sqrt(1 - ζ²) / ζ)

根據y(t),推導tr/ts/tp/Mp的滿足條件(不等式),畫在複平面。
可行解位於交集(四張圖片左半複平面重疊區域)。
https://cf.ppt-online.org/files/slide/c/C4t2nPmwWsDjy96FoSxvVrU7Iq3gMHBY5ziX1l/slide-32.jpg

root locus plot

https://control.asu.edu/Classes/MAE318/318Lecture12.pdf
根軌跡圖:transfer function附帶一個參數(例如kp)。
窮舉參數值,畫出poles的變化軌跡,以便判斷穩定性。

1. open-loop controller:
r                u            y
───→ controller ──→ plant ────→
        K(s)         G(s)

transfer function:
K(s)G(s)

2. closed-loop controller:
r    e=r-y              u             y
───┬──────→ controller ──→ plant ──┬──→
  -↑           K(s)         G(s)   ↓
   └─────────────←─────────────────┘

transfer function:
  K(s)G(s)
————————————
1 + K(s)G(s)

3. 改寫成分式
K(s) = nᴋ(s) / dᴋ(s)
G(s) = nɢ(s) / dɢ(s)

transfer function:
  K(s)G(s)           nᴋ(s)nɢ(s)
———————————— = ———————————————————————
1 + K(s)G(s)   dᴋ(s)dɢ(s) + nᴋ(s)nɢ(s)

4. P controller:
K(s) = kp
nᴋ(s) = kp
dᴋ(s) = 1

transfer function:
  K(s)G(s)       kp G(s)         kp nɢ(s)             nɢ(s)     
———————————— = ——————————— = ———————————————— = ————————————————
1 + K(s)G(s)   1 + kp G(s)   dɢ(s) + kp nɢ(s)   dɢ(s)/kp + nɢ(s)

transfer function的poles,就是分母的根。
1 + kp G(s) = 0 或 dɢ(s) + kp nɢ(s) = 0 或 dɢ(s)/kp + nɢ(s) = 0
注意到,如果今天不是採用P controller,那麼需要重新推導。

現在要畫出transfer function的poles軌跡。kp = 0⋯∞。
當kp = [0,∞),根軌跡是分母1 + kp G(s)的根。
當kp = 0,根軌跡起點恰是dɢ(s)的根,即是G(s)的poles。
當kp → ∞,根軌跡終點恰是nɢ(s)的根,即是G(s)的zeros。

採用P controller的情況下,K(s) = kp只是一個倍率。
此時G(s)的zeros/poles,
恰是open-loop transfer function K(s)G(s)的zeros/poles。
導致大家認為root locus的起點和終點就是開迴路的poles/zeros。
然而一般情況下根本無法牽扯到開迴路。成為歷史共業。

古聖先賢發明了手工製圖方法。好幾條規則。
https://www.mit.edu/people/klund/weblatex/node8.html

5. closed-loop controller with sensor:
r    e=r-y              u             y
───┬──────→ controller ──→ plant ──┬──→
  -↑           K(s)         G(s)   │
   │                               │
   └─────────── sensor ←───────────┘
                 H(s)

transfer function:
    K(s)G(s)
————————————————
1 + K(s)G(s)H(s)

教科書定義K(s)G(s)H(s) = k L(s),但是內文根本沒有用到。來亂的。

Nyquist plot

https://lpsa.swarthmore.edu/Nyquist/NyquistStability.html
https://ocw.mit.edu/courses/18-04-complex-variables-with-applications-spring-2018/44f1db513a6a17d655abe0b6ff7748fc_MIT18_04S18_topic11.pdf
Nyquist圖:實施下述變換。
輸入:圍線(封閉路徑)(點集合),順時針圍住右半複平面。s = (-𝑖∞,+𝑖∞)
函數:逐點對應,s -> 1+K(s)G(s)。
輸出:新圍線。稱作Nyquist圖。
總結:右半複平面圍線,每一點s計算1+K(s)G(s),逐點描繪新圍線。
性質:s = (-𝑖∞,0]與s = [0,+𝑖∞)的新圍線呈上下鏡面對稱。
取巧:加一就是圍線往右位移。大家習慣畫K(s)G(s),再用-1取代原點。
取巧:當K(s) = kp,大家習慣畫G(s),再用-1/kp取代-1。

Cauchy's integral theorem:
複變函數f(z),圍線積分路徑圍住零個洞,圍線積分是0。

Cauchy's residue theorem:
複變函數f(z),圍線積分路徑圍住多個洞,圍線積分是2π𝑖乘上留數和。

Cauchy's argument principle:
複變函數f′(z)/f(z),圍線積分路徑圍住P個極、Z個零,圍線積分是2π𝑖(Z-P)。
援引winding number,上述圍線積分重新視作逆時針繞圈(Z-P)次。

Cauchy's argument principle:
複變函數f(z),有多個極零。
一條圍線,逆時針繞圈一次,圍住P個poles、Z個zeros,
該條圍線實施f(z)變換之後,
一條圍線,逆時針繞圈(Z-P)次,圍住原點。

Nyquist stability criterion:
閉迴路系統極零圖,右半複平面不含閉迴路系統的pole,則穩定。
閉迴路系統K(s)G(s)/(1+K(s)G(s))的pole,就是分母1+K(s)G(s)的zero。
分母1+K(s)G(s),有多個極零。
分母極零圖,右半複平面不含分母1+K(s)G(s)的zero,則穩定。
分母極零圖,右半複平面圍線,沒有圍住分母1+K(s)G(s)的zero,則穩定。
分母極零圖,令右半複平面有P個pole、Z個zero,令圍線是逆時針。
Nyquist圖,逆時針繞圈(-P)次,且圍住原點,則Z=0,則穩定。
(必須事先知道P是多少。因此此定理不實用。)

分母極零圖,右半複平面圍線,習慣畫順時針。
Nyquist圖,習慣畫K(s)G(s)而非1+K(s)G(s),用-1取代原點。
Nyquist圖,逆時針繞圈P次,且圍住-1,則穩定。

採用P controller的情況下,K(s) = kp只是一個倍率。
Nyquist圖,習慣畫G(s)而非K(s)G(s),用-1/kp取代-1。
Nyquist圖,逆時針繞圈P次,且圍住-1/kp,則穩定。
兩種製圖方式。
一、已知系統,以紙筆計算:
  先畫波特圖(頻譜),再依此畫Nyquist圖。
  s = (-𝑖∞,+𝑖∞)恰好對應傅立葉轉換的每種頻率的波。
二、未知系統,以儀器測量:
  大家假設K(s)G(s)的pole比zero數量多、分母比分子次方高,
  當s → ∞,則分母1+K(s)G(s) → 1。Nyquist圖可以畫得出來。
  即便系統不穩定,Nyquist圖在下述情況還是畫得出來:
  分母極零圖,右半複平面圍線,沒有途經分母1+K(s)G(s)的zero。
  也就是說,閉迴路系統的pole不在虛軸上面。

Bode plot

https://lpsa.swarthmore.edu/Bode/BodeReviewRules.html
波特圖:系統的頻譜。分為振幅頻譜和相位頻譜。
振幅頻譜:採用log-log plot。橫軸頻率取log、縱軸振幅取log。
相位頻譜:採用semi-log plot。橫軸頻率取log、縱軸角度。

Bode stability criterion:
if open-loop K(s)G(s) is stable
and |K(s)G(s)| < 1 for all s: ∠K(s)G(s) ≡ 180° (mod 360°)
then closed-loop (K(s)G(s))/(1+K(s)G(s)) is stable.
先看相位頻譜,-180°是哪幾個頻率。
再看振幅頻譜,這幾個頻率的振幅均小於1,則穩定。
這是利用開迴路來看閉迴路是否穩定。
實務上恰恰相反。大家利用閉迴路來讓開迴路變得穩定。
兩種製圖方式。
一、已知系統,以紙筆計算:
  針對LTI system、並且已知zero/pole。
  一、根是零:振幅一段:過原點45°降線。(原點取log之後是1)
        相位一段:-90°水平線。
  二、實根:振幅兩段:0°水平線、45°降線。
       相位三段:0°水平線、45°降線、-90°水平線。
       分裂點:彎曲過渡,其截距3dB。
  三、共軛複根:振幅兩段:0°水平線、分裂點隆起、45°降線。
         相位兩段:0°水平線、分裂點漸變、-180°水平線。
  四、重根:振幅:水平線高度乘上倍率。降線斜率乘上倍率。
       相位:水平線高度乘上倍率。
       倍率是重根次數。
  五、上述都是極。極零升降相反。
  然而現在大家都用電腦軟體製圖。上述手法只能用來人工驗算。
二、未知系統,以儀器測量:
  針對LTI system、不知zero/pole。
  系統輸入:特定頻率的弦波,振幅一、相位零。
  系統輸出:以儀器測量其振幅和相位,描出波特圖一點。
  (即是frequency response。)
  如果系統不穩定,系統輸出無限大,波特圖有些頻率畫不出來。

compensator

compensator = filter

補償器用來追加poles或zeros。用途如同filter。
根據transfer function串聯乘法原理,補償器接在控制器前面或後面都行。
PID controller + lead compensator是常見組合。

lead compensator  ≈ high-pass filter ≈ PD controller
lag compensator   ≈ low-pass filter  ≈ PI controller
notch compensator ≈ band-pass filter

lead compensator K(s) = (s-z)/(s-p) and |z| < |p| 左X右O
lag compensator  K(s) = (s-z)/(s-p) and |z| > |p| 左O右X

non-minimum phase system

右半複平面出現zeros。
當參考訊號是步進函數,則輸出訊號是先蹲後跳、聯結車轉彎。一開始衝向負值。

沒救了。compensator沒有辦法解決這種情況。
一種直覺的方式是追加poles抵銷zeros,分母分子約分之後一起消失不見。
然而實務上無法完全對準。
誤差、設備老化,都會導致zeros偏移。
稍有差池,輸出訊號就會偶然出現正負無限大。
導致電路過載燒掉、動力機械暴衝、反應槽爆炸。
非常危險。
實務上不能追加右半複平面poles抵銷右半複平面zeros。
我不知道有沒有其他解法。也許根本不需要解,順其自然就好。

gain margin / phase margin

兩個指標,用來粗略判斷前述四個調參指標以及穩定性。
增益邊界:相位為-180°=-π的頻率(波特圖相位曲線穿越橫軸之處)的振幅,減去0dB=1。
相位邊界:振幅為0dB=1的頻率(波特圖振幅曲線穿越橫軸之處)的相位,減去-180°=-π。
lead/lag compensator直接影響這兩個指標。

type 0/1/2 system

有0/1/2個pole等於零。
兩種出現情況:
一、補償器追加pole。
二、輸入訊號是constant/unit step/ramp function。
如果是情況二,穩態定義必須隨之改變,
例如零函數/零次常數函數/一次直線函數/二次拋物線函數。

system with internal state

optimization

(1) PID control: regression by formula
(2) optimal control:regression by optimization

Hamilton–Jacobi–Bellman equation / Riccati equation

動態規劃,找到最好的動作方式。

Sylvester equation / Lyapunov equation

矩陣方程式,常見的最佳化問題的解。

system with parameters

(1) robust control
    system with additional known variables
(2) adaptive control
    system with additional unknown time-invariant variables
(3) model predictive control
    system with additional constraints

nonlinear system

sliding mode controller

system design🚧

system design

「系統設計」。完成系統分析之後,工程師利用電子元件與機械零件打造相似系統,以便模擬現實世界、改造現實世界。

我目前只知道三種流派:

一、電子電路:風靡全世界。雖然台灣是地球上最大的電子零件生產基地,台灣也有專門設計電子電路的公司,但是我不太確定台灣是否有這方面的專家。有言道:十萬青年十萬肝,GG輪班救台灣。關鍵字:電路學、積體電路設計、自動控制、控制理論。

二、生化反應:發展中。雖然台灣之前打算成立藥物代工廠、學名藥設計實驗室,但是以失敗告終。有言道:一日生科,終生科科。關鍵字:化學動力學、酵素動力學、藥物動力學、系統生物學。

三、深度學習:最近十年才剛萌芽。已經做到生成/濾波,目前做不到控制/觀測。正在經歷大浪潮,準備迎接大泡沫。有言道:站在風口上,豬都會飛。關鍵字:人工智慧、機器學習、深度學習。

system design — electronic circuit🚧

electric circuit

RC circuit / resistor–capacitor circuit

low-pass filter
high-pass filter

RLC circuit / resistor–inductor–capacitor circuit

sine wave

electronic circuit

oscillator

https://en.wikipedia.org/wiki/Electronic_oscillator

synchronization

phase-locked loop

Phase Detector (PD):
Compares the phase of the input signal with that of the output signal.

Low-Pass Filter (LPF):
Filters the output of the phase detector to produce a control voltage.

Voltage-Controlled Oscillator (VCO):
Adjusts its frequency based on the control voltage to lock onto the input signal.
VCO, Phase comparator and PID make a PLL.

electrical–mechanical–acoustical analogy

電流、機動、聲響,三者物理量相仿,可以類比。

https://en.wikipedia.org/wiki/Mechanical–electrical_analogies
https://en.wikipedia.org/wiki/Impedance_analogy
https://en.wikipedia.org/wiki/Harmonic_oscillator
mechanical impedance
https://www.bksv.com/media/doc/17-179.pdf

system design — chemical kinetics🚧

chemical kinetics

反應速度取決於當前濃度。

production and decay

production:

 k
───→ A

ȧ = k
a(t) = a(0) + kt
decay:

        k
     A ───→

ȧ = -k a
a(t) = a(0) exp(-kt)

steady state:

ȧₛₛ = -k aₛₛ = 0
aₛₛ = 0
production and decay:

 k₀     k₁
───→ A ───→

ȧ = k₀ - k₁ a
a(t) = (a(0) - k₀/k₁) exp(-k₁t) + k₀/k₁

steady state:

ȧₛₛ = k₀ - k₁ aₛₛ = 0
aₛₛ = k₀/k₁

closed system

irreversible conversion:

   k
A ───→ B

⎰ ȧ = -k a
⎱ ḃ =  k a

closed system:

ȧ + ḃ = 0
reversible conversion:

   k₁
A ⇌⇌⇌ B
   k₋₁

⎰ ȧ = -k₁ a + k₋₁ b
⎱ ḃ =  k₁ a - k₋₁ b

closed system:

ȧ + ḃ = 0

open system

interaction with decay:

   k₁     k₂
A ⇌⇌⇌ B ───→     (k₁ + k₋₁ >> k₂)
   k₋₁

⎰ ȧ = -k₁ a + k₋₁ b
⎱ ḃ =  k₁ a - k₋₁ b - k₂ b

rapid equilibrium assumption:

a and b rapidly become and remain steady states.
b̃/ã = k₁/k₋₁
equivalent model:

   k₂k₁/(k₁+k₋₁)
C ──────────────→

c̃ = ã + b̃
interaction with production and decay:

 k₀     k₁     k₂
───→ A ⇌⇌⇌ B ───→     (k₁ + k₋₁ >> k₂)
        k₋₁

⎰ ȧ =  k₀ - k₁ a + k₋₁ b
⎱ ḃ =  k₁ a - k₋₁ b - k₂ b

quasi-steady state assumption:

a is always steady state respect to b
aₛₛ/bₛₛ = k₁/(k₋₁+k₂)

cooperativity

Michaelis–Menten equation:

       k₁
P + X ⇌⇌⇌ PX
       k₋₁

    number of occupied binding sites
Y = ————————————————————————————————
      total number of binding sites

       [PX]
  = ——————————
    [P] + [PX]

      [X]
  = —————————     where Kₛₛ = k₋₁/k₁ = [P][X]/[PX]
    Kₛₛ + [X]
Adair equation:

        4k₁
P + X₁ ⇌⇌⇌ PX₁
        k₋₁

        3k₂
P + X₂ ⇌⇌⇌ PX₂
        2k₋₂

        2k₃
P + X₃ ⇄⇄⇄ PX₃
        3k₋₃

        k₄
P + X₄ ⇌⇌⇌ PX₄
        4k₋₄

    number of occupied binding sites
Y = ————————————————————————————————
      total number of binding sites

        1[PX₁] + 2[PX₂] + 3[PX₃] + 4[PX₄]
  = ——————————————————————————————————————————
    4([P] + 1[PX₁] + 2[PX₂] + 3[PX₃] + 4[PX₄])

       [X]/K₁ + 3[X]²/K₁K₂ + 3[X]³/K₁K₂K₃ + [X]⁴/K₁K₂K₃K₄
  = ———————————————————————————————————————————————————————
    1 + 4[X]/K₁ + 6[X]²/K₁K₂ + 4[X]³/K₁K₂K₃ + [X]⁴/K₁K₂K₃K₄
Hill equation:

      [X]⁴/K₁K₂K₃K₄
Y ≈ —————————————————   when K₄ << K₁,K₂,K₃
    1 + [X]⁴/K₁K₂K₃K₄

      ([X]/K)⁴       [X]⁴
Y ≈ ———————————— = —————————
    1 + ([X]/K)⁴   K⁴ + [X]⁴

interconversion

Goldbeter–Koshland kinetics:

         4a₁      k₁
Zp + Ex ⇌⇌⇌ C₁ ───→ Z + Ex
         a₋₁

         4a₂      k₂
Zp + Ey ⇌⇌⇌ C₂ ───→ Z + Ey
         a₋₂
       X
    k₁ ↓
Zp ⇌⇌⇌⇌⇌⇌ Z
    k₂ ↑
       Y

transport: diffusion

diffusion:

A ←─→ B

⎰ ȧ = -D(a-b)/V₁
⎱ ḃ =  D(a-b)/V₂

V: volume
D: diffusion rate

inhibition

time series plot / phase portrait

stichiometry matrix

antagonistic network

inhibition:

     n₁
k₁↓├──── ↓k₃
  A ───→ B
k₂↓  k₅  ↓k₄

⎰ ȧ = k₁/(1 + (b/K₂)ⁿ¹) - k₃a - k₅a
⎱ ḃ = k₂                - k₄b + k₅a

n: inhibition rate
cross-inhibition:

k₁↓   n₁  ↓k₃
  A |===| B
k₂↓   n₂  ↓k₄

⎰ ȧ = k₁/(1 + (b/K₂)ⁿ¹) - k₃a
⎱ ḃ = k₂/(1 + (a/K₁)ⁿ²) - k₄b

n: inhibition rate

gene toggle switch

bistable

Collins toggle switch [Gardner et al. 2000]:

           ┌─→ protein1---┐├--inducer1
           │              ┴
         gene1          gene2
           ┬              │
inducer2--┤└---protein2 ←─┘

⎰ ȧ = α₁/(1+aⁿ¹) - δ₁a
⎱ ḃ = α₂/(1+aⁿ²) - δ₂b

⎰ ȧ = F₁(a,b) - δ₁a
⎱ ḃ = F₂(a,b) - δ₂b

oscillator

Goodwin oscillator:

      ┌── Y (protein) ←─┐
      ↓                 │
Z (metabolite)       X (mRNA)
      ╎                 ↑
      └----┤ gene ──────┘

⎧ ẋ = a/(kⁿ+zⁿ) - bx
⎨ ẏ = cx - dy
⎩ ż = ey - fz
Elowitz–Leibler repressilator:

    ┌─→ repressor1---┐
    │                ┴
  gene1            gene2
    ┬                │
    ╎                ↓
repressor3       repressor2
    ↑                ╎ ╎
    └─── gene3 ├----─┘ └-----┤reporter gene

⎧ ṁ₁ = α₀ + α/(1+p₃ⁿ) - m₁
⎪ ṁ₂ = α₀ + α/(1+p₁ⁿ) - m₂
⎨ ṁ₃ = α₀ + α/(1+p₂ⁿ) - m₃
⎪ ṗ₁ = β(m₁ - p₁)
⎪ ṗ₂ = β(m₂ - p₂)
⎩ ṗ₃ = β(m₃ - p₃)

feedback

autocatalysis (self-activation):

              δ
 ┌─--------A ──→
 ↓         ↑
gene ──────┘

        a/K
ȧ = α ——————— - δ a
      1 + a/K   ^^^ degrade
autoinhibition (self-repression):

              δ
 ┌─--------A ──→
 ┴         ↑
gene ──────┘

         1
ȧ = α ——————— - δ a
      1 + a/K

system design — deep learning🚧

deep learning

「深度學習」。可以視作迴歸,迴歸函數是各種函數串聯並聯。

https://github.com/leemengtaiwan/deep-learning-resources

deep learning是新興理論,尚在發展當中,無法整理成篇。我將發展現況分成兩種方向,僅供參考。

邏輯推理觀點

我認為深度學習可以做到邏輯推理的歸納法。

邏輯推論logical inference宛如求解equation solving。根據一些邏輯運算式子的計算結果,判斷一個邏輯運算式子是否有唯一解。

邏輯推理logical reasoning宛如迴歸regression。根據一些邏輯運算式子的計算結果,調整一個邏輯運算式子,盡量達成唯一解。

機率分布即是二元邏輯的推廣版本。convolution即是加法運算。ReLU即是分支判斷。各種函數即是各種邏輯運算。

事先網羅足夠多的函數,事後練出足夠長的邏輯運算式子。

模組編程觀點

我認為深度學習就是在寫程式。

專案即是迴歸模型。編程即是拼湊函數,除錯即是降低誤差。運算子即是初階函數,函式庫即是進階函數。物件導向精簡函數架構,演算法形成函數單元。自行拼湊適當函數,考慮越多,效果越好。

以前是撰寫程式碼,經過編譯器,自動生成機器碼。現在是拼湊函數,經過deep learning,自動生成程式碼。封建升城堡。

與其說deep learning可以取代程式設計師,不如說deep learning是一種更高層次的編程方式。大家只是換個方式寫程式。

近況

近年來許多政商人士提倡人工智慧,呼籲大眾學習如何運用深度學習。他們認為深度學習可以彌補電子電路的不足。大家可以待在家中設計神經網路,透過電腦與網路,輕鬆控制生活周遭的事物──不必事事都得委託聯發科設計電子電路、委託台積電製造電子電路。

然而深度學習目前仍是煉金術。大家憑感覺發明許多結構,但是無法利用數學來論證其功能。

metaheuristics也是類似的新流派。既有的最佳化演算法無法投入實用,大家重新發明基因演算法、蟻群演算法、粒子群演算法。

machine learning也是類似的新流派,既有的模式識別演算法無法投入實用,大家重新發明梯度下降技巧、神經網路結構。

陽春白雪變成下里巴人,引經據典變成信口開河。但是它實用。