periodic signal🚧
periodic signal
「週期訊號」。每隔固定時間就會重複的訊號。
數學家稱作週期數列(離散)、週期函數(連續)。
period
「週期」。開始重複的時間。
多串週期訊號疊加,仍是一串週期訊號,週期是最小公倍數。
一串週期訊號分隔為多串週期訊號,此處不討論。
maximum / minimum / peak / foot
「最大值」「最小值」「峰」「谷」。全域極值、局部極值。
sinusoidal signal
「弦型訊號」。訊號呈現正弦函數、餘弦函數、歐拉公式。
弦型訊號是週期訊號的重要特例。請見本站文件「wave」。
frequency
「頻率」。週期的倒數。一單位時間的訊號重複次數。
週期訊號,倒數沒有任何意義。弦型訊號,倒數才有意義。
倒數源自弦波。週期的倒數恰好是弦波一單位時間的振動次數。
amplitude
「振幅」。數值軸,訊號高低範圍的一半。
週期訊號,一半沒有任何意義。弦型訊號,一半才有意義。
一半源自弦波。高低範圍的一半恰好是弦波數學式子之倍率。
spectrum(frequency spectrum)
「頻譜」。一串週期訊號分隔為多串週期訊號,求得各串週期訊號的振幅與頻率。
主流做法是傅立葉轉換:一串週期訊號分隔為多串弦型訊號。
頻譜習慣畫成函數圖形:橫軸是頻率,縱軸是振幅。
週期訊號的主角是週期與峰谷。弦型訊號的主角是頻率與振幅。因為大家經常使用傅立葉轉換將週期波分解成複弦波,所以週期訊號的敘事主角變成頻率與振幅。
sampling theorem(Nyquist's theorem)
「取樣定理」。一串弦型訊號,從連續變離散。如果想要藉由離散訊號得知連續訊號的頻率,那麼取樣頻率必須大於等於頻率兩倍。至於振幅,已經無法得知了。
取樣定理可以推廣為週期訊號。主流做法是傅立葉轉換:一串週期訊號分隔為多串弦型訊號。如果想要得知每串弦型訊號的頻率,取樣頻率必須大於等於最大頻率兩倍。
random signal🚧
random signal
「隨機訊號」。每個數值都是隨機變數。所有數值形成隨機程序。
理想的名稱應是「浮動訊號」。請見本站文件「floating number」。
random process的頻譜
隨機過程,實施「傅立葉轉換」,從時域變頻域。
普通的隨機過程:無解析解,頻譜混亂。
滿足wide-sense stationary條件的隨機過程:有解析解。兩兩的共相關數,可求得頻譜。具備傅立葉轉換的相關數學特性,諸如線性、卷積乘法對偶、能量守恆。
然而,滿足wss條件的隨機過程,就是每個數字幾乎一樣的數列。缺乏討論意義,也無法解決現實問題。數學家目前僅發現wss條件,尚未發現更具討論意義的條件。
noise
「雜訊」或「噪訊」。雜訊沒有明確定義。目前大家認為雜訊包含幾種意義:一、不被需要的訊號、冗餘的訊號。二、沒有規律的訊號、不可預測的訊號。三、無法擬合數學模型的訊號。
大家觀察各種真實現象,命名為各種雜訊。大家也利用浮動訊號建立數學模型,創造出各種雜訊。維基百科整理了一份列表:
例如「Gaussian white noise」:高斯白雜訊。每個隨機變數都是常態分布,其平均數(浮動中心)和變異數(浮動範圍)均相同。恰好屬於白雜訊。
noise的頻譜
大家仿照光譜由紅到紫的特性,嘗試分類雜訊。
white: 強度為常數 grey: 強度符合人類聽覺曲線。(不那麼白) red: 強度正比於頻率倒數平方。 以頻率對數為座標軸,漸減6dB。 pink: 強度正比於頻率倒數。 以頻率對數為座標軸,漸減3dB。(不那麼紅) violet: 強度負正比於頻率倒數平方。 以頻率對數為座標軸,漸增6dB。 blue: 強度負正比於頻率倒數。 以頻率對數為座標軸,漸增3dB。(不那麼紫)
noise reduction(denoising)
分離並消除隨機訊號,通常稱作「去雜訊」或「降噪」。
假設雜訊是高頻,於是套用low-pass filter。轉換到頻域、刪除高頻強度、轉換回時域。
https://www.mathworks.com/help/wavelet/ug/wavelet-denoising.html
peak analysis🚧
frame
「框」。擷取一段訊號,以此判斷極值。這段訊號長度必須涵蓋一個週期,才能判斷極值。
peak detection
找到波形的尖峰。
一、消除鋸齒:方法很多,諸如 口、時域的平滑效果(k點平均數)(k點中位數)。 口、頻域的刪除高頻(高頻形成鋸齒)。 口、時域的linear prediction(迴歸函數)。 二、尋找極值:中央高、兩側低。 三、估計峰尖:極值前後,三點做拋物線內插,求出拋物線頂點。
peak continuation
找到頻譜的尖峰。
尖峰隨著時間連續變化。追蹤每個時刻的尖峰位置。
periodicity analysis🚧
frame
「框」。擷取一段訊號,以此判斷週期。這段訊號長度必須涵蓋多個週期,才能判斷週期。
periodicity detection(frequency detection)
找到波形的週期。
數學、物理學、訊號學,總是預設我們可以得到特定時間點、特定瞬間的頻率。計算學無這款好空事志。計算學只能得到一段時間(一段訊號)的頻率,並且假裝它是特定瞬間的頻率。
peak detection:找到兩個波峰,位置相減得到波長,波長倒數得到頻率。僅適合純音。 zero-crossing rate:波形穿越零的次數。僅適合純音。 ACF:位移、相乘、加總(內積)。各種位移量,找最大值。 AMDF:位移、相減再絕對值、加總(絕對值誤差)。各種位移量,找最小值。 YIN:位移、相減再平方、加總(平方誤差)。各種位移量,除以累積和,找最小值。 複合:例如 ACF / (AMDF + 1.0),找最大值。
frequency tracking
找到頻譜的尖峰。
頻率隨著時間連續變化。追蹤每個時刻的頻率高低。
spectrum analysis🚧
Fourier analysis
Fourier transform:波形分解成一群弦波,頻率為整數倍。
傅立葉轉換的計算結果,經常轉換成頻譜。除了廣為人知的頻譜之外,還有許多衍生產物,命名方式是翻轉字母順序,非常搞笑。
specmurt和cepstrum主要用於共鳴聲音,例如樂器聲、說話聲。共鳴產生諧音:強度頻譜上,強度規律地出現,其頻率呈倍數。頻率軸取log,讓出現間隔成為等距,叫做specmurt。強度規律地出現,宛如波,於是有人再度套用一次傅立葉轉換找到基頻(個人認為莫名其妙),叫做cepstrum。由於頻譜有一些重大缺點,又加上計算時間長,所以並不好用。
spectrum:頻譜。分為強度頻譜、相位頻譜。 specmurt:名稱不詳。頻譜的座標軸,頻率取log,符合人類聽覺感受。 cepstrum:倒頻譜。強度頻譜,強度值取log,實施(逆向)傅立葉轉換。
power analysis🚧
energy detection
找出訊號的能量。
週期訊號可以分隔為多串弦型訊號。能量就是每個弦型訊號的振幅的平方和。
能量就是頻譜逐項平方總和。就這樣。
根據Parseval's theorem,可以直接在時域求得能量。
Parseval's theorem:時域共軛乘法等於頻域共軛乘法。
Parseval's theorem:時域逐項平方總和等於頻域逐項平方總和。
Parseval's theorem N-1 N-1 sum x*(n) y(n) = sum x̂*(n) ŷ(n) where x* = conjugate(x) n=0 n=0 Parseval's theorem (special case) N-1 N-1 sum |x(n)|² = sum |x̂(n)|² where x̂ = fourier(x) n=0 n=0
Spectrum Sensing: Enhanced Energy Detection Technique Based on Noise Measurement
Teager–Kaiser Energy Operator TK[x(t)] = ẋ(t)² - x(t)ẍ(t) TK[x(n)] = x(n)² - x(n+1)x(n-1)
power spectral density estimation
找出特定頻段的功率。
功率就是頻譜單項平方,最後除以訊號長度。就這樣。
energy:能量。每個弦型訊號的振幅的平方和。每個訊號的平方和。 power:功率。能量除以時間。每單位時間的能量。
discrete-time signal E = sum |x̂(f)|² energy Eₓₓ(f) = |x̂(f)|² energy spectral density P = E / N power Pₓₓ(f) = Eₓₓ(f) / N power spectral density (periodogram)
continuous-time signal https://en.wikipedia.org/wiki/Spectral_density +∞ E = ∫ |x̂(f)|² df energy -∞ +∞ = ∫ |x(t)|² dt Parseval's theorem -∞ Eₓₓ(f) = |x̂(f)|² energy spectral density 1 t₀+½T P = lim ——— ∫ |x(t)|² dt power T→0 T t₀-½T 1 +∞ = lim ——— ∫ |xᴛ(t)|² dt let xᴛ(t) = x(t) w(t) T→0 T -∞ w is rectangle window 1 +∞ = lim ——— ∫ |x̂ᴛ(f)|² df T→0 T -∞ |x̂ᴛ(f)|² Pₓₓ(f) = lim ———————— power spectral density T→0 T
然而,針對隨機訊號,事情相當棘手。隨機訊號的傅立葉轉換毫無規律。幸運的是,滿足wss條件的隨機訊號,可以利用Wiener–Khinchin theorem,以自相關函數的傅立葉轉換求得能量譜密度、功率譜密度。仔細考慮自相關函數超出邊界的訊號該如何處理,衍生各種演算法。
針對一般訊號,如果雜訊部分恰是滿足wss條件的隨機訊號,就可以使用這些演算法。
專著《Digital Signal Processing: Principles, Algorithms and Applications》。
Wiener–Khinchin theorem rₓₓ(k) = sum x*(n) x(n+k) autocorrelation function Sₓₓ(f) = r̂ₓₓ(k) energy spectral density
以傅立葉轉換,求得功率譜密度。
Bartlett's method:等分K段,每段M點。每段分別求得功率譜密度,再求平均數。 1 M-1 Pₓₓ⁽ⁱ⁾(f) = ——— sum |x(n) exp(-𝑖2πfn)|² M n=0 1 K Pₓₓ(k) = ——— sum Pₓₓ⁽ⁱ⁾(f) K i=1 Welch's method:一、每段互相交疊一部分。二、窗函數。 1 M-1 Pₓₓ⁽ⁱ⁾(f) = ——— sum |x(n) w(n) exp(-𝑖2πfn)|² M U n=0 1 M-1 where U = ——— sum w(n)² M n=0
以自相關函數的傅立葉轉換,求得功率譜密度。
periodogram:自相關函數。超出範圍不計入。左右對稱。 ⎧ 1 N-m-1 rₓₓ(k) = ⎪ ——— sum x*(n) x(n+k) k = 0 ... N-1 ⎨ N-m n=0 ⎪ ⎩ rₓₓ*(-k) k = -1 ... -(N-1) N-1 Pₓₓ(f) = sum rₓₓ(k) exp(-𝑖2πfk) k=-(N-1) periodogram:自相關函數。超出範圍視作零。左右移位。 ⎧ 1 N-k-1 rₓₓ(k) = ⎪ ——— sum x*(n) x(n+k) k = 0 ... N-1 ⎪ N n=0 ⎨ ⎪ 1 N-1 ⎪ ——— sum x*(n) x(n+k) k = -1 ... -(N-1) ⎩ N n=|k| N-1 Pₓₓ(f) = sum rₓₓ(k) exp(-𝑖2πfk) k=-(N-1) Blackman–Turkey method:一、自相關函數。二、窗函數。 M-1 Pₓₓ(f) = sum rₓₓ(k) w(k) exp(-𝑖2πfk) k=-(M-1)
以autoregressive model的係數,求得功率譜密度。
Yule–Walker method:前向誤差 p Pₓₓ(f) = σ² / |1 + sum a(k) exp(-𝑖2πfk)|² k=1 p where σ² = rₓₓ(0) prod (1 - |a(k)|²) k=1 Burg's method:前向誤差加上後向誤差
自相關函數做特徵分解,求得功率譜密度。
https://huipinghuang.work/MyPDFs/CaponandMUSIC.pdf https://en.wikipedia.org/wiki/MUSIC_(algorithm) https://www.mathworks.com/help/signal/ug/music-and-eigenvector-analysis-methods.html eigenanalysis
onset detection
找到非雜訊的起點。
https://jneuroengrehab.biomedcentral.com/articles/10.1186/s12984-023-01268-8
envelope analysis🚧
envelope detection
找出波形的包絡線。
波形劇烈變動,處處尖峰;波形簡化為包絡線,容易辨認尖峰。
聲音訊號波形的包絡線(時域): 回、正向傅立葉轉換,數列後半(共軛對稱部分)設為0, 逆向傅立葉轉換,取絕對值,乘以2。 回、Hilbert transform,取絕對值。 效果同上。
| assume g(t) x cos(wt) 1. fourier transform | G(f) ⋅ 0.5 ⋅ (delta(w) + delta(-w)) 2. negative frequency: value -> 0 | G(f) ⋅ 0.5 ⋅ delta(w) 3. inverse fourier transform | 0.5 g(t) x e𝑖wt 4. abs | 0.5 |g(t)| 5. multiply 2 | |g(t)|
mode analysis🚧
mode decomposition
https://pmc.ncbi.nlm.nih.gov/articles/PMC7962053/ variational mode decomposition empirical mode decomposition Hilbert vibration decomposition
https://www.powerworld.com/WebHelp/Content/MainDocumentation_HTML/Transient_Stability_Dialog_ResultAnalysisModalAnalysis.htm
signal separation
假定數據是關鍵因子的加權平均數。真實世界有許多自然現象是加權平均數,例如合力就是施力的加權平均數。
例如麥克風錄到一段演奏,嘗試分隔出每種樂器的聲音。
例如相機拍到一個場景,嘗試分隔出光線的來源與強度。
例如RFID收到一段訊號,嘗試分隔出訊號的原始波形。
https://en.wikipedia.org/wiki/Signal_separation independent component analysis wavelet analysis
measure🚧
logarithmic scale
人類對振幅、頻率、能量、……的感受程度不呈線性增長,而是大致呈對數增長。數量級越大越不靈敏。
修改比例尺,使得對數增長變成線性增長,稱作「對數尺度」。
細分三種方式:
一、振幅、頻率、能量、……的座標軸數值取exp。
二、振幅、頻率、能量、……的座標軸間距取exp再倒數。
三、振幅、頻率、能量、……的數值取log。
一與二沒有更動數值,只對圖表動手腳。三更動數值,可用於各種用途,像是編入數學公式、設計指數指標。本文以三為主。
人類慣用十進位,於是取log₁₀,得到位數(減一)。教科書慣用微積分,於是取logₑ,也就是自然對數ln,得到玄學。
順便介紹兩個常見指標。
數量級:取log₁₀。最後再取整數,簡潔呈現結果。
order of magnitude = floor(log₁₀(P))
分貝:給定數值、自訂基準數值,兩者的數量級差異。最後再乘以10,突顯第一位小數(十分位小數)。
⎛ P ⎞ decibel = 10 log₁₀⎜ —— ⎟ = 10 (log₁₀(P) - log₁₀(P₀)) (dB) ⎝ P₀ ⎠
數量級和分貝只是粗略指標,不能直接相加。一切計算必須使用原始數值。據說期末考都會考分貝加法,據說總有同學不會計算。
dynamic range
人類(或儀器)能夠感受的振幅、頻率、能量、功率、……範圍有限。上界數值、下界數值,稱作「動態範圍」。
也有人將上界數值、下界數值,分別換算成數量級,再求得兩個數量級的差異,當作「動態範圍」。
也有人將兩個數量級的差異,還原成原本數值,形成上界數值、下界數值的比值,當作「動態範圍」。
signal similarity measure
兩串訊號的相似程度。有許多種指標。
MSE和ZNCC最常用,其它只是鋪陳。
MAE宛如絕對值誤差。MSE宛如平方誤差。為了讓相似程度不受取樣頻率影響,一律除以訊號長度N。
RMSE宛如直線距離。兩個向量改成了兩串訊號。
ZNCC宛如相關係數。兩個隨機變數(分布)改成了兩串訊號。
mean absolute error 1 N-1 MAE = ——— sum |a(n) - b(n)| N n=0 mean squared error 1 N-1 MSE = ——— sum |a(n) - b(n)|² N n=0 root mean squared error _______________________ | 1 N-1 RMSE = sqrt(MSE) = | ——— sum |a(n) - b(n)|² V N n=0 root mean squared logarithmic error _____________________________________________ | 1 N-1 RMSLE = | ——— sum |log₁₀(a(n) + 1) - log₁₀(b(n) + 1)|² V N n=0
cross correlation N-1 N-1 CC = sum a(n) b*(n) or CC(k) = sum a(n) b*(n-k) n=0 n=0 zero-mean normalized cross correlation cov(a,b) ZNCC = ——————————————— √ var(a) var(b) where mean(a) = sum a(n) / N var(a) = sum |a(n) - mean(a)|² / N cov(a,b) = sum ((a(n) - mean(a))(b*(n) - mean(b*))) / N
signal quality measure
一串訊號的品質好壞程度。有許多種指標。
這些指標,大家習慣再換算成分貝。
signal-to-noise ratio 訊噪比 power(signal) sum |a(n)|² SNR = ————————————— = ——————————— power(noise) sum |w(n)|² where â = fourier(a) energy(a) = sum |â(n)|² = sum |a(n)|² power(a) = energy(a) / N peak signal-to-noise ratio 峰值訊噪比 ENERGY_RANGE |R|² PSNR = —————————————————— = —————————————————————— MSE(signal, noise) sum |a(n) - w(n)|² / N where range of signal = [-R, +R] range of energy of signal = [0, |R|²] fluctuation of energy of signal = |R|² - 0 = |R|²