over 2 years ago

簡介

訓練目標

以1D為切入點,了解 EEMD 之基本原理,並以 Matlab 語言實作之。

Matlab

完成這份訓練講義之後,預期學習者將會應用到或者學到如何

  • 創造並使用 function
  • 找出資料向量中的極值
  • 使用 interp1 內插出平滑的資料曲線
  • 打造 EMD 引擎
  • 將 white noise 加入資料之中
  • 完成 EEMD 函數

習題

尋找極值函數 findExtrema

在這題當中,我們要學會寫出一個傳入資料向量 data,可以回傳資料中極值的 以及 位置 的函數。以下將分為四個小題進行。

學會如何自定函數

試找尋資料,學習如何創造一個自定函數,或查詢 Matlab 內建教學

doc function

或參考以下範例:

numAdd.m
function y = numAdd(a, b)
y = a + b;

尋找最大值

試寫一個函數 findMax.m,輸入任意長度向量 data 可傳回兩組輸出:

  • 最大值所在的位置 max_ind
  • 最大值的值 max_val

提示: 函數的第一行可能長成這個樣子:

findMax.m
function [max_ind, max_val] = findMax(data)
% coding here

請注意,一串資料可以有多個 local maxima。此題要求的是找出所有的 local maxima,而非僅是資料中的最大值,否則用內建函數 max() 即可達成。

尋找最小值

承上題,找出「所有」最小值 min_val 及其分別之所在位置 min_ind

提示: 試想,是不是將上一題的傳入資料由 data 改為 -data 就可以達成目標了?

尋找所有極值

綜合前面三題所學,請完成一個可以找出所有極值,並分別回傳最大最小值的值與位置的函數 findExtrema.m

findExtrema.m
function [max_ind, max_val, min_ind, min_val] = findExtrema(data)
% coding here

注意: data(1)data(end) 是否也須考慮為「極值」?如果是,其原因為何?

內插曲線

下面這兩題,我們將會利用前一大題所得到的資料,以及 Matlab 內建的 interp1函數,得到 EMD 所需要的「趨勢」曲線。

使用離散資料內插曲線

利用 interp1,將 max_indmax_val內插成一條長度和取樣率皆與 data 相同之「連續」曲線 max_trend
利用 interp1,將 min_indmin_val內插成一條長度和取樣率皆與 data 相同之「連續」曲線 min_trend

注意: max_trendmin_trend的頭尾,都要和 end 一樣(可以想成是 boundary conditions),否則會有些區域沒有定義。

求得「平均」曲線

將上小題的兩條曲線做點對點平均,得到 avg_trend

打造 EMD 引擎

參考 paper 上的演算法,以及上面所練習的技巧與成品,應該已經可以完成 EMD 的引擎。其界面如下:

emd.m
function modes = emd(data, nmode)
% coding here

其中 nmode 是所要求的模態數量。請注意,如果原本的 data 長度是 的話,則得到的輸出資料 modes的大小會是

打造 EEMD 引擎

如果前面的 emd.m 已經驗證完成,那麼接下來就是讓它進化成 EEMD 的時候了。比起 EMD , EEMD 多了下面兩項特色

  • 外加了額外的 white noise 進去
  • 先跑出 N 組各別使用不同的 white noise 所解出來的結果,再一起取平均。

下面我們只拆成兩小題練習,不足之處請直接參閱 paper。

加入 white noise

假定使用者指定一個特定的 white noise 強度 wn_std,我們有兩種方式可以將等效強度的 white noise Wn 加到 data 裡面去,第一種是:

其中 data是求標準差的函數;或者第二種方法

試問:兩種方法何種較優?較劣者,有什麼致命的缺點?

請利用 Matlab 內建的 randn() 完成此題。

完成 EEMD 架構

參考 paper 上的演算法,以及上面所練習的技巧與成品,終於我們可以完成 EEMD 的全面架構。完成品的輸入資料除了 data以及nmode之外,還多了指定 ensemble 數量的 nens 與 white noise 的標準化強度 wn_std。其界面如下:

eemd.m
function modes = eemd(data, nmode, nens, wn_std)
% coding here
 
almost 3 years ago

常見問題

