signal🚧

signal(time series)

「訊號」就是一串數字、一個函數。

訊號的分類

時間是否連續:離散時間訊號、連續時間訊號。

數值是否連續:數位訊號、類比訊號。

訊號學   丨數學    丨函數圖形
一一一一一一十一一一一一一十一一一一一一一一一一一一
離散時間訊號丨數列    丨橫軸離散
連續時間訊號丨連續函數  丨橫軸連續
一一一一一一十一一一一一一十一一一一一一一一一一一一
數位訊號  丨離散數列  丨縱軸離散(導致橫軸離散)
類比訊號  丨實數連續函數丨縱軸連續(導致橫軸連續)
signal processing      | mathmatics
-----------------------|-------------------------
discrete-time signal   | sequence
continuous-time signal | continuous function
-----------------------|-------------------------
digital signal         | discrete sequence
analog signal          | real continuous function

經典的訊號

脈衝:脈衝函數、矩形函數、三角形函數、高斯函數。

波:脈衝波、方波、三角波、弦波。

漸變:步進函數、斜坡函數、sigmoid函數、logistic函數。

調變:阻尼訊號、調幅訊號、調頻訊號、調相訊號。

https://www.powerworld.com/WebHelp/Content/MainDocumentation_HTML/Transient_Stability_Dialog_ResultAnalysisModalAnalysis.htm

隨機運動:Wiener過程、Ornstein–Uhlenbeck過程。

雜訊:高斯雜訊、白雜訊。

訊號的理論

訊號的相關知識,分散於三個主題。

signal analysis:極短時間訊號分析,尋找特徵。精髓是傅立葉轉換。將訊號視作週期函數,將訊號拆解成多個弦波疊加,分別找出頻率、振幅、相位,作為特徵。主要用於工程學,例如震動分析、結構分析、音控。

time series analysis:極長時間訊號分析,尋找趨勢。精髓是迴歸與平滑化。精簡訊號細節,以便預測走向。主要用於社會科學。例如市場波動、氣候變遷、歷史演變。

digital communication與analog communication:轉換訊號,以便傳輸訊號。精髓是調頻、調幅、調相,將傳輸介質的負面影響盡量降低。主要用於通訊工程,例如無線網路、衛星導航、矽光子。

本站以三個網頁分別介紹這三個主題。

訊號的應用

訊號的相關知識,大量用於下面四個主題:

radar:雷達。偵測大氣中、太空中、水中的特定物理現象。用於軍事偵察、氣象觀測、飛機與飛機場、汽車與停車場。高性能雷達是戰略貨品,一般民眾接觸不到。

antenna:天線。發射訊號到大氣中、太空中、水中,以及從這些地方接收訊號。用於手機、筆電、交通工具、路燈、手錶、家電、大門保全、基地台、Wi-Fi分享器。日常生活到處都有天線,一般民眾察覺不到。

video:影像。線上影片直播、有線電視機上盒,大家應該沒少見過。4K超高畫質、HDMI,大家應該沒少聽過。

audio:聲音。歌曲、錄音、樂器、音響、耳機、手機通話。

四個主題各自都有專業知識,各自都有獨特的演算法。

periodic signal🚧

periodic signal

「週期訊號」。每隔固定時間就會重複的訊號。

數學家稱作週期函數。工程師稱作波。

period:週期。開始重複的時間。

多串週期訊號疊加,仍是一串週期訊號,週期是最小公倍數。

一串週期訊號分解成多串週期訊號,此處不討論。

maximum / minimum / peak / foot:最大值、最小值、峰、谷。全域極值、局部極值。

sinusoidal signal

「弦型訊號」。訊號呈現正弦函數、餘弦函數、歐拉公式。

數學家稱作弦型函數。工程師稱作弦波。

弦型訊號是週期訊號的重要特例。請見本站文件「wave」。

frequency:頻率。週期的倒數。一單位時間的訊號重複次數。

週期訊號,倒數沒有任何意義。弦型訊號,倒數才有意義。

倒數源自弦波。週期的倒數恰好是弦波一單位時間的振動次數。

amplitude:振幅。弦型訊號高低範圍的一半。

週期訊號,一半沒有任何意義。弦型訊號,一半才有意義。

一半源自弦波。高低範圍的一半恰好是弦波數學式子之倍率。

phase:相位。弦型訊號的初始高度。

