發表文章

DSP筆記3_使用matplotlib練習繪製連續時間訊號子圖做訊號不同頻率比較

圖片
  測試程式 import numpy as np import matplotlib.pyplot as plt t = np.arange( 0 , 1 , 0.01 ) xt1 = np.cos( 2 *np.pi* 3 *t) xt2 = np.cos( 2 *np.pi* 5 *t) xt3 = np.cos( 2 *np.pi* 7 *t) xt4 = np.cos( 2 *np.pi* 9 *t) #subplot(row,column,繪製圖表個數) plt.subplot( 4 , 1 , 1 ) plt.plot(t,xt1) plt.subplot( 4 , 1 , 2 ) plt.plot(t,xt2) plt.subplot( 4 , 1 , 3 ) plt.plot(t,xt3) plt.subplot( 4 , 1 , 4 ) plt.plot(t,xt4) plt.show()

DSP筆記2_使用 NumPy練習繪製連續時間訊號正弦波(Sine)_餘弦波(Cosine)_跟離散時間訊號繪製_stem用法

圖片
  連續時間正弦波-數位取樣訊號 從 0 秒取樣到 0.999 秒,每隔:0.001秒取一個樣本。 plt.plot(t, xt)會把點連起來,像連續波形。 程式碼 import numpy as np import matplotlib.pyplot as plt t = np.arange( 0 , 1 , 0.001 ) #print(t) xt = np.sin( 2 *np.pi* 3 *t) plt.plot(t, xt) plt.title( "Sine Wave" ) plt.xlabel( "Time" ) plt.ylabel( "Amplitude" ) plt.show() xt = np.cos( 2 *np.pi* 3 *t) plt.plot(t, xt) plt.title( "Cosine Wave" ) plt.xlabel( "Time" ) plt.ylabel( "Amplitude" ) plt.show() 正弦波最標準的數學式通常寫成: 符號 A : 振幅 Amplitude f : 頻率 Frequency ,每秒完成幾個週期。 t : 時間 Time  ϕ : 初始相位 Phase 2πf : 角頻率,圓的一整圈是:360度,而在數學上通常不用度數,而使用「弧度 radian」。 36 0 ∘= 2π radians 對照式子可推得各參數分別如下 振幅=1 訊號頻率=3 Hz ,代表一秒鐘有 3 個週期。由於時間剛好介於一秒,因此會看到三個完整的正弦波 初始相位=0 角頻率=6π rad/s t = 0~0.999 秒 而餘弦波也依樣畫葫蘆。 若固定在一個 3 Hz 正弦波,於不同取樣間隔下,離散取樣點會有什麼差異。 左側是用0.001間隔密度採樣。也就是在一秒鐘內對 3 Hz 正弦波取 1000 點。 右側則用0.01間隔密度採樣,取樣間隔變大了 10 倍。每秒只取 100 個樣本。 stem() 很常用來表示離散時間訊號,每一根垂直線代表「一個取樣值」。 程式碼 import numpy as np import matplotlib.pyplot as p...

ObsPy和scipy去趨勢的API介紹

  在之前學習筆記探討過時間序列資料集可能會隱含趨勢,所謂的趨勢就是序列資料隨著時間持續增加或減少的現象。 通常在進行時間序列預測或辨識、建模之前去趨勢會對評估更有幫助。 obspy.core.trace.Trace.detrend https://docs.obspy.org/packages/autogen/obspy.core.trace.Trace.detrend.html#obspy.core.trace.Trace.detrend 在深入了解趨勢的課題之前,先回顧「線性迴歸」與「多項式迴歸」。 線性迴歸(Linear Regression) 適用於簡單線性資料集的擬合直線。如果資料點的散佈形狀近似直線,則資料為線性。 線性趨勢線通常會呈現以固定趨近等比的穩定變化間隔增減。 多項式迴歸(Polynomial regression) 是線性迴歸的延伸,其將依變數與自變數之間的關係建模為 n 次多項式。多項式趨勢線是一種曲線,適合擺動不定的資料使用,多項式的冪次可由資料波動的次數或曲線彎曲點 (波峰和波谷) 的個數決定。 因此二階多項式趨勢線通常僅有一個波峰或波谷。三階多項式趨勢線通常有一個或兩個波峰或波谷。 Scipy提供detrend方法 在Scipy提供detrend方法,預設若無指定type會採用linear線性最小平方法擬合方式或也可以指定constant然後用mean來做去趨勢。 Remove linear or constant trend along axis from data. https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.detrend.html#scipy.signal.detrend obspy.signal.detrend 封裝了預設有三種detrend方法 定義在兩個模組中 第一個模組 obspy.signal.detrend https://docs.obspy.org/packages/autogen/obspy.signal.detrend.html 1.obspy.signal.detrend.simple https://docs.obspy.org/packages/autogen/obspy.signal.detrend.s...

