2009年7月16日 星期四

發文注意事項

由於昨天我不小心post了篇只有link的文章,所以早上blog被鎖住了。
所以請大家留意一下,以後發文請要有"充實"的內容,不能只有link,不然會被當成spam blog.

ESL裡的SoC轉運站

一顆SoC裡可能會有一顆到多顆CPUs, 還有周邊, 記憶體,...,等什麼的. 靠什麼來把資料在這中間搬來搬去呢? 太特殊的東西不談, 大概就是屬Bus以及NoC (Network on Chip). OpenESL比不上CoWare的有幾點, 但是最主要的就是我們缺乏一些IP的ESL Models. 其中又以Bus與CPU為最重要.

CPU方面, Aaa的32-bit RISC拿來做研究可以, 但是想必沒人真正會拿來用在產品上, 所以品皓的8051與DSP16(實際上是AD2191的clone)會是我們的主角, 至於32-bit RISC就要靠電機系陳中和老師的研究了.

Bus方面, Gary按照TLM2.0做了一版堪用的Bus, 不過這不太切合實際, 同樣也是拿來做研究而已. 我們需要的是標準的Bus models. 所以ruru的重點是:

1. OCP

2. AMBA2 or even AMBA3

這是短時間我們要弄出來的. 再加上一些週邊介面所常用的Model如I2C, 以及利用PC的resources來做simulation的呈現也是方便在simulation時可以watch結果的好工具.

ruru的工作的定義很簡單, spec都在標準裡, 請加油!

Pitch/Partial Tracking的新方向

雖然文森學長的work做得很好, 但是我們的心中有一點點缺憾, 那就是學長的方法, 除了WGCDV是以前AL學長做的之外, 多半還是來自其他世界上其他的研究者的想法, 縱使為bff學長所開發的High Order HMM. 而過去我也曾經講過, 利用HMM來做tracking似乎不做第二人想, 但是我們除了HMM之外, 能有其他的創見嗎?

文森的Pitch/Partial Tracking



這一點, 我跟DNA學長聊過, 在過去, 我們利用Partial Group似乎得到一些效果, 不過一切的方法似乎比較像是在做影像處理或圖形識別的研究, 也就是試著找所謂的Feature(特徵), 然後用HMM的方式把他們在時間軸上連起來. 但是老實說, 我對影像類的特徵找法不是太有好感, Heuristic或Empirical是我一直用來形容這類方法的名詞, 我對Neural Network的感覺也是如此.

這讓我希望回到用Data Decomposition的比較正統的數學方法來定義Features, 可是怎麼做呢? 我沒十足把握, 所以這一篇不好寫.

一般的數學做法是找eigenvectors, 利用eigenvectors來當tracking(可以是HMM也可以不是)用的Features似乎可行, 不過在我們要對付的問題上, 一般的decomposition的方法卻可能會有問題, 要是可以, 那麼PCA(Principle Component Analysis)或ICA(Independent Component Analysis)的方法就可能派得上用場. 不過, 因為八度音, 甚至五度關係都會讓這類方法破功, 其原因我就不在這裡細講. 因此在這裡我們要定義的Feature Vectors一定有別於一般Linear Algebra中的eigenvectors, 而如何找到演算法來算這Feature Vectors以及如何避開八度與五度的問題是關鍵所在.

所以胤要對付的問題的真正解法在哪裡需要我們一起努力尋找, 而這一類問題要做得好, 數學要有一點底子, 別忘了, Higher Order HMM Tracking是數學系出身的bff學長想出來的. 這讓IRCAM與SCREAM首次在MIREX裡勝出.

MIREX2008 Multiple F0s estimation

我想, DNA與我會多花一點心思在這個問題上面, 請胤想法子趕快學好Matlab, 因為我不希望花太多時間自己寫matlab裡已經有的東西.

 

Codec, the long-short road

Codec據說是SCREAM Lab的強項之一, 而且應該是蠻強的, 不過我們卻一直低調而且有一點不甘願做. 可是多年來也一直做下來了, 我想因為codec紅, 而且似乎好找事, 所以我們還是有一串研究可以繼續下去.

實驗室的codec其實有audio也有image/video, 最近smallnew與daphne連手做出的image coder很棒的, 希望可以接續下去, 不過最popular的還是MPEG4/264與AAC.

在MPEG-4 video方面, 我們有一個PS3 Cell BE版本, 也是bbb學長的論文裡所用的例子, 還得過教育部比賽第三名, 不過口試委員吳安宇與洪士灝教授希望把SIMD完成, 所以這是雙魚要做的第一件事.



 

其二是在一般非Multicore環境下, 有中多寫得不錯的Open source, 希望雙魚可以將其速度改進並加到SCREAM Lab的SLIM之下.

其三是AAC decoder的改進, 這個跟第二部分相似, 不再贅述.