大家不採用餘弦函數的輸出數值,而是採用餘弦函數的輸入數值。輸出數值是長度、輸入數值是角度,因此相位是角度。

spectral analysis

「頻譜分析」。一串週期訊號分解成多串週期訊號的加權總和,求得各串週期訊號的權重。

數學家稱作調和分析。

Fourier analysis:傅立葉分析。利用傅立葉轉換,一串週期訊號分解成多串弦型訊號,求得各串弦型訊號的頻率、振幅、相位。

frequency spectrum:頻譜。上述結果畫成兩個函數圖形:橫軸是頻率,縱軸是振幅、相位。分別稱作振幅頻譜、相位頻譜。

wavelet analysis:小波分析。利用小波轉換,一串週期訊號分解成多串自行設定的週期訊號,求得各串週期訊號的權重。

wavelet spectrum:小波頻譜。上述結果畫成函數圖形:橫軸是小波編號,縱軸是能量。能量就是平方和。

週期訊號的主角是週期與峰谷。弦型訊號的主角是頻率、振幅、相位。因為大家經常使用傅立葉轉換將週期訊號分解成弦型訊號,所以週期訊號的敘事主角變成頻率、振幅、相位。

short-time spectral analysis

「短時間頻譜分析」。利用滑動視窗,一串長訊號拆成多串短訊號,每串短訊號各自實施頻譜分析。

現實世界的某些訊號,在極短時間範圍之內,幾乎就是週期訊號。週期訊號才能做頻譜分析。

frame:框。一串短訊號,其長度固定。

框的大小,必須足夠窄。以便形成週期訊號;也必須足夠寬。至少囊括最大週期。框的大小,實務上是1024翻倍或折半,為了實施快速傅立葉轉換。

框的位置,實務上離散、理論上連續。框的位置,實務上是前後緊鄰或前後重疊,為了頻譜們能夠平滑連續。

spectrogram:時頻譜。一串頻譜。追加時間軸。

scalogram:量圖。一串小波頻譜。追加時間軸。

數學、物理學,總是預設能夠得到特定時間點(瞬間)的頻率、振幅、相位。計算學、訊號學無這款好空事志。計算學、訊號學只能得到特定時間範圍(一段時間)的頻率、振幅、相位,並且假裝它是特定時間點的頻率、振幅、相位。

週期訊號的分析

週期訊號的分析,大家習慣分為三類:

time domain analysis:時域分析。使用了原始訊號。經典主題諸如卷積核、共相關函數、時域濾波器。

frequency domain analysis:頻域分析。使用了頻譜。經典主題諸如轉移函數、功率譜密度、頻域濾波器。

time–frequency analysis:時頻分析。使用了時頻譜。經典主題諸如頻率追蹤、頻譜包絡線、特徵模態。

peak analysis🚧

peak detection

找到週期訊號的尖峰。

擷取一段訊號,以此判斷極值。這段訊號長度必須涵蓋一個週期,才能判斷極值。

一、消除鋸齒:
 回、時域濾波器:k點平均數、k點中位數。
 回、頻域濾波器:刪除高頻。
二、尋找極值:中央高、兩側低。
三、估計峰尖:極值前後,三點做拋物線內插,求出拋物線頂點。

peak continuation

找到頻譜的尖峰。

尖峰隨著時間連續變化。追蹤每個時刻的尖峰位置。

phase analysis🚧

phase detection

找到弦型訊號的初始高度。

利用period detection,進一步將移位換算成相位。

periodicity analysis🚧

period detection / frequency detection

找到週期訊號的週期。進一步將週期換算成頻率。

擷取一段訊號,以此判斷週期。這段訊號長度必須涵蓋多個週期,才能判斷週期。

弦型訊號:
(1) peak detection
    找到兩個波峰,位置相減得到波長,波長倒數得到頻率。
(2) zero-crossing rate (ZCR)
    波形穿越零的次數。
週期訊號:
(1) autocorrelation function (ACF)
    嘗試各種移位,找到點積最大值。
    點積:對應項相乘、所有項加總。
(2) average magnitude difference function (AMDF)
    嘗試各種移位,找到L¹-norm誤差最小值。
    L¹-norm誤差:對應項相減、各項取絕對值、各項加總。
(3) cumulative mean normalized difference function (YIN)
    嘗試各種移位,找到L²-norm誤差除以累積誤差的最小值。
    L²-norm誤差:對應項相減、各項平方、各項加總。