淺談濾波器分類、過度帶_Butterworth Filter(巴特沃斯濾波器)

圖片
  https://www.baiwagopluscafe.co/pages/coffee-trivia-coffee-trivia-the-invention-of-filter-paper 咖啡濾紙會讓較小的顆粒通過,同時攔住較大的顆粒。 Filtering (濾波) Filtering 是一個選擇或抑制訊號中某些Frequency Components(頻率成分)的過程。 濾波絕大部分情境會用於抑制Noise(雜訊),此方法若要有效則取決於訊號的頻譜跟雜訊頻譜是否有所差異。 Digital Filter (數位濾波器)做的事情與此類似,但處理方式更加精細。Digital Filter 可以讓訊號中的某些頻率成分通過;就像是咖啡濾紙一般,只不過「頻率」在這裡扮演的是「顆粒大小」的角色。 Digital Filter 不只是單純決定某個頻率「通過」或「被攔截」。它還可以根據實際功能需求,對每一個頻率成分進行不同程度的Attenuate(衰減)或Suppress(抑制)。使得數位濾波器能夠塑造或更改訊號的Frequency Spectrum(頻譜)。 PassBand(通帶):濾波器允許訊號通過的頻率 StopBand(阻帶):濾波器會擋掉訊號通過的頻率 (理想)濾波器分類->實務上不可能做到,現實中不是非黑即白。 https://blricrex.hypotheses.org/filtering-introduction 1.低通濾波器(LowPass Filter): 讓 低於截止頻率(Cutoff Frequency) ω c ​ 的頻率通過,並抑制(或阻擋) 高於 ω c ​ 的頻率。 可讓低頻訊號通過,不過存有一個臨界頻率,一旦超過此頻率,訊號就進到阻帶。高頻訊號就無法通過。 2.高通濾波器(HighPass Filter):抑制 低於截止頻率 ω c ​ 的頻率,並讓 高於 ω c ​ 的頻率通過。 只允許頻率高於截止頻率的訊號通過。 3.帶通濾波器(BandPass Filter): 讓位於指定頻率範圍內的頻率通過,也就是介於 ω 1 ​ 與 ω 2 ​ 之間的頻率;而低於或高於此頻帶範圍的頻率則會被抑制。 結合低通和高通濾波器特性,具有一個特定且有限的頻帶,訊號可以通過。而在低頻跟高頻範圍也都存在阻帶,因為帶通濾波器有兩個截...

Python透過Scipy的convolve實踐Sliding Window Detrend

圖片
  一般數位訊號如果出現某種逐漸遞增、遞減的趨勢 通常都需要做一個所謂去趨勢化(detrend)的前置處理。 scipy內建的detrend函數(scipy.signal.detrend) https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.detrend.html 是採用「簡單迴歸法」(最小平方法的線性迴歸)的移除趨勢方法 從時間序列資料中移除趨勢成分的函數,透過執行線性迴歸(嚴格來說是簡單迴歸)來移除趨勢。 演算法步驟 步驟 1:計算線性趨勢 針對資料使用最小平方法執行線性迴歸,也就是以直線近似資料的趨勢。 透過線性迴歸,可取得表示資料趨勢之直線的斜率與截距。 步驟 2:移除趨勢 將計算出的線性趨勢(直線)從原始資料中扣除。 如此一來,便可從資料中移除長期變動成分,僅保留雜訊成分。 和這次要實作的sliding window 方法不同 以下是藉由scipy.signal內建的convolve函數實作的滑動視窗去趨勢法 https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve.html#scipy.signal.convolve import numpy as np import matplotlib.pyplot as plt from scipy.signal import convolve # ========================================== # 1. 產生模擬訊號 (弦波 + 向上飄移的趨勢 + 雜訊) # ========================================== t = np.linspace( 0 , 10 , 150 ) original_trend = 0.5 * t # 緩慢向上的線性趨勢 signal_data = np.sin( 2 * np.pi * 1.0 * t) + original_trend + np.random.normal( 0 , 0.2 , 150 ) # 2. 執行滑動視窗去趨勢 (使用卷積法) # ==================...

人工智慧金融投資決策_ Binomial Tree Pricing