我必須等雙魚對一干codec有進一步的了解才可以決定下一步要怎麼走, 這是一個紅的領域, 競爭者眾. 不過請放心, 不管是Smallnew/Daphne的image coder或DNA的audio coder都可以跟世界一流的coder一比高下, 就看雙魚的努力有多少, 成就就有多少, 學長姐已經為你開出一條很平坦的路來了.

OpenESL/ModelSim/QEMU/FPGA

實驗室的OpenESL終於要announce了, 在ESL方面, 或者正確地說, 在HW設計的模擬方面, SCREAM Lab一直致力於異質工具的共同模擬, 過去我們也曾經將Matlab/SIMULINK加到裡面來, 但是, 現在我們要回到正軌來, 也就是 SoC設計的模擬方面. 說到模擬這方面, SCREAM Lab真是有一長串歷史可以交代, 我們接著要做的方像我把它稱之為:

Cyber-Physical-Simulation-Migration(CPSM)



也就是在Cyber Space做的模擬, 可以一部分一部份移到Physical Space去, 這中間做的模擬就叫做Cyber Physical Co-simulation. 由於是一部分一部份移到Physical Space去, 一直到全部的設計都移到Physical Space為止, 所以我叫它做Cyber Physical Migration. 不但是硬體設計, 連軟體的設計也是, 也就是在Cyber Model運做的軟體, 在Physical Space也要一樣可以運作. 這中間牽涉到非常多的轉換(Transformation)與介面(Interfacing)的問題, 所幸SCREAM Lab過去多年來做的一連串的Heterogeneous 與Mixed level simulation, 一堆Code Generation以及辛苦建的Programming/SW tools, 這一天的到來應該不會太遠.

目前的Physical Space的工具有以下幾種可能:

1. FPGA

2. ARM Versatile Platform Board

3. Socle SoC Board (Optional, 因為 2 太貴了)

Cyber Space的工具就多了, 我只列幾項, 有一些要保留一下, 因為還不確定:

1. ESL Platform: OpenESL/CoWare

2. QEMU

3. HDL Simulator

看到這些工具, 有經驗的人就知道SCREAM Lab想要做什麼:

先用比較高階的 QEMU的ARM Versatile PB版跑SW Simulation, 部分原件拉出來在ESL跑, 然後ARM移到ESL, 然後元件移到HDL Simulator, 之後再移到FPGA, 最後所有東西移到FPGA. 中間經過的順序以及要經過多少步驟要視狀況而定.

所以Long目前要補足一些SCREAM Lab所缺的主要區塊:

1. HDL Simulator with ESL Platform

2. QEMU with ESL Platform

我的計劃是用OpenESL來當一切的轉接/轉運站, 舉凡data交換, protocol, ..., 等都是它. 只要建立好通道(channel), 以及準備好一堆Code Generation tools, 在一定的Framework下設計, 應該不難達到.

希望Long八月份可以把HDL Simulator打通, 接著回到QEMU來. 今年內應該可以看到一些成果的.

2009年7月14日 星期二

Qin Synthesis and SW tools/古琴合成研究

這是一個未完成的研究, 我們在未來一到兩年要把它完成. 最早是瑋倫學姊的古琴減字譜軟體的完成, 這是一個國科會數位典藏計劃的成果, 事實上受到許多人的重視, 不過跟多數的國科會計劃以及因為學生畢業的關係, 這個成果那時沒能延續下去. 多年來一直有人問, 連中研院院士都來問.

當時未能延續下去的一大原因是雖然古琴減字譜的輸入法很好, 可是聲音的合成一直沒能突破, 直到最近, 小明學長對起頭音的分析, 文森學長的pitch/Partial Tracking有了一些成果, 看來應該是東山再起的時候了. 在此我向眾多關心的朋友說聲道歉.

以下是相關的link:

古琴減字譜數位化

Centcent's Pitch and Partial Tracking

等小明過幾天把減字譜軟體頁面的圖準備好, 我再來更新.



由於古琴聲音與演奏的特性, 文森學長的pitch/Partial Tracking事實上需要一定程度的修改, 或者正確一點的說是Customization, 也就是量身訂做.

同樣的, 我來起這一串, 接著就由仕偉來接續. 第一個工作當然是把減字譜軟體回復, 這一部分比較簡單. 但是聲音的部分就困難一點. 整個軟體要怎麼做, 我會跟相關的人討論. 而要做的事情如下:

1. 琴音的分析, 也就是pitch/Partial Tracking, 這一部分會比較簡單, 因為我可以把音一個個分開來彈.

2. 分析結果的修正, 這一部分恐怕暫時需要人工來做, 不過SW工具還是需要的, 這部分可以跟authoring tools那邊合在一起, 所以這部分建議做成一個外掛. 我們再來討論要怎麼分工.

3. 根據輸入的減字將每個音合成出來, 這部分要動用additive synthesis以及起頭音合成, 我還不知道小明對提琴的起頭音那部份的成果是否可以直接用過來, 不過值覺是可以的.

