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)找最大值。
訊號學家胡亂取名。名稱非常奇葩。
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🚧