(4) hybrid
    多種方法併用。例如ACF / (AMDF + 1.0)找最大值。

訊號學家胡亂取名。名稱非常奇葩。

frequency tracking

找到頻譜的尖峰。

頻率隨著時間連續變化。追蹤每個時刻的頻率高低。

spectrum analysis🚧

Fourier transform

波形分解成一群弦波,頻率為整數倍。

數學理論請見本站文件「convolution」。

解讀方式請見本站文件「wave」。

上面兩個文件需要大學數學作為背景知識,不太容易上手。這裡使用中學數學解釋傅立葉轉換。

一、數字的倍率:請問5是2的幾倍?請求得倍率。

答案5 / 2 = 2.5。

二、數列的倍率:請問(3,2,5,6,7)是(1,2,1,2,1)的幾倍?

對應數字的倍率都不一樣,該怎麼辦?那就取平均數吧。

答案(3/1 + 2/2 + 5/1 + 6/2 + 7/1) / 5 = 3.8。

三、複數:請問(3,2,5,6,7)是(𝑖,-𝑖,𝑖,-𝑖,𝑖)的幾倍?

答案(3/𝑖 + 2/(-𝑖) + 5/𝑖 + 6/(-𝑖) + 7/𝑖) / 5 = -1.4𝑖。

四、等距取樣:不是數列a[n],而是函數f(t),那就取幾個函數點吧。間隔保持相同,一方面看著舒心,一方面數學性質漂亮。

其中一種取樣方式:範圍[0,1),頭⁰⁄₅,尾⅘。頭靠左、頭尾不重複。

答案(3/f(⁰⁄₅) + 2/f(⅕) + 5/f(⅖) + 6/f(⅗) + 7/f(⅘)) / 5。

五、複弦波:一個函數exp(𝑖t),作為除數,作為基準。

傅立葉轉換的取樣方式:範圍[0,2π),頭2π⋅⁰⁄₅,尾2π⋅⅘。頭靠左、頭尾不重複、頭尾循環。

答案(3/exp(𝑖⋅2π⋅⁰⁄₅) + 2/exp(𝑖⋅2π⋅⅕) + 5/exp(𝑖⋅2π⋅⅖) + 6/exp(𝑖⋅2π⋅⅗) + 7/exp(𝑖⋅2π⋅⅘)) / 5 ≈ -0.6236 + 1.0686𝑖。

六、傅立葉轉換:總共N種複弦波,求得N種倍率。N種複弦波是exp(𝑖nt),n分別代入0到N-1。

七、函數圖形:複弦波的頻率都不同。改用頻率指稱複弦波。總共N種頻率,求得N種倍率。

八、N:N設定成訊號長度,為了製造出逆向轉換。N既是訊號長度、亦是複弦波數量。

九、正規化:回顧一下倍率的平均數。平均數需要除以N。

工程師,正向轉換不除以N、逆向轉換才除以N。現在不做,挪到以後才做,變成技術債。

數學家,正向轉換除以sqrt(N)、逆向轉換除以sqrt(N)。兩邊均勻分配,合起來就是除以N。

Fourier transform的數學性質

振幅與相位:N種倍率分別代表N種複弦波的振幅縮放比例、相位偏移差距。

複數乘法=長度相乘&角度相加。
複弦波乘以倍率=振幅縮放&相位偏移。

疊加原理:N種複弦波,等距取樣、乘上倍率、通通相加,得到原本數列。

線性代數。傅立葉矩陣是對稱矩陣。

輸入輸出對應:對調輸入輸出,對應依然成立。

餘弦-脈衝      cos(2πat) = δ(f-a) + δ(f+a) 
矩形-正規正弦    rect(-t, +t) = sinc(f)
三角形-正規正弦平方 tri(-t, +t) = sinc²(f)
高斯         normal(μ, σ) = normal(μ, 1/σ)
絕對值平方根倒數   1/sqrt(abs(t)) = 1/sqrt(abs(f))

運算對應:對調輸入輸出,對應依然成立。