連 LINK 的條件是什麼?

假設你站在 A 點,欲連 B 點,這需要滿足下列條件

  • A 點落在感應範圍內
  • 持有 B 點的 portal key
  • A 與 B 點都處於八隻腳插滿的狀態
  • A 與 B 點之間沒有任何 link 通過,無論藍或綠
  • A 與 B 都不在現有的 CF 內,無論藍或綠

最後一點有時候會誤判,因為手機上的畫面是有點斜斜的透視的,是否有跨過link其實有時候看起來並不準。真正最準確的判斷依據是官方的網頁版地圖,就連地球的曲線都可以正確地表現出來XD

建 CF 的條件是什麼?

假設有 A 、 B 、 C 三個塔,A與B、B與C已連線,且 A 塔站在你感應範圍內,則你必須持有 C 塔的 Portal Key,且A與C符合前一項的條件。
如果要蓋多重三角形,例如 完全屬於 ,則你必須要先完成 ,再完成 反之如果先完成外面的三角形,裡面的三角形會因為違反 link 不能在 CF 內的規則而無法完成 。實際上完成 後,你會發現 的顏色較深。

連 LINK 和建 CF 的獎勵和距離、面積有關嗎?

完全無關。
建 link 成功: 313 AP
建 CF 成功: 1250 AP (實際上會顯示 1563 AP ,因為完成 CF 一定是伴隨著完成 link)
有一個說法說,在已經相連的四邊形裡面拉一條對角線,會「只有」 2813 AP,也就是不足 1563 AP 的兩倍,其實這個觀念是有點錯誤的。實際上完成一個四邊形內的對角線,你得到了兩倍 1250 AP 的量,外加一條 link 的 313 AP 獎勵,所以其實並沒有「打折」喔。

要怎麼申請 Portal ?

會問這個問題的通常是新加入的 iOS 玩家,不過很可惜地,目前 iOS 版尚未開放申請新 Portal。
如果是 Android 的玩家可以參考這篇:
衝Seer 成就?!教你第一次上傳portal 就上手

敵軍的塔可以 HACK 嗎?

當然可以摸(hack)!雖然會被電,不過通常不會損失太多 XM,我覺得是無所謂。此外 HAKC 敵軍的塔可以得到 100 AP;如果 hack 中立或者友軍的塔是沒有 AP 獎勵的。

為什麼「八塔」很稀有?

因為一定要八隻腳都是 L8 才能建造出 L8 的塔,而且每個玩家一人都只能放一隻八腳,所以「八塔」通常會出現在很多人經過的要道上,或者是當地玩家特地召集 L8 以上的玩家一起去蓋的。

為什麼大家都說遊戲從升到 L8 之後才開始?

因為遊戲裡面有分等級的道具都是 L1 到 L8 共分八級,而要升到 L8 以上才能使用 L8 的道具,也就是說要玩到 L8 才能放 L8 的腳、使用 L8 的武器,所以玩到 L8 之後,才算是開始進行完整的遊戲。

要怎麼 recharge ? recharge 有意義嗎?

recharge 可以在下列兩種情況下進行:

  • 塔落在感應範圍內
  • 持有該塔的 Portal Key

其中第二點相當重要,因為這意味著,你人不需要到現場,也可以持續維護塔的(腳的)能量,否則依照遊戲的設定, resonator 每過一天就會減損 15%的能量,那7天過後塔就會自動變回中立了。使用 Portal Key 通常有兩種實用的用途:第一是可以養偏遠地區的塔,這種地方的塔很少人經過,不太會有人去攻打,但是你自己也很少會去;使用遠端的 recharge ,可以一直讓塔保持能量,可以取得連續持有塔的天數的成就 。第二個理由同樣是用在維護偏遠地方的塔,但是目的是在維持重要的 link 和 CF。

為什麼有的塔的腳分佈情況不太一樣?

腳出現的位置,其與塔中心的距離,恰好會等於你放置腳的時候跟塔中心的距離。所以專業的玩家放腳的時候,都會走到讓塔剛好切到自己的感應範圍的邊界的地方。

無法累積AP?無法升級?

請務必到 DEVICE去做SMS簡訊認證。此外用 iPhone 有JB 的人請尋找補丁,否則 Ingress 本身會擋 JB。