圖片
One-Period Binomial Model 二項樹(Binomial Tree)二項式定價模型 期權的二項式定價模型是由Cox, Ross and Rubinstein在 1979 年首次提出的。 是一種常用的方法,用來近似股票、選擇權或其他資產價格的變動。 二項樹是一種圖形表示方式,用來呈現資產在存續期間內,股票價格可能遵循的各種不同路徑。 在進行選擇權定價時,其基本假設是股票價格遵循隨機漫步(Random Walk)。 使用二項式樹時的主要假設包括利率保持不變、沒有股息發放,以及不存在交易成本或稅金。此模型最適用於期限較長或涉及有股息支付的證券的期權定價。 使用二項式樹來計算價格的過程會比Black Scholes還來的慢。 假設一個經濟體情境 屬於一個無風險債券(risk-free bond),其無風險利率為 12%。 一檔股票,目前價格為 20 美元。 三個月後,股票價格將會是 22 美元或 18 美元。 將股票價格簡化為要馬上漲、要馬下跌 我們要將三個月到期的call option price去定價,履約價為21 當三個月到期時股票價格漲到22元,這時候call price價值就是1元,此時就會履約。 若未來股票下跌到18元,此時call price價值就是0元,則不履約。 在每一個時間步驟中,股票價格都有某個特定機率上漲某個百分比幅度,也有某個特定機率下跌某個百分比幅度。 如果我們能建立一個投資組合(Portfolio),使其報酬能夠複製選擇權的到期損益(Replicate the Payoff of an Option),那麼在市場不存在套利機會的情況下 選擇權價格=複製投資組合的價格 也就是說,如果「股票+無風險債券」組成的投資組合,未來不論股價上漲或下跌,都能產生 和某個選擇權完全相同的損益,那麼今天這兩者的價格就必須相同;否則市場上就會出現無風險套利機會。 Binomial Tree Option Pricing Formula 假設要讓投資組合變成無風險投資組合 也就表示在「上漲」與「下跌」兩種情況下,投資組合的最終價值完全一樣 這個 Δ 就是所謂的 Delta 避險比率(hedge ratio)。 假設無風險利率為 r ,由於這個投資組合已經沒有風險,因此它應該只能賺取 無風險利率 。 到期時投資組合價值折現回今天為: 因此目前投資...

Monte Carlo Simulation_求圓周率π

圖片
  蒙特(地)卡羅 模擬 是科學計算中最重要且最普遍的數值方法之一。利用電腦模擬一個理想環境,然後利用亂數產生大量隨機狀況,藉以探討許多難以進行實際試驗的理論。 最早應用於曼哈頓計畫(Manhattan Project),之後也被用於氫彈的研發。 後續時常用在經濟學、物理學(量子、熱力)、機器學習等領域 蒙地卡羅是摩納哥親王國最著名的一區,以豪華的賭場聞名於世。 20世紀40年代,在科學家馮·紐曼、斯塔尼斯拉夫·烏拉姆、尼古拉斯·梅特羅波利斯三位科學家在洛斯阿拉莫斯國家實驗室為核武器計劃工作時,發明了蒙地卡羅方法。 會取這個名稱,是因為烏拉姆的叔叔在摩納哥的蒙地卡羅賭場輸了很多錢。 1940年代美國研發核子武器時,採用電腦模擬進行爆炸威力研究,這個方法運用到機率及亂數來模擬中子碰撞所產生的能量,頗有賭博的意味,所以就用「蒙地卡羅」來命名。 優點 廣泛應用於 量化金融(Quantitative Finance) ,近年隨著 GPU 的發展而更加普及。 當評價問題中包含大量隨機因素,多到無法直接使用一般數值方法進行評價時,蒙地卡羅模擬特別有用。 當標的變數的機率分布較為複雜,使得直接求解相當困難時,也適合使用蒙地卡羅模擬。 適合處理**報酬取決於標的資產價格路徑(Path-dependent)**的金融商品。 缺點 使用蒙地卡羅方法評價美式選擇權(American Options)並不容易,雖然仍有方法可以做到。 計算效率相對較低,通常需要進行大量模擬,才能使選擇權價格逐漸收斂到較穩定的結果。 求圓周率π 圓的周長和其直徑的比率,約等於3.14159265358979323846264.... 它在18世紀中期之後一般用希臘字母 π 來表示 中國南宋朝數學家祖沖之,曾經用幾何方法將圓周率計算到小數點後7位數字。因此,數學界又將圓周率敬稱祖率。 測試程式碼(原子分布狀態模擬10000個點) import numpy as np import pylab as plt batch = 10000 #隨機產生 10000 個二維座標點 (x, y) #其中 x、y 都介於 0~1 之間,最後畫成散佈圖(Scatter Plot)。 #uniform(平均分布)->位於0~1之間機率都是一樣的 xs = np.random.uniform...