加法-加法   a + b = â + b̂
倍率-倍率   a ⋅ k = â ⋅ k
乘法-卷積   a × b = â ∗ b̂
卷積-乘法   a ∗ b = â × b̂
微分-角加速度 a′ = â ⋅ 𝑖2πf    d/dt a(t) = 𝑖2πf ⋅ â(f)
角加速度-微分 a ⋅ 𝑖2πt = â′    𝑖2πt ⋅ a(t) = d/dt â(f)
點積      ⟨a,b⟩ = ⟨â,b̂⟩    ∑ a(t)b(t) = ∑ â(f)b̂(f)
平方和     ‖a‖² = ‖â‖²      ∑ |a(t)|² = ∑ |â(f)|²

傅立葉轉換採用等距取樣與倍率平均數。你也可以發明其他方式,然後挖掘各種數學性質,最後找到一個數學問題當作應用。這樣大概就可以獲得阿貝爾獎了。

spectrum

傅立葉轉換,輸出數列有N個複數,可以畫成函數。一般不畫實部與虛部,而是畫長度與角度,具有特殊意義。

這N個複數的長度畫成函數,稱為「振幅頻譜」。

這N個複數的角度畫成函數,稱為「相位頻譜」。

兩者合稱為「頻譜」。

頻譜的左側到右側,是低頻到高頻。

附帶一提,當輸入數列皆是實數,則輸出數列將共軛對稱:長度相等、角度變號。教科書為了讓圖片美觀,經常循環移位令中央為低頻、畫成折線圖、振幅取log10。讀者要注意!

我們可以運用正向傅立葉轉換分解一個波,運用逆向傅立葉轉換合成一個波,運用頻譜解讀一個波。

我們甚至可以改造一個波。一個波實施正向傅立葉轉換,調整頻譜的振幅和相位,再實施逆向傅立葉轉換。

凡是學習科學的人,都有必要瞭解頻譜!各種物質的振動或振盪,皆可求得頻譜。例如震譜是震波的頻譜,光譜是光波的頻譜,聲譜是聲波的頻譜。世間萬物皆有譜,應用無限廣泛。

解讀頻譜

範例:一串實數數列,16個數字,實施傅立葉轉換。

起點是1,平穩振動1次,振幅為1,形成cos波:對應傅立葉轉換的一倍頻率波,頻譜第一點的振幅是8、相位是0,其餘的振幅和相位是0。

起點調成0,也就是相位調成-π/2:依然對應傅立葉轉換的一倍頻率波,振幅依舊,相位是-π/2。

平穩振動調成2次:對應傅立葉轉換的兩倍頻率波,頻譜第二點的振幅是8、相位是-π/2,其餘的振幅和相位是0。

振幅調成2:振幅變兩倍。

振動基準從0調成1:對應傅立葉轉換的零倍頻率波,其功效是數列總和,頻譜第零點的振幅變16。

頻譜的缺點(一)

問題來了。平穩振動1.5次,頻譜如何?

你可能馬上聯想到「加權平均」的概念,第一點和第二點有振幅,振幅各半。

但是事實並非如此。1.5倍,頻譜呈現「人」型,所有頻率皆有振幅,漏得到處都是。這個現象稱作「spectral leakage」。

這個現象有兩種解讀:

一、1倍和2倍頻率波,疊加之後,結果是1倍,不是1.5倍。更明確來說是最大公因數。

傅立葉轉換的0倍頻率波到N-1倍頻率波,皆無法組合出1.5倍。只好湊合各種頻率,盡量趨近1.5倍。

二、離散版本的傅立葉轉換,輸入輸出是循環數列。1.5倍,循環之後,其實不是平穩的振動,因而產生許多高頻波。

當振動次數不是整數次、頻率不是整數倍,那麼傅立葉轉換無法精準量測!這是重大缺點!

window function

然而數學家尚未發明更好的方式。當今主流仍是傅立葉轉換。

為了克服spectral leakage這個重大缺點,數學家想出了「窗函數」。

原本數列,乘上一個窗函數:中央高、兩端趨近零的數列。如此令原本數列左右兩端連續,抑制頻譜多餘振幅。

窗函數非常多種,功效略有差異。請讀者自行研究。

window function的快速演算法

傅立葉轉換,有時候輸入稱作「時域time domain」、輸出稱作「頻域frequency domain」,呼應傅立葉轉換的功能:把波(時間軸)表示成頻譜(頻率軸)。

時域乘法等於頻域循環卷積。數列與窗函數相乘,等於數列與窗函數在頻域的循環卷積。