小技巧

攻擊要打腳

打敵人的塔的時候,要看的不是塔本身有沒有落在感應範圍,而是它的腳要離你越近越好。尤其是使用 Ultra Strike,因為有效攻擊半徑很小,所一定要接近塔腳。

回收低炮換 XM

當你玩超過 L4 以後,你會發現L1或者L2的炮根本就是廢物。可以先 RECHARGE 把 XM 耗光賺AP,然後把 L1 和 L2 的炮全部回收賺XM。

把腳放在刁鑽的位置

一個塔的八隻腳,都是在地圖上有對應真實位置的。把高級的腳落在離道路較遠的地方,甚至是投影在建築物內部的地方,會讓敵人非常難打到腳;就算打的到攻擊效率也很低。

沒事多充電,多充電沒事

如果你在公車、捷運(高架)、國道客運等高速移動的交通工具上,但是沿途又沒有塔可以hack的話,可以翻開你的 Portal Key 們,看到有能量沒滿的,就按 RECHARGE 把八隻腳都充滿。如果是對你有重要戰略意義的,或者 owner 是你自己的,可以優先充。在高速移動的時候 XM 補充的速度遠比你想像中還要快

冷技巧

長按 HACK 鍵

按住 Portal 頁面的 HACK 可以叫出一個叫做 glyph 的小遊戲,依照 Portal 的等級不同,出現3到5個圖案,然後你要重現這五個圖案。基本上不用追求三個都背起來,其實很努力記起來一個就好,因為只要答對一個,就可以得到 bonus。
請注意,啟動 Glyph 的條件等同於 hack ,也就是如果還在 CD 的話是不能玩 Glyph 的。
如果不小心 HACK 按太久啟動 glyph 的話,可以按右下角的 BYPASS ,會自動跳回普通的 hack 模式。

長按 FIRE 鍵

大家應該都知道在地圖上長按然後往上滑可以啟動 FIRE 選項,不過你可能不知道,長按 FIRE 鍵可以產生額外的攻擊百分比。按住之後會出現同心圓,在圓最小的時候手放掉之後,會開始攻擊。最大可以得到額外 20% 的攻擊量。

善用膠囊

膠囊( capsule)屬於 RARE 等級,不過實際上不難打到,我開始玩兩週就打到了三個。把key放到 capsule 裡面,就可以再打新key了。不過請注意到,即使把東西放在 capsule 裡面,總數還是不能超過2000。

Ingress vs. 世界迷霧

Game 世界迷霧 Ingress
平台 目前僅限 iOS Android 與 iOS
定位方式 僅限 GPS GPS 與 wifi 定位
網路 離線亦可記錄軌跡 需保持網路連線
陣營 Resistance 與 Enlightment
遊戲模式 僅單人 多人
 
almost 3 years ago

之前就有想過要用解析解求一個均勻的圓球的質量投影,但是推半天沒推出來,只好先用MATLAB做出一個3D的volume,再用 sum(V,3)來求投影質量。我知道這樣超白癡的,而且要是球稍微大一點,電腦就記憶體不足當掉給你看了。

剛才突然... 就夢到正確的解析解做法了......

原理

已知圓球球面的公式是\

其中 為一常數,是球面的半徑。

現在我們將其推廣,把球面推廣成球體,則參數 要滿足

其中

所以要快速求出一個球體的質量投影,只要移項還有乘以2就好了,得到:

不過記得要把超出 support 的地方手動設為零,不然可是會出現 complex 的。請直接參考下面的實作程式碼。

MATLAB 實作

sphere_proj.m
function Z = sphere_proj(DIA)

RAD = DIA/2; % radius

x = linspace(-RAD, RAD, DIA);
[X, Y] = meshgrid(x, x);
R = sqrt( X.^2 + Y.^2);
Z = 2 * sqrt( RAD^2 - R.^2 );
Z( R > RAD) = 0;
 
almost 3 years ago

我們group的博後說 Wen Jiang 的 jspr 每次用一陣子都會出error,他只好把linux系統砍掉重裝 @@,我叫他拜託不要再這麼做了!