4. 根據使用者對演奏articulation上的需求(多半指的是滑音, 少數是其他技法), 重新在合成.

5. 將每一個合成的音照使用者指定的時間排好.

至於其他的事就等這些做好再說!好吧! Let's go!

對了, 請小明將這串同時update到: 古琴減字譜數位化. 感謝!

Score Alignment and Following

在MIREX2008裡面有一個比賽項目叫做Score Alignment, 網址如下:

MIREX2008 Score Alignment or Score Following

其實就是冠廷學長的論文其中的一部分. 冠廷用的是Chroma Feature, 其論文我們過一陣子再Post出來, 但是我們一貫的討論可以在下面看到:

冠廷的Polyphonic Music Information Retrieval



這個問題對我們很重要, 不過一般的Score Alignment做的要是能從頭Follow到尾, 也就是冠廷做的. 研究上當然是要如此完整, 但是假如以短時間內能用到我們要做的應用, 那麼是可以有一些妥協的. 比如說, 我們可以讓使用者把一段Wave框起來, 在讓它來對Target的譜子, 而且一次只要對一部分的譜就好, 例如四小節, 八小節, 長短就看我們的演算法的好壞.

這個串今天由我來起個頭, 接下來就由小聽來接續. 我建議可以將冠廷學長的方法先弄起來, 然後找其他人的論文來Implement, 久了後, 相信會越做越好, 也許有一天我們也可以去參加比賽.

另外就是Score Alignment會是Authoring tool的一部分.

2009年7月11日 星期六

Polyphonic Computer Music Authoring Tool

2009/07/11

不免俗的,先來說一下故事。



由於維城、文森及冠廷近年來在polyphonic music的研究上有了卓越的成果,Cuda的普及正好可解決合成上計算量過高的問題,因此老師便計畫著如何利用它來呈現大家的研究成果。此外,電機系有個同學願意幫我們完成電腦動畫,使其可在畫面上呈現提琴演奏的樣子,還有師大音樂系同學的加入,他們願意幫我們修正分析完錯誤的部份結果,並標記提琴的弓法。最後也最重要的,是冠廷跟小聽加入實作的行列。在天時、地利、人和的條件都滿足的情況下,這個編曲工具的專案便問世了。

昨天跟冠廷和小聽已討論出大概的系統架構、初步實作之資料格式及功能等等,因此開條Thread來紀錄一下工作事項及進度。目前工作的分配如下:

冠廷:

先實作資料格式的I/O,也就是先將文森的結果,按照以下格式紀錄在程式中,輸出的格式暫定為 XML 與 Binary,時間的最小單位是 10ms。註: Track外還會包一層 Group,來代表是同一組 partial group。

class Track

{

int 樂器id;

float[] 頻率;

float[] 能量;

int 起始單位時間;

int 持續單位時間;

Control[] control;

}

class Control

{

int type; //紀錄 control種類, ex: vibrato 就填1

int subType; //紀錄 是哪一個子類, ex: vibrato有三種,如果要第二種,就填2

string tablePath; //如果type是user define, 會由使用者指定這個路徑

int 起始單位時間; //在這個Track的單位時間多少時發生

int 持續單位時間;

}

小聽:

使用Java Swing製作GUI,先尋找一下網路上是否已有寫好的函式庫有提供我們所需要的功能。需要的功能細項待補。(我寫的字條放在 Lab …)

1. 畫waveform的panel (time domain、FFT)

2. 在波形圖上選取區段,變色效果。

3. 經由畫筆改變waveform

4. 可以自由配置視窗的功能

5. 隨不同視窗,改變工具列。

6. 屬性頁

7. midi檔的note number用樂譜形式呈現

showmin:

實作擷取一段聲音的 partials 並另存成樂器庫及 OLA additive synthesis。

2009年7月7日 星期二

Part time job opportunity

幫朋友找人完成下列工作:
Job 1:
1. 使用Python語言 ( cross-platform需求 )。
2. 使用OpenCV實作形狀識別。
3. 以手繪圖形辨識出 三角形,圓形,長方形 ,多邊形(抓出轉折點或半徑等)。
Job 2:
1.Cross-platform ( windows, linux , Mac ) 螢幕錄影錄音工具程式。
2. 不限語言,但須是console mode程式,方便背後執行呼叫。

待遇和時限:
Job1 : 100k 1 month
Job2: 50k 1 month

PS:已有基本範例,主要是完整化跟測試。

有興趣的,有缺錢的,可以跟我聯絡一下。

2009年7月6日 星期一

Training Course

給Traning Course的講師們

如何準備一場精彩的簡報
http://www.bkcoach.com.tw/index2.php?option=com_content&do_pdf=1&id=33

「充分準備」造就「成功簡報」
http://www.watchinese.com/%E7%9C%8B%E8%AB%96%E5%A3%87/2009/1214

老師說 Training Course是要訓練新生, 同時也訓練講師
不用心準備, 誤導新生的話
很快會有報應的!!