窗函數,多由cos波組成;窗函數在頻域,只有少數幾點有值。例如Hann窗,從時域轉頻域,只有三點有值。

因此,與其在時域套用窗函數,不如在頻域套用窗函數。過程非常簡單:每個值減去兩側的值(相位差不多是π),附帶權重。這揭露了窗函數的真正功效──頻譜之中,平者更平,尖者更尖。

最後額外補充一下。連續版本的傅立葉轉換,窗函數頻譜,外觀是一個尖峰。取abs和log,外觀是一個大圓丘(main lobe),附帶連綿小矮丘(side lobe)。很多資工系老師上課只教連續版本,但是我們根本不會用到連續版本!

F = FourierTransform[HannWindow[x], x, w] Plot[F, {w, 0, +70}, PlotRange->{-0.05,+0.2}, Axes->None] F = FourierTransform[HannWindow[x], x, w] Plot[F, {w, 0, +70}, PlotRange->{-0.001,+0.001}, Axes->None] F = Abs[FourierTransform[HannWindow[x], x, w]] LogPlot[F, {w, 0, +70}, Axes->None]

頻譜的缺點(二)

當波形不是完美的sin波,那麼傅立葉轉換無法精準量測!這是重大缺點!

目前無解。自己保重。

頻譜的缺點(三)

聲音波形經常疊加。舉例來說,兩個頻率不同的音叉,同時敲擊,耳膜感受到的振動,差不多就是兩個sin波相加。更明確來說是兩個sin波的加權總和。

傅立葉轉換是線性函數。換句話說,輸入數列們的加權總和,經過傅立葉轉換,等於輸出數列們的加權總和;但是不等於頻譜們的加權總和!

輸出數列是複數。複數加法是向量相加,複數倍率是向量伸縮。向量相加不等於長度相加、角度相加。(唯一例外:所有波都是整數次的平穩振動。因為頻譜幾乎都是零。)

多個波形疊加,不會正確反映於頻譜!這是重大缺點!

然而大家仍用頻譜分解頻率,無法可管。自己保重。

ListPlot[Table[Sin[x*2*Pi/16], {x, 0, 15}]] ListPlot[Abs[Fourier[Table[Sin[x*2*Pi/16], {x, 0, 15}]]], PlotRange->{0, 2}, Filling->Axis] ListPlot[Arg[Fourier[Table[Sin[x*2*1.5*Pi/16], {x, 0, 15}]]], PlotRange->{-4, +4}, Filling->Axis] ListPlot[Abs[Fourier[Table[HannWindow[(x-16)/32], {x, 0, 31}]]], PlotRange->{0, 2}, Filling->Axis] ListPlot[Arg[Fourier[Table[HannWindow[(x-16)/32], {x, 0, 31}]]], PlotRange->{-4, 4}, Filling->Axis] ListPlot[Table[HannWindow[(x-16)/32], {x, 0, 31}], PlotRange->{0, 1}, Filling->Axis, FillingStyle->Red, PlotStyle->Red, Axes->None] ListPlot[Table[Cos[x*2*Pi/32] * HannWindow[(x-16)/32], {x, 0, 31}]] ListLinePlot[Table[Cos[x*2*Pi/64], {x, 0, 63}]] ListLinePlot[Abs[Fourier[Table[Cos[x*2*Pi/60], {x, 0, 63}]]], PlotRange->{0, 8}] ListLinePlot[Abs[Fourier[Table[Cos[x*2*Pi/60] * HannWindow[(x-32)/64], {x, 0, 63}]]], PlotRange->{0, 8}]

spectrogram

窗函數恰好也能讓頻譜們能夠平滑連續。

順帶一提,短時間頻譜分析可以推廣為連續版本:框的大小無限,框的位置連續。

順帶一提,Gabor發明短時間頻譜分析。Gabor認為最基礎的窗函數是高斯函數。大家稱作Gabor transform。

Gabor transform:
x̂(k,ω) = ∫ x(t) exp(2π(t-k)²) exp(-𝑖ωk) dt

這個數學式子是連續版本,不是離散版本。
大家提到Gabor transform,心照不宣是指連續版本。
畢竟當時沒有電腦。畢竟古人只討論連續函數。

注意到,今人不使用連續版本,只使用離散版本。
即便是離散版本,也不使用高斯函數,只使用其他窗函數。