遇到這個問題,可能會在 terminal 上面看到的錯誤訊息如下:

Traceback (most recent call last):
  File "/home/alanfan101/cryoem/x86_64/EMAN2/lib/EMAN2db.py", line 1289, in put
    self.bdb.put(key,val,txn=txn)
DBPageNotFoundError: (-30985, 'DB_PAGE_NOTFOUND: Requested page not found')
********** Warning: problem writing  ▒U
                                       micrographsq.  to  importMicrograph.py .
Retrying (0/10)
********** Warning: problem writing  ▒U
                                       micrographsq.  to  importMicrograph.py .

或者

Traceback (most recent call last):
  File "/home/alanfan101/cryoem/x86_64/EMAN2/lib/EMAN2db.py", line 1289, in put
    self.bdb.put(key,val,txn=txn)
DBPageNotFoundError: (-30985, 'DB_PAGE_NOTFOUND: Requested page not found')
********** Warning: problem writing  ▒U
                                       micrographsq.  to  importMicrograph.py . Retrying
(9/10)
NOT Writing notes, ppid=-1

解法很簡單

rm -rf ~/EMAN2DB

就這樣。雖然如此可能會把記憶在EMAN2裡面的參數消掉,但是這總比把整個Linux系統打掉重來簡單吧?

 
almost 3 years ago

jspr 是美國普渡大學的 Wen Jiang 教授團隊所開發的單顆粒重組( single particle reonstruction)軟體包,一直以來我同事都是在Windows 上面開 Virtual box ,跑該團隊所提供的 ova 檔案裡面的 linux系統。但是跑顆粒重組本身是很耗能的事情,在虛擬機器上跑效能一定不會太好,所以我今天幫我同事在原生的 linux 系統上弄了一樣的環境給他用。原本以為一切順利,但是最後他要跑最重要的 reconstruction 的步驟的時候,在 terminal 出現了這樣的錯誤:

  File "/home/alanfan101/cryoem/x86_64/jiang/jspr.py", line 1417, in createBTSession
    import libtorrent
ImportError: libboost_system.so.1.53.0: cannot open shared object file: No such file or
directory

查了一下,發現這個libtorrent在軟體解壓縮後的目錄中的cryoem/x86_64/lib64cryoem/x86_64/lib都有,如果使用ldd去查詢,會發現:

[user@linux lib]# ldd libtorrent-rasterbar.so
    linux-vdso.so.1 =>  (0x00007fffd51ff000)
    libboost_system.so.1.54.0 => not found
    librt.so.1 => /lib64/librt.so.1 (0x00007f25a579d000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f25a5580000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f25a527a000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f25a4ff5000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f25a4c61000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003044c00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f25a4a4b000)

嗯,沒錯就是少了這個libboost_system.so.1.54.0。但是 Wen Jiang 的團隊號稱這個 jspr 軟體包,是自給自足,什麼都有啊。於是我去找了他們提供的 ova 映像檔,去查裡面那個可以動的版本,到底是去哪裡找libboost_system.so.1.54.0的。一查,發現居然就在cryoem/x86_6x/lib下面,原來,應該只是忘記在自己的 .bashrc下面 source 他們提供的bashrc設定而已,虛驚一場!

 
almost 3 years ago
  1. 選一個有執行力、可靠的伴郎很重要,簡單來說就是一個會辦活動的人XD
  2. 事前先決定好一個 #hashtag 並且讓大家都知道
  3. 但是無論如何還是要找一個幫大家拍照的攝影師XD
 
about 3 years ago

整理一下四月在工作上遇到的一些開發瓶頸,以及其解法。大部分都是跟linux或者c++有關。

GSL篇

GSL,也就是 GNU Scientific Librarary 是一個號稱可以取代 Numerical Recipe 的科學計算函示庫。

安裝篇

如果是在國網上,不可能取得 sudo 安裝在 /usr/local/lib/,所以要另外找地方放,例如自己開一個 ~/local/。安裝步驟如下

./configure --prefix ~/local/
make
make install

安裝後

附加新的 LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/local/lib/

compile的時候要加上的flag

-lgsl -lgslcblas -lm

MPI 篇

重新載入 .bashrc

以前都以為改完 .bashrc之後要重登才會生效(其實確實也是如此),不過其實有偷吃步,可以直接執行

. ~/.bashrc

就可以重新載入了

LINUX 主機管理篇

我們實驗室自己的機器,不知道為什麼從半年前開始就無法 sudo ,系統說 /etc/sudoers 這個檔案壞掉了。麻煩就麻煩在,因為 sudo 壞掉了,所以要修一定要用 root;但是為了安全因素,我們的機器根本沒有啟用 root ,最後發現可以在開機的時候按住 shift 進入 GRUB menu,然後有 root 模式可以用。講起來好像很容易,不過我們的主機實體是託管在中研院地下三樓的機房裡面,所以還是特地去了三次,才把問題解決。

進到了 root 模式之後,按照系統的錯誤訊息,照理來說執行 chmod 0440 sudoers就好,結果系統又說 file system read-only,靠夭,這是什麼巫術?

mount -o remount,rw /

不要問我這是怎麼辦到的,總之就是 magic!
remount好之後,再跑 chmod 0440 /etc/sudoers即可

另外筆記一下,我發現被限制用 ssh 登入的帳號,也就是只能先用一般帳號登入再su過去的帳號,不能用 screen。

釋放swap

先查詢swap所在地點

swapon -s

假設查出來是 /dev/sda5/,接下來先執行

sync

然後執行

swapoff /dev/sda5/; swapoff /dev/sda5/

大功告成!可以跑top檢查一下是否已經釋放成功。

 
about 3 years ago

剛才在FB上看到這篇文章,我簡單摘錄一下它的開頭,各位朋友如果有興趣可以把它點開來詳閱:

對不起我不學經濟 不學法律 不學政治 不學社會社工 不是商管人才
我只能用做IC來比喻:

小馬以總分"689"這麼優異的成績推甄上ICS組
並且選擇了類比IC的實驗室

IC設計是這樣的
你在電腦上設計的電路,也就是你設計的晶片
必須要透過"下線"的流程,把設計圖送交晶圓廠代工
經過幾個月之後,晶圓廠會把製造好的晶片還給你
你拿到你設計的東西之後,再用實驗室的儀器進行量測
晶片製造是很貴滴,所以大家能夠使用的資源有限
.....全文
--from Development Tu 臉書

很多人看了這篇應該都大笑,但是老實說我看了笑不出來,因為我有類似的經驗。

碩二下的時候,雖然那時候已經發了paper,但是實驗驗證一直沒有著落,每個禮拜的 meeting都灰頭土臉,因為實驗又 fail了。老師要我找出原因,到底是模擬失真,還是製程沒做好,或者是光路沒架好?偏振態沒有調好?奈米手不靈敏?

大家看了這篇文章之後,應該也都知道失敗並不可恥,重點是要找出原因,讓後進者得以繼續延續研究的薪火。老實說到現在我還是不知道當時失敗的原因。這麼說來真的很可恥XD,我一直到剛才看完這篇文章才開始反省orz

一直沒找出原因,我就這樣每個禮拜重複一樣的過程,周一跑模擬,周二去中研院做device,晚上回新竹就開始進實驗室量,一直量到禮拜天,fail,然後又像鬼打牆般重複一樣的事情。

我看完這篇文章我覺得很慚愧。雖然我不是ICS組的,但是我確確實實跟文章中的小馬一樣,每次失敗之後,不思失敗的原因,卻一直把餅畫得更大,要我的指導教授相信我,這次不但不會失敗,而且消光比會更好,甚至不用奈米眼,用far-field都看得到!逆境使人堅強,作為一個研究生就像一個不倒翁一樣,越挫越勇。

後來,我畢業了,否則我可能到現在都還在對我的指導教授開空頭支票,然後後面的學弟妹為了阻止我霸佔實驗室資源,可能就只好到台北來靜坐在中研院物理所大廳......

然後多年之後我看到這篇文章,覺得背脊發涼。

 
about 3 years ago

你有看過比這裡更有秩序的一群人嗎?如果這是暴民,那什麼才不是暴民?

今天下午我到場的時候,發現現場已經跟1985的行動一樣,建立起醫療通道,每條路至少都有一條;此外,我還看到,一群無私的朋友,自願撐起管制線,並且仔細、耐心地面對有些民眾的不諒解。