注意到,連續版本的數學性質不適用於離散版本。
當框的長度不再無限、框的位置不再連續,
許多數學性質都不再具有討論意義。

power analysis🚧

energy detection

找出訊號的能量。能量是訊號平方和。

energy:能量。訊號平方和。
power:功率。每單位時間的能量。訊號平方和除以訊號長度。

根據Parseval's theorem,能量也等於頻譜平方和。一串週期訊號分解成多串弦型訊號,能量是各串弦型訊號的振幅的平方和。

Parseval's theorem:時域共軛乘法等於頻域共軛乘法。

Parseval's theorem:時域平方和等於頻域平方和。

Parseval's theorem:

  sum  { x[n] y[n] } =  sum  { x̂[n] ŷ[n] }
n=0⋯N-1               n=0⋯N-1

Parseval's theorem (special case x = y):

  sum  |x[n]|² =  sum  |x̂[n]|²
n=0⋯N-1         n=0⋯N-1

where x[n] is complex conjugate of x[n]
where x̂ is Fourier transform of x

然而,針對隨機訊號,事情相當棘手。

《Spectrum Sensing: Enhanced Energy Detection Technique Based on Noise Measurement》

power spectral density estimation

找出特定頻段的功率。

energy spectral density:能量譜密度。頻譜各項平方。
power spectral density:功率譜密度。頻譜各項平方除以訊號長度。
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

然而,針對隨機訊號,事情相當棘手。隨機訊號的傅立葉轉換毫無規律。幸運的是,滿足weakly stationary process的隨機訊號,可以利用Wiener–Khinchin theorem,以自相關函數的傅立葉轉換求得能量譜密度、功率譜密度。仔細考慮自相關函數超出邊界的訊號該如何處理,衍生各種演算法。

針對一般訊號,如果雜訊部分恰是滿足weakly stationary process的隨機訊號,就可以使用這些演算法。

專著《Digital Signal Processing: Principles, Algorithms and Applications》。

專著《Spectral Analysis of Signals》。

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  
Pₓₓ⁽ⁱ⁾[f] = ———   sum  |x[n] exp(-𝑖2πfn)|²
             M  n=0⋯M-1

          1
Pₓₓ[k] = ———  sum Pₓₓ⁽ⁱ⁾[f]
          K  i=1⋯K

Welch's method:一、每段互相交疊一部分。二、窗函數。

             1
Pₓₓ⁽ⁱ⁾[f] = ———   sum  |x[n] w(n) exp(-𝑖2πfn)|²
            M U n=0⋯M-1

           1
where U = ———   sum  |w(n)|²
           M  n=0⋯M-1

以自相關函數的傅立葉轉換,求得功率譜密度。

periodogram:自相關函數。超出範圍不計入。左右對稱。

         ⎧  1  
rₓₓ[k] = ⎪ ———    sum   { x[n] x[n+k] }   k = 0⋯N-1
         ⎨ N-m n=0⋯N-m-1
         ⎪ 
         ⎩ rₓₓ[-k]                        k = -1⋯-(N-1)

Pₓₓ[f] =     sum     { rₓₓ[k] exp(-𝑖2πfk) }
         k=-(N-1)⋯N-1

periodogram:自相關函數。超出範圍視作零。左右移位。

         ⎧  1
rₓₓ[k] = ⎪ ———    sum   { x[n] x[n+k] }   k = 0⋯N-1
         ⎪  N  n=0⋯N-k-1
         ⎨ 
         ⎪  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)⋯N-1

Blackman–Turkey method:一、自相關函數。二、窗函數。

Pₓₓ[f] =     sum     { rₓₓ[k] w(k) exp(-𝑖2πfk) }
         k=-(M-1)⋯M-1

以autoregressive model的係數,求得功率譜密度。

Yule–Walker method:前向誤差

Pₓₓ(f) = σ² / |1 +  sum { a[k] exp(-𝑖2πfk) }|²
                   k=1⋯p

where σ² = rₓₓ(0) prod (1 - |a[k]|²)
                  k=1⋯p

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

找到非雜訊的起點。

弦型訊號:
(1) Teager–Kaiser operator
    相鄰三個訊號值的變化快慢。
(2) spectral flux
    前後兩框的頻譜的L²-norm誤差。
週期訊號:
(1) sample entropy

(2) marginal spectrum entropy
    