我還看到了,現場源源不絕的物資,不斷餵食大家。待在現場,雖然不比待在家裡,但是絕對比搭飛機還舒服,每隔幾分鐘就會有志工問你要不要吃東西?要不要喝水?

這麼多物資,那一定製造很多垃圾吧?完全相反,我還看到了不時走動的志工,收回收、收垃圾。

這些人在今天之前,毫不相識,卻挽起衣袖,為大家服務,也為社會服務。更令人驚訝的是,我原先以為這些人清一色都是大學生,但是我錯了,這些撐起管制線、發放物資、收拾垃圾的志工,許多都是高中生!我不知道他們是早上穿著制服就來這裡了,還是放學後過來的,但是我覺得非常感動!因為我自己在讀高中的時候,也許根本就還不認識街頭運動,也許也會跟著媒體一起覺得這些人是暴民。

從兩次仲秋的起義之後,除了讓社會大眾(呃我指的可能不包含只看旺中的人)認識的公民崛起的力量之外,更重要的是,我在這次的行動中,確實看到了練兵的成果。

除了確實的收拾垃圾(因為媒體很有潔癖很在意這個)、確實建立緊急通道之外,糾察隊、媒體聯絡、國際發聲、法律解讀,論述、發言,不知情的人根本看不出來「他們」其實只是一群「烏合之眾」。

小敏小敏,你有看過暴民嗎?我帶你去看!

延伸閱讀

蘋果日報立法院內live直播
良心的沈默就是邪惡的幫兇 (十萬人送仲秋十月雪)

 
about 3 years ago

你喜歡無聲的和諧,還是熱烈的爭辯呢?

包含我自己在內,可能很多人都喜歡前者;覺得爭辯傷感情,覺得心情不愉快,或者不喜歡被打臉。

強者我前室友薛斗曾經說過讓我常常反覆思想的話:真理是越辯越明。這句話大家都聽過,但是我卻時常思索這句話的意思。等到我又長大了一些,我開始有些失望,因為我總覺得大家的意見是發散的,總是各說各話、毫無交集。後來,我才發現,還有一種東西,叫做立場──有些事情其實並沒有真理存在,而只憑立場。

舉個例子來說,假設你家巷口開了一家7-11,地方的年輕人可能會很高興,覺得可以買到時髦的巧克力,吃到風行一時的冰淇淋,但是你家對面的老王開的雜貨店可能就此陷入愁雲慘霧,因為他的生計想必將大受影響。在這個故事之中,要開一家7-11,是好、還是不好,肯定是辯論不出結果的,因為對有人來說是好,有人來說不這麼好,也或許對有些人來說結果是負面的,也因此,大家只能各自表達自己的立場。

昨天在網路上看到有人說,他覺得FB陷入瘋狂,他覺得很不舒服;他覺得大家不理性,覺得大家被煽動。老實說,看到我有朋友有這樣的想法,我替他覺得很難過。我想說的是,難道你不喜歡看到熱烈的爭辯嗎?難道你安於舒適而和平的寧靜生活嗎?希望每天都美好如往常?其實我也跟你一樣;但是現實是,我們的世界並不是這樣子的。

我想說的是,任何立場都是可以表達的,不管你喜歡也好,不喜歡也好,都可以說出你的想法。我看到有人提出支持服貿的說帖,也看到有人嘗試把正反方的說法都貼出來,當然也看到我比較多數的朋友,努力散布著服貿有什麼威脅的說明。要不要支持服貿,不是一個 yes/no question;就算真的是,那每個人也都會有自己的答案。

這個世界本來就是吵雜的。而且還醜陋無比。打開懶人包或者說帖,是你的第一步。你不見得需要馬上做出任何判斷,但是至少可以先從了解開始。

請容我再多嘴。第一,政治,就是大家的事情;並不是遮住自己毛茸茸的耳朵,就可以讓自己不沾染上政治。第二,中國是我們最大的貿易夥伴,是我們最鄰近的國家,沒有之一,但是同時也請嘗試去思考,中國之於台灣,還扮演了一個角色──請問是?