continuous Teager–Kaiser operator:
TK(x(t)) = |ẋ(t)|² - x(t) ẍ(t)

discrete Teager–Kaiser operator:
TK(x[n]) = |x[n]|² - x[n+1] x[n-1]

針對弦形訊號,運算結果是振幅平方乘以頻率平方。
針對週期訊號,可以大致判斷能量多寡暨頻率多寡。
apply continuous Teager–Kaiser operator
to sinusoid signal:

x(t) = A cos(ωt)
ẋ(t) = -Aω sin(ωt)
ẍ(t) = -Aω² cos(ωt)

TK(x(t)) = |ẋ(t)|² - x(t) ẍ(t)
         = A²ω² sin²(ωt) + A²ω² cos²(ωt)
         = A²ω²
apply discrete Teager–Kaiser operator
to sinusoid signal:

x[n]   = A cos(ωn)
x[n-1] = A cos(ωn - ω)
x[n+1] = A cos(ωn + ω)

TK(x[n]) = |x[n]|² - x[n+1] x[n-1]
         = A² cos²(ωn) - A² cos(ωn - ω) cos(ωn + ω)
         = A² cos²(ωn) - A² (cos²(ωn) - sin²(ω))
         = A² sin²(ω)
         ≈ A² ω²   when ω is small

cos(a-b) cos(a+b) = cos²(a) - sin²(b)
sin⁡(ω) ≈ ω   when ω is small

envelope analysis🚧

envelope extraction

找出波形的包絡線。

波形劇烈變動,處處尖峰;波形簡化為包絡線,容易辨認尖峰。

訊號的包絡線(時域):
(1) Fourier transform
(2) Hilbert transform
envelope detection by Fourier transform:
0. sinusoidal signal          a(t) cos(ωt)
1. Fourier transform          â(ω) ∗ ½ (δ(ω) + δ(-ω))
2. get positive frequency     â(ω) ∗ ½ δ(ω)
3. inverse Fourier transform  ½ a(t) exp(𝑖ωt)
4. get magnitude              |½ a(t) exp(𝑖ωt)| = ½ a(t)
5. multiply 2                 a(t)
envelope detection by Hilbert transform:
0. sinusoidal signal          x(t) = a(t) cos(ωt)
1. Hilbert transform          H{x(t)} = a(t) sin(ωt)
2. Euler's formula            x(t) + 𝑖 H{x(t)} = a(t) exp(𝑖ωt)
3. get magnitude              |x(t) + 𝑖 H{x(t)}| = a(t)
Hilbert transform:
訊號與1/t的卷積。記得避開1/t無限大之處。
效果是波形分解成一群弦波,每個弦波的相位各自移動90°。

fast Hilbert transform:
需要使用快速傅立葉轉換,計算時間更久。

我不清楚為什麼地球人這麼喜歡Hilbert transform。
也許地球人民智未開。

spectral envelope extraction

找出振幅頻譜的包絡線。

振幅頻譜的包絡線(頻域):
(1) LPC spectrum
    聲音訊號實施linear prediction,轉換到頻域。稱作LPC spectrum。
    linear prediction的項數,
    設定成尖峰數量的兩倍(共軛對稱)。pole即尖峰。
    https://ccrma.stanford.edu/~jos/sasp/Spectral_Envelope_Linear_Prediction.html
(2) cepstrum
    振幅頻譜套用low-pass filter。因其具有平滑效果。
    承上,改成取log,並且改成在頻域實施low-pass filter。
    此即cepstrum乘上0或1。
    https://ccrma.stanford.edu/~jos/sasp/Spectral_Envelope_Cepstral_Windowing.html

mode analysis🚧

mode decomposition

一串週期訊號分解成多串訊號,而且是上下振動的訊號。

Fourier analysis:分解成弦型訊號。
wavelet analysis:分解成週期訊號。
mode analysis:分解成上下振動的訊號。
分解成上下振動的訊號:
(1) empirical mode decomposition
    時域。依序擷取週期最高的模態。
(2) variational mode decomposition
    頻域。同時找到每個頻帶的位置。
分解成特殊的上下振動的訊號:
(1) Hilbert vibration decomposition
    時域。假設訊號源自已知模態。依序擷取週期最高的模態。
(2) dynamic mode decomposition
    頻域。假設訊號源自一階線性系統。得以特徵分解。
mode decomposition:
x[n] = u₁[n] + ... + uᴋ[n] + r[n]

x: signal
u: mode
r: residual
Hilbert vibration decomposition:
壹、尋找週期最高的模態u₁[n]:
 一、包絡線。
   (找到週期最高的模態)。
 二、低通濾波器。
   (刪除週期更高的模態。)
 三、擬合自訂模態。
貳、尋找週期次高的模態:
 一、x[n] -= u₁[n]。
 二、同壹。
參、重複步驟壹貳,直到剩餘訊號的能量足夠低。
empirical mode decomposition:

壹、尋找週期最高的模態u₁[n]:
 一、包絡線。
   (找到週期最高的模態)。
 二、訊號減去包絡線中線,以便置中對齊。
   (刪除週期超過訊號長度的模態。)
 三、重複步驟一二,直到形成模態。
   (峰/谷/零的數量必須一致、或者差一。)
 四、為了避免無窮迴圈,
   當先後兩個模態的差異足夠低,立即停止迴圈。
貳、尋找週期次高的模態:
 一、x[n] -= u₁[n]。
 二、同壹。
參、重複步驟壹貳,直到剩餘訊號的能量足夠低。
variational mode decomposition:

0. initialization

   frequency bank: û₁[ω] ... ûᴋ[ω]
   central frequency: ω₁ ... ωᴋ
   Lagrange multiplier: λ

1. update frequency bank uᵢ by Wiener filter

            x̂[ω] - sum ûⱼ[ω] + ½λ[ω]
                   j≠i
   ûᵢ[ω]' = ————————————————————————
                1 + 2α (ω - ωᵢ)²

2. update central frequency ωᵢ by moment

         sum ω |ûᵢ[ω]|²
          ω
   ωᵢ' = ——————————————
          sum |ûᵢ[ω]|²
           ω

3. update Lagrange miltiplier by gradient descent

   λ[ω]' = λ[ω] + α (x̂[ω] - sum ûᵢ[ω])
                           i=1⋯K
   where α is step size

4. convergence check

         ‖ûᵢ' - ûᵢ‖²
    sum  ——————————— < ε
   i=1⋯K    ‖ûᵢ‖²

   where ε is threshold

signal separation

假定數據是關鍵因子的加權平均。真實世界有許多自然現象是加權平均,例如合力就是施力的加權平均。

例如麥克風錄到一段演奏,嘗試分隔出每種樂器的聲音。

例如相機拍到一個場景,嘗試分隔出光線的來源與亮度。

例如RFID收到一段訊號,嘗試分隔出訊號的原始波形。

https://en.wikipedia.org/wiki/Signal_separation
independent component analysis
wavelet analysis

fractal analysis🚧

long-term memory

long-term memory / Hurst exponent / self-similarity 
https://en.wikipedia.org/wiki/Hurst_exponent

singularity spectrum

box-counting dimension
https://en.wikipedia.org/wiki/Minkowski%E2%80%93Bouligand_dimension

singularity spectrum / Hölder exponent / Hausdorff dimension
https://en.wikipedia.org/wiki/Singularity_spectrum

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
MAE = ———   sum  |a[n] - b[n]|
       N  n=0⋯N-1

mean squared error

       1
MSE = ———   sum  |a[n] - b[n]|²
       N  n=0⋯N-1

root mean squared error
                     __________________________
                    |  1
RMSE = sqrt(MSE) =  | ———   sum  |a[n] - b[n]|²
                   V   N  n=0⋯N-1

root mean squared logarithmic error
          ________________________________________________
         |  1
RMSLE =  | ———   sum  |log₁₀(a[n] + 1) - log₁₀(b[n] + 1)|²
        V   N  n=0⋯N-1
cross correlation

CC =   sum   { a[n] b[n] }
     n=0⋯N-1       

CC(k) =   sum  { a[n] b[n-k] }
        n=0⋯N-1

zero-mean normalized cross correlation

           cov(a,b)
ZNCC = ———————————————
       √ var(a) var(b)

where mean(a)  = sum(a) / N
      var(a)   = sum(|a - mean(a)|²) / N
      cov(a,b) = sum((a - mean(a)) (b - 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|²

feature🚧

feature

「特徵」。訊號的特殊指標。

平均數、變異數、偏度、峰度、ANOVA、能量、訊噪比、頻率、週期、過零率、……。

知名工具tsfresh。