<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7044124399939381485</id><updated>2011-12-29T21:42:05.092+08:00</updated><category term='GPU'/><category term='HTC'/><category term='Architecture'/><category term='Image'/><category term='C/C++'/><category term='Music'/><category term='Others'/><category term='Publication'/><category term='ASIC'/><category term='OpenESL'/><category term='Talks'/><category term='Programming'/><category term='Meetings'/><category term='Compression'/><category term='blog使用教學'/><category term='Courses'/><category term='virginia'/><category term='CoWare'/><category term='Audio'/><category term='CPU'/><category term='ESL Design Flow'/><category term='Multicore'/><category term='SCREAMLab. 活動預告與紀實'/><category term='CUDA'/><category term='SLIM'/><category term='ESL'/><category term='文章發表注意事項'/><category term='Cell'/><category term='Tool Chain'/><category term='Android'/><category term='FPGA'/><category term='Video'/><category term='Synthesis'/><category term='Analysis'/><title type='text'>SCREAM Lab.</title><subtitle type='html'>If we don&amp;#39;t find the way, no one else can. 
&lt;br&gt;
國立成功大學資訊工程學系  音樂與多媒體實驗室</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default?start-index=101&amp;max-results=100'/><author><name>SCREAMLab</name><uri>http://www.blogger.com/profile/05590168398461567054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_H1JqYnMe9ow/SQm74AxigRI/AAAAAAAAAAM/8oHey4ZZfPk/S220/Snoopy001.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>181</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6242657253575814283</id><published>2011-10-17T17:11:00.001+08:00</published><updated>2011-10-17T17:12:18.851+08:00</updated><title type='text'>ISMIR 2011 paper released</title><content type='html'>&lt;a href="http://ismir2011.ismir.net/program.html#OS1"&gt;http://ismir2011.ismir.net/program.html#OS1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FYI, the accepted papers have been released. Guys who are interested in it could take a look. GL HF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-6242657253575814283?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/6242657253575814283/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=6242657253575814283' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6242657253575814283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6242657253575814283'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/10/ismir-2011-paper-released.html' title='ISMIR 2011 paper released'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-8741738950232968256</id><published>2011-08-19T15:56:00.009+08:00</published><updated>2011-08-19T16:11:54.865+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multicore'/><title type='text'>Interconnection Network</title><content type='html'>這篇文章講解interconnection network。interconnection 一直是多核心處理器設計的重要議題。如Figure 1，軟體層面，process是經由IPC溝通，而在底層的硬體，cores間得透過interconnect做溝通。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-dmiVUvx8eqk/Tk4YzLVoVnI/AAAAAAAAAC4/CIYb6I2GjP8/s1600/1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 309px; height: 320px;" src="http://1.bp.blogspot.com/-dmiVUvx8eqk/Tk4YzLVoVnI/AAAAAAAAAC4/CIYb6I2GjP8/s320/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642474650637719154" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 1&lt;br /&gt;&lt;br /&gt;最primitive的interconnection network可以想做圖二，n個processors經過一個 interconnection network與m個memory做連接。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-g6frV_nVzu8/Tk4Y7GvsqJI/AAAAAAAAADA/x9lhg892LRk/s1600/2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://1.bp.blogspot.com/-g6frV_nVzu8/Tk4Y7GvsqJI/AAAAAAAAADA/x9lhg892LRk/s320/2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642474786843830418" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 2&lt;br /&gt;&lt;br /&gt;Interconnect Network 的設計考量有幾個&lt;br /&gt;1. Operation mode : synchronous or not&lt;br /&gt;2. Control strategy : switch elements是 centralized control or distributed control&lt;br /&gt;3. Switching methodology : 包括 circuit switching and packet switching&lt;br /&gt;  3.1. Circuit switching 是指有一條實體線路從 src 接到 dst，適合bulk transfer。&lt;br /&gt;  3.2. Packet switching 沒有實體線路，傳輸時才決定如何 route，適合小量資料傳輸。&lt;br /&gt;  3.3. 當然也有結合Circuit switching和Packet Switching兩個的模式。&lt;br /&gt;4. Network Topology : 就是nodes間的連接圖，又可分為 static 或 dynamic。&lt;br /&gt;  4.1. Static的代表link not reconfigurable&lt;br /&gt;  4.2. Dynamic則與 Static相反&lt;br /&gt;&lt;br /&gt;Static 的可以用 1D、2D、3D、hypercube的方式連接，&lt;br /&gt;1D : Linear&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-MVOuM3Q_AhI/Tk4Y_umdLtI/AAAAAAAAADI/PnSXa8GAaDI/s1600/3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 244px; height: 72px;" src="http://4.bp.blogspot.com/-MVOuM3Q_AhI/Tk4Y_umdLtI/AAAAAAAAADI/PnSXa8GAaDI/s320/3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642474866261962450" /&gt;&lt;/a&gt;&lt;br /&gt;Figure 3&lt;br /&gt;&lt;br /&gt;2D : Ring, Star, Near-Neighbor Mesh and More&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qG5QAJMd3aY/Tk4ZEhqgerI/AAAAAAAAADQ/0DB-7b8aves/s1600/4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 207px; height: 187px;" src="http://3.bp.blogspot.com/-qG5QAJMd3aY/Tk4ZEhqgerI/AAAAAAAAADQ/0DB-7b8aves/s320/4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642474948688640690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-3fDSdNsfbbo/Tk4ZKClrYKI/AAAAAAAAADY/nZkQRA6sa-Y/s1600/5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 207px; height: 179px;" src="http://4.bp.blogspot.com/-3fDSdNsfbbo/Tk4ZKClrYKI/AAAAAAAAADY/nZkQRA6sa-Y/s320/5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642475043426099362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-9u9wn6B8ZbE/Tk4ZOYKG45I/AAAAAAAAADg/E-guOx8I968/s1600/6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 221px; height: 179px;" src="http://4.bp.blogspot.com/-9u9wn6B8ZbE/Tk4ZOYKG45I/AAAAAAAAADg/E-guOx8I968/s320/6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5642475117935518610" /&gt;&lt;/a&gt; &lt;br /&gt;Figure 4~6&lt;br /&gt;&lt;br /&gt;3D 像是 Completely Connected, Chordal Ring等等&lt;br /&gt;&lt;br /&gt;Dynamic 的topologies有幾類，包括single-stage、multi-stage、crossbar。Single-stage和multi-stage差別是在switch element有幾層，multi-stage的種類又有很多種，有興趣可以在 google scholar撈到很多。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------------- 待續 --------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;[1] A Survey of Interconnect Networks&lt;br /&gt;[2] Interconnection Networks -A Survey and Assessment&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-8741738950232968256?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/8741738950232968256/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=8741738950232968256' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8741738950232968256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8741738950232968256'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/08/interconnection-network.html' title='Interconnection Network'/><author><name>雨人</name><uri>http://www.blogger.com/profile/09296459963163649481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-dmiVUvx8eqk/Tk4YzLVoVnI/AAAAAAAAAC4/CIYb6I2GjP8/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6622669409000329442</id><published>2011-07-11T16:52:00.003+08:00</published><updated>2011-07-11T16:53:34.280+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>Workshop Advances in Speech Technologies (2011)</title><content type='html'>&lt;a href="http://anasynth.ircam.fr/home/blogs/nicolas-obin/workshop-advances-speech-technologies"&gt;http://anasynth.ircam.fr/home/blogs/nicolas-obin/workshop-advances-speech-technologies&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Axel邀請了其他三名教授來分享研究成果，剛好這場我有去聽。雖然我們lab不做speech，不過一樣都是1-D signal processing，更何況speech processing研究已行之有年，讓我們來看看現在大家在做些什麼題目。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;第一場演講者是Axel，演講的內容與去年他來成大時所說大同小異，忘記的人可以複習一下。我印象深刻的是第三場，他們探討的不再是訊號本的的特性，而是人與人之間談話時其實會有幾個固定的模式，因此他們希望設計一種機器人語言，不再像傳統機器人的對話那麼死板，而是用更多的「累詞贅字」來模擬人們的對話。&lt;br /&gt;&lt;br /&gt;第四場光看投影片第二頁那一堆贊助廠商就可以知道這是個非常大的project，其中包含的個人化的語音表情(跟本實驗室想做的樂器表情一樣)以及針對不便說話的病人設計的介面等。他們是走訊號層面來解決「讓語音合成變得更聰明」這個問題，因此最後Simon說他們沒做的就是第三位教授所研究的語義表情部份。XDD&lt;br /&gt;&lt;br /&gt;很棒的演講，分享給大家。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-6622669409000329442?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/6622669409000329442/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=6622669409000329442' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6622669409000329442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6622669409000329442'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/07/workshop-advances-in-speech.html' title='Workshop Advances in Speech Technologies (2011)'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-7259488948340515961</id><published>2011-06-13T00:46:00.003+08:00</published><updated>2011-06-15T15:37:04.129+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>[matlab] Cue Reader</title><content type='html'>話說，我來法國後親眼看宗鑫學長操作IRCAM的AudioSculpt真的是出神入化，再加上他們實驗的東西多半有整合進這套工具裡，包含Onset (Transient) Detection, Partial Tracking, Sinusoidal Analysis / Synthesis 等，所以學長把視窗打開後設一設參數，就跑完 tracking 的結果，然後再用滑鼠把某些 tracking 點開來標記 partial group。不過他們一樣有個問題：AudioSculpt分析的結果通常是以sdif的格式存檔的，他們必須先透過matlab程式去parse sdif檔才能將資訊匯進matlab使用。&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Cooledit有標Cue的功能，吳宗憲老師實驗室早先用MFC寫了一個讀Cue的版本，我們也改了一個Java版本，但還是無法與matlab直接溝通。因此小弟便動手改了一版了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;免付費下載連結 : &lt;a href="http://ludwig.csie.ncku.edu.tw/members/87showmin.Wang/Audio/ReadCueTool.zip" style="color: red;"&gt;Here !&lt;/a&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;(不要怕，沒病毒!)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;裡面有ReadMe，看不懂英文的請看下列指示:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;安裝 J2RE (通常有裝matlab的話不用裝了)&lt;/li&gt;&lt;li&gt;編輯run.bat，指定好你要的輸入/輸出檔。(如果要一次轉換多個檔就多複製幾行)&lt;/li&gt;&lt;li&gt;執行run.bat&lt;/li&gt;&lt;li&gt;沒意外的話，輸出檔會跑出來。&lt;/li&gt;&lt;li&gt;打開matlab，使用cue_reader.m這個function來讀cue的資料吧！&lt;/li&gt;&lt;/ol&gt;注意: 呼叫完cue_reader後會回傳一個oData結構，裡面有個成員是cell array而非一般array (因為每個cueinfo字串長度不一)，請小心服用，不會用cell array的請查help。&lt;br /&gt;GL , HF .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-7259488948340515961?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/7259488948340515961/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=7259488948340515961' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7259488948340515961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7259488948340515961'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/06/matlab-cue-reader.html' title='[matlab] Cue Reader'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-1015537782300415755</id><published>2011-05-25T23:23:00.004+08:00</published><updated>2011-07-06T19:38:48.098+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Meetings'/><title type='text'>[Meeting]2011年下學期Meeting Paper報告順序</title><content type='html'>5月30日 (一) 君宇 嚕嚕 龍哥 仕偉&lt;br /&gt;&lt;br /&gt;6月6日  (一) 屈原...&lt;br /&gt;&lt;br /&gt;6月13日 (一) 易聰 小聽 雙魚 胤霖&lt;br /&gt;&lt;br /&gt;6月20日 (一) 威佐 嚕嚕 龍哥 仕偉&lt;br /&gt;&lt;br /&gt;6月27日 (一) 毅臺 小聽 雙魚 胤霖&lt;br /&gt;&lt;br /&gt;7月4日  (一) 君宇 嚕嚕 龍哥 仕偉&lt;br /&gt;&lt;br /&gt;7月11日 (一) 易聰 小聽 雙魚 胤霖&lt;br /&gt;&lt;br /&gt;7月18日 (一) 威佐 嚕嚕 龍哥 仕偉&lt;br /&gt;&lt;br /&gt;7月25日 (一) 毅臺 小聽 雙魚 胤霖&lt;br /&gt;&lt;br /&gt;8月1日  (一) 君宇 威佐 毅臺 易聰&lt;br /&gt;&lt;br /&gt;博士班學長姐們 看心情!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-1015537782300415755?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/1015537782300415755/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=1015537782300415755' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1015537782300415755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1015537782300415755'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/05/meeting2011meeting-paper.html' title='[Meeting]2011年下學期Meeting Paper報告順序'/><author><name>ruru</name><uri>http://www.blogger.com/profile/10779341061188685088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_FeztuNYwl_s/Sv5pYpoYgOI/AAAAAAAAFkA/tL0dWolKFPc/S220/ppt0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-1754405559640926461</id><published>2011-05-25T10:41:00.011+08:00</published><updated>2011-07-10T16:33:13.218+08:00</updated><title type='text'>[課程]訊號與系統</title><content type='html'>2011/03/08&lt;br /&gt;==========================================&lt;br /&gt;課程老師: 蘇文鈺&lt;br /&gt;Email: alvinsu@mail.ncku.edu.tw&lt;br /&gt;&lt;br /&gt;課程助教: 林易聰&lt;br /&gt;Email: albert29450@gmail.com&lt;br /&gt;&lt;br /&gt;課程助教: 吳翊臺&lt;br /&gt;Email: yzwind@gmail.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;課程資訊：&lt;div&gt;&lt;br /&gt;&lt;div&gt;期中考 4/13&lt;div&gt;&lt;div&gt;最後一次小考 6/22&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;作業一：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://0rz.tw/W7yYl"&gt;Matlab &amp;amp; HW1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://0rz.tw/egYP5"&gt;音檔&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FTP : 140.116.82.196:21 &lt;div&gt;username : signals2011&lt;/div&gt;&lt;div&gt;password : systems2011 &lt;/div&gt;&lt;div&gt;&lt;br /&gt;作業繳交格式:學號_姓名_version.rar (ex:P76952XXX_林XX_v1.rar)&lt;br /&gt;作業繳交內容:一個.m檔，一個.doc，一個錄音檔&lt;br /&gt;作要繳交期限:2011/4/12 23:00&lt;br /&gt;ps:作業第四題修改成讀入自己錄製的音檔，將這段音訊前後反轉後再播放，謝謝。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;第二次作業說明：&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B5V2fNm9RSnGY2I1Y2YyMTQtNjEyMS00ZWZjLWFjMDEtYjQxM2E4NjU0NzM2&amp;amp;hl=en_US&amp;amp;authkey=CN-bxboP"&gt;請點此下載說明文件&lt;/a&gt;。&lt;/div&gt;&lt;div&gt;範例程式會在下禮拜上課前放到部落格。&lt;/div&gt;&lt;div&gt;作業繳交期限為6/29 23:00。&lt;/div&gt;&lt;div&gt;FTP將於6/26開啟供大家上傳作業。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FTP : 140.116.82.196:21&lt;div&gt;username : signals2011&lt;/div&gt;&lt;div&gt;password : systems2011&lt;/div&gt;&lt;div&gt;&lt;br /&gt;作業繳交格式:學號_姓名_version.rar (ex:P76952XXX_林XX_v1.rar)&lt;br /&gt;作要繳交期限:2011/6/29 23:00&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;作業一可以補交，期限也是到6/29 23：00，逾期不候。&lt;/div&gt;&lt;div&gt;補交的分數打&lt;span class="Apple-style-span"&gt;八折&lt;/span&gt;計。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由於多人反應作業來不及完成，將開放FTP到7/1 23:00，請大家努力完成。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://webhd.xuite.net/_oops/fly01/wmn"&gt;作業二範例檔&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Bonus範例這幾天會放上來。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6/12 &lt;/div&gt;&lt;div&gt;&lt;a href="http://webhd.xuite.net/_oops/fly01/fp1"&gt;bonus&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7/10&lt;/div&gt;&lt;div&gt;&lt;a href="https://spreadsheets0.google.com/spreadsheet/ccc?hl=en_US&amp;amp;key=t89Bu1SSqOKEZ09m_1VlP3A&amp;amp;hl=en_US#gid=0"&gt;成績&lt;/a&gt;&lt;/div&gt;&lt;div&gt;（所有成績皆已補上。最後成績仍有可能調整，近期公布。）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://0rz.com/tFaF0W"&gt;課程綱要&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://0rz.com/XCsC2B"&gt;ch1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://0rz.tw/x7g3T"&gt;ch2&lt;/a&gt;(2011/3/16 updated)&lt;br /&gt;&lt;p&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2011_4/SignalSystem2011_3.ppt"&gt;Chapter3&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2011_4/SignalSystem2011_4.ppt"&gt;Chapter4&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2011_4/SignalSystem2011_5.ppt"&gt;Chapter5&lt;/a&gt;&lt;/p&gt;  &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-1754405559640926461?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/1754405559640926461/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=1754405559640926461' title='12 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1754405559640926461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1754405559640926461'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/03/blog-post_09.html' title='[課程]訊號與系統'/><author><name>Albert</name><uri>http://www.blogger.com/profile/09404919740506924872</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-6RpfzpV-9VA/Tp2JYvzlLwI/AAAAAAAACFo/OjGQyP46Myw/s220/IMG_2892.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-111800786965941803</id><published>2011-04-22T16:40:00.004+08:00</published><updated>2011-04-22T16:53:56.056+08:00</updated><title type='text'>Code Snaps</title><content type='html'>&lt;div&gt;&lt;br /&gt;(請不要刪! 這是論文要用的reference!)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Click to see the original resolution.&lt;/span&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/-zs30VcGasOA/TbFBMSkjAZI/AAAAAAAADIc/6C9W9PF2Kk0/s1600/codesnap.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width:100%; " src="http://4.bp.blogspot.com/-zs30VcGasOA/TbFBMSkjAZI/AAAAAAAADIc/6C9W9PF2Kk0/s400/codesnap.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5598327491197600146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-111800786965941803?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/111800786965941803/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=111800786965941803' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/111800786965941803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/111800786965941803'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/04/code-snaps.html' title='Code Snaps'/><author><name>yl</name><uri>http://www.blogger.com/profile/09571476115703903473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zs30VcGasOA/TbFBMSkjAZI/AAAAAAAADIc/6C9W9PF2Kk0/s72-c/codesnap.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-2989604349242082738</id><published>2011-04-08T22:30:00.001+08:00</published><updated>2011-04-08T22:32:39.892+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tool Chain'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Jserv: from Source to Binary -- How GNU Toolchain Works</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;大神的最新力作, 有用到的人自己去研究研究吧....  :)&lt;br /&gt;&lt;a href="http://blog.linux.org.tw/~jserv/archives/2011/04/from_source_to_1.html"&gt;from Source to Binary -- How GNU Toolchain Works&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;引用一下簡介&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: palatino, georgia, verdana, arial, sans-serif; line-height: 32px; font-size: medium; "&gt;&lt;blockquote&gt;一開始的切入點是簡單的 "Hello World" 程式，觀察其編譯的方式，探討 GCC 這個 compiler driver 的行為，進而擴展到 binutils 與 libc。不同於教科書的理論呈現方式，我們探討實務上面對的議題，比方說，GCC 設計初期就考慮到多個前端與後端，以及繁複的優化機制，光是 IR (中間表示式) 就歷經多次變革。在 gcc4 之後，再次大幅強化，而議程中則適時給予簡要的案例探討。另外，組譯器也並非我們預想一般單純，實務上還得充分考慮到 relocation 與位址處理的機制，最後才是連結器 / 動態連結器的引入，我們實地觀察了 x86 架構上，GNU/Linux 的執行時期行為。&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-2989604349242082738?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/2989604349242082738/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=2989604349242082738' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/2989604349242082738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/2989604349242082738'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/04/jserv-from-source-to-binary-how-gnu.html' title='Jserv: from Source to Binary -- How GNU Toolchain Works'/><author><name>yl</name><uri>http://www.blogger.com/profile/09571476115703903473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-3395126661548529542</id><published>2011-03-23T14:47:00.003+08:00</published><updated>2011-03-23T14:57:05.773+08:00</updated><title type='text'>Stages of Sleep</title><content type='html'>Dear all,&lt;br /&gt;有關於這星期一的meeting,&lt;br /&gt;我上網找了 stages of sleep相關的文章&lt;br /&gt;&lt;br /&gt;ref:&lt;br /&gt;http://www.sleepdex.org/stages.htm&lt;br /&gt;http://www.sleepdisorderchannel.com/stages/index.shtml&lt;br /&gt;&lt;br /&gt;NREM: stage 1-4&lt;br /&gt;REM: stage 5 (deep sleep)&lt;br /&gt;&lt;br /&gt;REM是屬於 stage5,&lt;br /&gt;&lt;span class="article_entry"&gt;Normal sleep cycle: waking, stage 1, 2, 3, 4, 3, 2, REM.&lt;br /&gt;所以針對showmin學長以及偉翔的問題 (REM之後的stage?)&lt;br /&gt;應該只有REM stage(&lt;/span&gt;&lt;span class="article_entry"&gt;deep sleep stage&lt;/span&gt;&lt;span class="article_entry"&gt;沒有再細分下去)&lt;br /&gt;&lt;br /&gt;這是我目前所找到的資料&lt;br /&gt;或許有其他文獻有更詳細的說明&lt;br /&gt;如果大家有看到 也可以更新我的資訊! ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-3395126661548529542?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/3395126661548529542/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=3395126661548529542' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3395126661548529542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3395126661548529542'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/03/stages-of-sleep.html' title='Stages of Sleep'/><author><name>Dawn</name><uri>http://www.blogger.com/profile/12052425970863828979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-8047694133809832993</id><published>2011-03-20T10:12:00.000+08:00</published><updated>2011-03-20T22:41:21.972+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>Qin Synthesis and SW tools - 仕偉</title><content type='html'>---------------2011.03.20---------------------&lt;br /&gt;&lt;br /&gt;將圖片顯示部分改好，並修改排版。&lt;br /&gt;&lt;br /&gt;主要功能：&lt;br /&gt;&lt;br /&gt; 將輸入的字串轉換成中序排序法，並顯示出輸入的文字減字。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-XlV7ts-buT4/TYYR5QjMsiI/AAAAAAAAC40/fHQkREdA-So/s1600/main2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 271px;" src="http://2.bp.blogspot.com/-XlV7ts-buT4/TYYR5QjMsiI/AAAAAAAAC40/fHQkREdA-So/s400/main2.png" alt="" id="BLOGGER_PHOTO_ID_5586172063192494626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.12.23---------------------&lt;br /&gt;實驗可變長度的digital waveguide.&lt;br /&gt;&lt;br /&gt;結構圖如下:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/SzI8YvmnScI/AAAAAAAABu4/uRvB5nG_zvE/s1600-h/1000.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 152px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/SzI8YvmnScI/AAAAAAAABu4/uRvB5nG_zvE/s400/1000.JPG" alt="" id="BLOGGER_PHOTO_ID_5418459697473079746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;input為white noise共44100個samples.&lt;br /&gt;取樣頻率:44100Hz&lt;br /&gt;設z的delay:N=44&lt;br /&gt;&lt;br /&gt;gain值a,b變化如下:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SzI4mi1karI/AAAAAAAABuw/ywhlufC4KcU/s1600-h/10001.bmp"&gt;&lt;img style="cursor: pointer; width: 356px; height: 124px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SzI4mi1karI/AAAAAAAABuw/ywhlufC4KcU/s400/10001.bmp" alt="" id="BLOGGER_PHOTO_ID_5418455536517802674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;意思是從N=44(頻率1000Hz) 變成 N=45(頻率980Hz)再變回N=44(頻率1000Hz)&lt;br /&gt;從音檔可聽出音高有改變.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/physicalmodel/1002Hz-980Hz%5E5delay44-45%5E6.wav"&gt;1000Hz到980Hz音檔&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.12.7----------------------&lt;br /&gt;&lt;br /&gt;因為用論文方法的friction model效果不彰,&lt;br /&gt;因此著手於建立古琴滑音的physical model.&lt;br /&gt;大致流程如下圖：&lt;br /&gt;1.錄製只有指甲刮弦的Noise並紀錄Waveguide長度與滑動速率.&lt;br /&gt;2.調整Noise pitch.&lt;br /&gt;3.餵入可變長度的digital waveguide.&lt;br /&gt;4.得到古琴滑音.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SxxkmlpsXLI/AAAAAAAABtI/jT8rF0I9bPI/s1600-h/guqinpluck.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 301px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SxxkmlpsXLI/AAAAAAAABtI/jT8rF0I9bPI/s400/guqinpluck.bmp" alt="" id="BLOGGER_PHOTO_ID_5412311466297285810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;投影片內另有不同的摩擦音可聽,&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/physicalmodel/physical%20model.ppt"&gt;按此下載&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SxxlXLKontI/AAAAAAAABtQ/vyVc0KVhHjs/s1600-h/guqinpluck2.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SxxlXLKontI/AAAAAAAABtQ/vyVc0KVhHjs/s400/guqinpluck2.bmp" alt="" id="BLOGGER_PHOTO_ID_5412312301001285330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.11.26---------------------&lt;br /&gt;&lt;br /&gt;更新friction model內部參數,實作後圖片如下.&lt;br /&gt;更新音檔及提供matlab原始檔.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/Sw4MMD5yQFI/AAAAAAAABsw/cUlVPTWI8Rk/s1600/1.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 218px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/Sw4MMD5yQFI/AAAAAAAABsw/cUlVPTWI8Rk/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5408273603864182866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/Sw4MQwVWntI/AAAAAAAABs4/6spLQqbq3VA/s1600/2.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/Sw4MQwVWntI/AAAAAAAABs4/6spLQqbq3VA/s320/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5408273684510449362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Sw4MY8pwjzI/AAAAAAAABtA/SspZTz-7ahE/s1600/3.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 154px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Sw4MY8pwjzI/AAAAAAAABtA/SspZTz-7ahE/s320/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5408273825256214322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;音檔下載:&lt;br /&gt;&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21340"&gt;R1&lt;/a&gt;, &lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21341"&gt;R2&lt;/a&gt;, &lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21342"&gt;R3&lt;/a&gt;, &lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21339"&gt;Lowpass&lt;/a&gt;, &lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21338"&gt;R1+R2+R3+Lowpass&lt;/a&gt;.&lt;br /&gt;matlab原始檔:&lt;br /&gt;&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/friction/r1.wav#resId/267A4EC442FF7308%21344"&gt;friction2.m&lt;/a&gt;&lt;br /&gt;friction model原論文:&lt;br /&gt;&lt;a href="http://lib.tkk.fi/Diss/2006/isbn9512283891/article6.pdf"&gt;Model-based sound synthesis of the guqin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.11.25---------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;friction model implement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;friction model structure :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/SwyzQy1U4hI/AAAAAAAABpA/Ifa7FJ9gScQ/s1600/model.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 140px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/SwyzQy1U4hI/AAAAAAAABpA/Ifa7FJ9gScQ/s320/model.bmp" alt="" id="BLOGGER_PHOTO_ID_5407894353669841426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;主要是由Rnd產生的noise經過三個resonator與一個lowpass filter之後輸出.&lt;br /&gt;&lt;br /&gt;Resonator 1的頻譜圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy1B3lBc5I/AAAAAAAABp4/KmWqIaojYmQ/s1600/R1.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 132px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy1B3lBc5I/AAAAAAAABp4/KmWqIaojYmQ/s320/R1.bmp" alt="" id="BLOGGER_PHOTO_ID_5407896296268854162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SwyzxE8ahlI/AAAAAAAABpI/Yyl889EnBOs/s1600/R1cool.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 171px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SwyzxE8ahlI/AAAAAAAABpI/Yyl889EnBOs/s320/R1cool.bmp" alt="" id="BLOGGER_PHOTO_ID_5407894908287223378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resonator 2的頻譜圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy0tTQ83AI/AAAAAAAABpo/rX0MInlq2rA/s1600/R2.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 132px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy0tTQ83AI/AAAAAAAABpo/rX0MInlq2rA/s320/R2.bmp" alt="" id="BLOGGER_PHOTO_ID_5407895942923607042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy021JC5vI/AAAAAAAABpw/9iSgneOC-aw/s1600/R2cool.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 171px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy021JC5vI/AAAAAAAABpw/9iSgneOC-aw/s320/R2cool.bmp" alt="" id="BLOGGER_PHOTO_ID_5407896106636076786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resonator 3的頻譜圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy0cEmQW8I/AAAAAAAABpY/KYolMNfAM4I/s1600/R3.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 132px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy0cEmQW8I/AAAAAAAABpY/KYolMNfAM4I/s320/R3.bmp" alt="" id="BLOGGER_PHOTO_ID_5407895646928657346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy0jbRMhnI/AAAAAAAABpg/Y1hjdE3ueoE/s1600/R3cool.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 171px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy0jbRMhnI/AAAAAAAABpg/Y1hjdE3ueoE/s320/R3cool.bmp" alt="" id="BLOGGER_PHOTO_ID_5407895773273425522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lowpass filter的頻譜圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy0Jr9yfcI/AAAAAAAABpQ/fikY63KNl58/s1600/Lowpass.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 132px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/Swy0Jr9yfcI/AAAAAAAABpQ/fikY63KNl58/s320/Lowpass.bmp" alt="" id="BLOGGER_PHOTO_ID_5407895331078831554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy4_ZYcZtI/AAAAAAAABqI/ByBJ2hDfKME/s1600/lowpasscool.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 170px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Swy4_ZYcZtI/AAAAAAAABqI/ByBJ2hDfKME/s320/lowpasscool.bmp" alt="" id="BLOGGER_PHOTO_ID_5407900651849803474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;將R1,R2,R3和Lowpass filter相加後的頻譜圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/Swy1TcOqrTI/AAAAAAAABqA/vMuXYndw6-o/s1600/mixall.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 172px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/Swy1TcOqrTI/AAAAAAAABqA/vMuXYndw6-o/s320/mixall.bmp" alt="" id="BLOGGER_PHOTO_ID_5407896598164974898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.10.28---------------------&lt;br /&gt;&lt;br /&gt;如果將"大九勾三","[大]*[九]+[勾]*[三]",圖片,分別在視窗顯示的話,複製時還要三個視窗分別複製,有些麻煩.因此想說把視窗合併,就跟以前的排版一樣，這樣會比較整齊。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/Sue5lcoZhPI/AAAAAAAABjE/S0LUAG7E9_4/s1600-h/guqin321.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 271px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/Sue5lcoZhPI/AAAAAAAABjE/S0LUAG7E9_4/s400/guqin321.bmp" alt="" id="BLOGGER_PHOTO_ID_5397486731418764530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.10.8----------------------&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/1008guqin3.ppt"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.9.23----------------------&lt;br /&gt;&lt;br /&gt;將ParserDialog中的括號拿掉,並新增英文介面.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SroitIfcokI/AAAAAAAABcI/QjtuLf5lVMA/s1600-h/En%E5%8E%BB%E6%8B%AC%E8%99%9F.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 272px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SroitIfcokI/AAAAAAAABcI/QjtuLf5lVMA/s400/En%E5%8E%BB%E6%8B%AC%E8%99%9F.bmp" alt="" id="BLOGGER_PHOTO_ID_5384654463243690562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.9.20----------------------&lt;br /&gt;&lt;br /&gt;現在終於把古琴的減字譜Parser改寫完成,剩下圖形部分.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SrXhYfM2f4I/AAAAAAAABbo/Tc2qC8_vHzs/s1600-h/11.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 272px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SrXhYfM2f4I/AAAAAAAABbo/Tc2qC8_vHzs/s400/11.bmp" alt="" id="BLOGGER_PHOTO_ID_5383456740399808386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SrXhgQ1u6EI/AAAAAAAABbw/dYVrUwxSrvs/s1600-h/22.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 271px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SrXhgQ1u6EI/AAAAAAAABbw/dYVrUwxSrvs/s400/22.bmp" alt="" id="BLOGGER_PHOTO_ID_5383456873983699010" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SrXhn0n23uI/AAAAAAAABb4/7TmlT0Afb9M/s1600-h/33.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 272px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SrXhn0n23uI/AAAAAAAABb4/7TmlT0Afb9M/s400/33.bmp" alt="" id="BLOGGER_PHOTO_ID_5383457003848261346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.8.22----------------------&lt;br /&gt;&lt;br /&gt;現在進行程式改寫，由於同時還有另一個project：&lt;br /&gt;&lt;br /&gt;Polyphonic Computer Music Authoring Tool 進行，&lt;br /&gt;&lt;br /&gt;是用Java寫的；鑒於之後程式碼移植方便，&lt;br /&gt;&lt;br /&gt;所以就用Java來改寫古琴程式，目前已做好介面，&lt;br /&gt;&lt;br /&gt;code改寫約完成5分之1，會繼續來寫。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/So_y-pDydOI/AAAAAAAABQ4/4zWJZ8XdhlI/s1600-h/qugintool1.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 271px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/So_y-pDydOI/AAAAAAAABQ4/4zWJZ8XdhlI/s400/qugintool1.bmp" alt="" id="BLOGGER_PHOTO_ID_5372780038463845602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;↑ 上圖是程式介面圖，中間三個的視窗可以放大縮小或隱藏，如下圖所示：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/So_0SIpbjqI/AAAAAAAABRA/PU4HlntTl-k/s1600-h/qugintool3.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 271px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/So_0SIpbjqI/AAAAAAAABRA/PU4HlntTl-k/s400/qugintool3.bmp" alt="" id="BLOGGER_PHOTO_ID_5372781472872369826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;↑ 此圖為顯示ParserTree放大，隱藏另兩個視窗。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/So_0sgFJgTI/AAAAAAAABRI/EdDC4jbjJxI/s1600-h/qugintool2.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 272px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/So_0sgFJgTI/AAAAAAAABRI/EdDC4jbjJxI/s400/qugintool2.bmp" alt="" id="BLOGGER_PHOTO_ID_5372781925839241522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;↑ 這張是以後完成的示意圖。&lt;br /&gt;&lt;br /&gt;現在左邊的輸入介面已完成，中間ParserTree尚未實作，&lt;br /&gt;&lt;br /&gt;圖中是直接輸入進去的，減字圖形要再修改大小，&lt;br /&gt;&lt;br /&gt;另外會有新功能：&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cut, copy, paste ; 英文介面 ; 英文輸入 ;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;修改字型 ; 還有老師提議的功能-輸入字後出現可選項目&lt;/span&gt;，&lt;br /&gt;&lt;br /&gt;也會加入，不過現在還在摸索中，繼續改寫程式！&lt;br /&gt;&lt;br /&gt;---------------2009.8.10----------------------&lt;br /&gt;論文報告&lt;br /&gt;&lt;a href="http://lib.tkk.fi/Diss/2006/isbn9512283891/article6.pdf"&gt;Model-based sound synthesis of the guqin&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-267a4ec442ff7308.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/qugin0811.ppt"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---------------2009.7.28----------------------&lt;p&gt;根據學長的連結來解釋一下連結內容&lt;/p&gt;&lt;p&gt;第一個連結是來自Google 所舉辦的計畫 &lt;a href="http://code.google.com/soc/"&gt;Summer of Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;主要是讓世界的學生參與撰寫開放原始碼軟體的project,從2005年開始舉辦.&lt;br /&gt;目的是讓參予者能從中接觸到業界軟體的開發方法與就業機會相關領域的學術活動,並且寫越多的免費原始碼,就能越造福全人類.&lt;br /&gt;&lt;br /&gt;此篇的project是&lt;a href="http://web.pdx.edu/%7Ecandy/qin/index.html"&gt;'Qin' notation web generator:古琴減字線上產生器&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;作者致力於此研究原因有兩點&lt;br /&gt;1.中國字較複雜需2bytes組成,不像英文只是26字母的排列組合簡易,中國字需花較多的時間創建font set.&lt;/p&gt;&lt;p&gt;2.在網路上瀏覽網頁,如果其字元並不符合用戶端電腦的font set,那就無法顯示.&lt;br /&gt;&lt;br /&gt;因此作者想要做一個能在線上組合的古琴編碼網頁,讓人輸入所需的&lt;span style="color: rgb(255, 0, 0);"&gt;圖樣代碼&lt;/span&gt;後,&lt;br /&gt;能在網頁上顯示相對應的減字譜.&lt;br /&gt;&lt;br /&gt;主要使用的文法如下:&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_8hIvM54kWX0/Sm6WJBuKbnI/AAAAAAAABFg/mf0qFuoO1Ls/s400/lang.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_8hIvM54kWX0/Sm6WJBuKbnI/AAAAAAAABFg/mf0qFuoO1Ls/s800/lang.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;並依每個指法自行畫出減字,又分為左右手兩類,&lt;a href="http://web.pdx.edu/%7Ecandy/qin/qin_char_lf.html"&gt;左手有87個&lt;/a&gt;,&lt;a href="http://web.pdx.edu/%7Ecandy/qin/qin_char_rt.html"&gt;右手有47個減字&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;程式輸入範例:&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;san_c&lt;/span&gt; gou_a yi_a @ =;&lt;br /&gt;er_b;&lt;br /&gt;san_a;&lt;br /&gt;ti_a_b san_a @;&lt;br /&gt;ming_b shi_b_b | tiao_a liu_d @ =;&lt;br /&gt;da_d jiu_c | si_d = liu_d =;&lt;br /&gt;po_a da_d qi_a liu_d = | qi_a = san_c liu_d = | =;&lt;br /&gt;jiu_d lun_b = qi_a =;&lt;br /&gt;tao_a_qi_c;&lt;br /&gt;tao_a_qi_c;&lt;br /&gt;shi_b_a qi_a | tiao_a si_d @ =;&lt;br /&gt;cuo_d da_d qi_a | tuo_a_b liu_d @ = @ zhong_a qi_a | gou_a yi_a @ = @;&lt;br /&gt;shao_c_xi_b;&lt;br /&gt;&lt;br /&gt;由於每個&lt;span style="color: rgb(204, 51, 204);"&gt;san_c&lt;/span&gt;,gou_a等等都是圖的檔名,所以要使用一定要配合圖片跟代碼一起看.&lt;/p&gt;例:&lt;br /&gt;&lt;img src="http://web.pdx.edu/%7Ecandy/qin/basic_char/san_c.gif" /&gt;&lt;br /&gt;san_c&lt;br /&gt;&lt;img src="http://web.pdx.edu/%7Ecandy/qin/basic_char/gou_a.gif" /&gt;&lt;br /&gt;gou_a&lt;br /&gt;&lt;p&gt;&lt;br /&gt;程式方面:&lt;/p&gt;&lt;p&gt;網頁上的Demo連結已無效,但有提供檔案下載,&lt;br /&gt;好像只能在Linux環境下執行,但我執行時還是有出錯,可能是因為沒有下載圖檔的關係.&lt;br /&gt;執行環境需求:Metapost, Perl, Convert&lt;br /&gt;&lt;br /&gt;Metapost是個語言可讓人用數學描述畫圖,語法來自&lt;a href="http://zh.wikipedia.org/wiki/Metafont"&gt;Metafont&lt;/a&gt;.&lt;br /&gt;Metapost-wiki : &lt;a href="http://zh.wikipedia.org/wiki/MetaPost"&gt;http://zh.wikipedia.org/wiki/MetaPost&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;網路上還有附上解說的網頁投影片:&lt;a href="http://web.pdx.edu/%7Ecandy/qin/tug05/open.html"&gt;http://web.pdx.edu/~candy/qin/tug05/open.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;**           **             **             **             **            **           **&lt;br /&gt;&lt;/p&gt;&lt;p&gt;第二個連結內容是中國音樂學(季刊) 2008年第2期,應該是大陸那邊的雜誌.&lt;br /&gt;&lt;br /&gt;標題是:&lt;a href="http://mac.xmu.edu.cn/Chinese/document/download/20081010140041.pdf"&gt;古琴減字譜的編碼與編輯方法&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;內容前段介紹古琴歷史,中間主要介紹老師所研究的減字譜編碼方式,&lt;br /&gt;&lt;br /&gt;後面提到他們所希望建構出軟體所具有的功能:&lt;br /&gt;&lt;br /&gt;包含&lt;/p&gt;&lt;p&gt; 1. 文件操作:新建,打開,保存,列印,關閉等&lt;br /&gt;2. 文件編輯:剪下,複製,貼上,查找,取代,全選,調整字體或字型等.&lt;br /&gt;3. 減字分類:將減字按照"散音","按音","泛音","其他減字"分成四大類,&lt;br /&gt;每一大類下又將它們按照不同的彈奏方法分成各個小類.&lt;br /&gt;4. 選擇減字:通過選擇某類減字,能顯示該類所有的減字,並按照需求再次進行選擇,&lt;br /&gt;並可對選擇的減字實現文件編輯功能,即複製貼上等.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;----------------2009.7.23----------------------&lt;/p&gt;  &lt;p&gt;我把我的那一串的內容貼過來, 原來的就讓它沉下去吧! 我順便把維城學長的回應記錄在這裡:&lt;/p&gt;  &lt;p&gt;無事google了一下，發現兩個有趣的相關的連結：&lt;br /&gt;1. Project Title: Chinese music instrument: 'Qin' notation web generator, http://web.pdx.edu/~candy/qin/index.html&lt;br /&gt;使用Metapost系統設計。&lt;br /&gt;2. mac.xmu.edu.cn/Chinese/document/attachment.asp?id=39&lt;br /&gt;這個比較無言一點，算是另類介紹我們實驗室的成果吧...&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;請你參考一下, 再跟我說這是什麼, 尤其是第一個link.&lt;/p&gt;  &lt;p&gt;你目前的這個程式畫面跟我以前看到瑋倫所完成的不太一樣, 我記得左邊是打中文輸入後的結果, 右邊是減字譜. 我們當時似乎是有幫忙標一下簡譜的. &lt;/p&gt;  &lt;p&gt;很好! 謝謝你這麼快的就有回應.&lt;/p&gt;  &lt;p&gt;----------------2009.7.22----------------------&lt;br /&gt;&lt;br /&gt;首先就先來簡介一下古琴&lt;span style="font-family:微軟正黑體;"&gt;減字譜&lt;/span&gt;軟體的功能。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;１。軟體主要介面&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSMTZCLhI/AAAAAAAABEk/BZ-u_4nAlmg/s400/1.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSMTZCLhI/AAAAAAAABEk/BZ-u_4nAlmg/s800/1.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;２。輸入介面，目前只支援中文輸入&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_8hIvM54kWX0/SmbSMiD4ONI/AAAAAAAABEo/GuWygfZHEtM/s400/2.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_8hIvM54kWX0/SmbSMiD4ONI/AAAAAAAABEo/GuWygfZHEtM/s800/2.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;３。輸入後，預設輸出Parser Tree為Infix&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_8hIvM54kWX0/SmbSNMrojdI/AAAAAAAABEw/IUE3WJJvf_U/s400/3.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_8hIvM54kWX0/SmbSNMrojdI/AAAAAAAABEw/IUE3WJJvf_U/s800/3.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;４。另外還有Posfix顯示&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSMyM8D8I/AAAAAAAABEs/2qwi-WVS-Gk/s400/4.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSMyM8D8I/AAAAAAAABEs/2qwi-WVS-Gk/s800/4.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;５。英文顯示，不過目前好像有錯誤&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_8hIvM54kWX0/SmbSNf2ZHPI/AAAAAAAABE0/s8GEqteRMEM/s400/5.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_8hIvM54kWX0/SmbSNf2ZHPI/AAAAAAAABE0/s8GEqteRMEM/s800/5.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;６。輸入法目前只支援中文，英文功能未定&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSN9IkkhI/AAAAAAAABE4/0rDQyUe1KNU/s400/6.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_8hIvM54kWX0/SmbSN9IkkhI/AAAAAAAABE4/0rDQyUe1KNU/s800/6.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;７。關於&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_8hIvM54kWX0/SmbSOHX9FLI/AAAAAAAABE8/5whmCEz03J8/s400/7.jpg" /&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_8hIvM54kWX0/SmbSOHX9FLI/AAAAAAAABE8/5whmCEz03J8/s800/7.jpg"&gt;顯示全圖&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;----------------------------------------------------------&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;2009,7/14&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;這是一個未完成的研究, 我們在未來一到兩年要把它完成. 最早是瑋倫學姊的古琴減字譜軟體的完成, 這是一個國科會數位典藏計劃的成果, 事實上受到許多人的重視, 不過跟多數的國科會計劃以及因為學生畢業的關係, 這個成果那時沒能延續下去. 多年來一直有人問, 連中研院院士都來問.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;當時未能延續下去的一大原因是雖然古琴減字譜的輸入法很好, 可是聲音的合成一直沒能突破, 直到最近, 小明學長對起頭音的分析, 文森學長的pitch/Partial Tracking有了一些成果, 看來應該是東山再起的時候了. 在此我向眾多關心的朋友說聲道歉.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;以下是相關的link:&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://guchin-nckucs.blogspot.com/2009/03/blog-post.html" target="_blank"&gt;&lt;span style="font-family:微軟正黑體;"&gt;古琴減字譜數位化&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://screamlab-ncku-2008.blogspot.com/2008/11/20081118-centcent.html" target="_blank"&gt;&lt;span style="font-family:微軟正黑體;"&gt;Centcent's Pitch and Partial Tracking&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;等小明過幾天把減字譜軟體頁面的圖準備好, 我再來更新.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;由於古琴聲音與演奏的特性, 文森學長的pitch/Partial Tracking事實上需要一定程度的修改, 或者正確一點的說是Customization, 也就是量身訂做. &lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;同樣的, 我來起這一串, 接著就由仕偉來接續. 第一個工作當然是把減字譜軟體回復, 這一部分比較簡單. 但是聲音的部分就困難一點. 整個軟體要怎麼做, 我會跟相關的人討論. 而要做的事情如下:&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;1. 琴音的分析, 也就是pitch/Partial Tracking, 這一部分會比較簡單, 因為我可以把音一個個分開來彈.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;2. 分析結果的修正, 這一部分恐怕暫時需要人工來做, 不過SW工具還是需要的, 這部分可以跟authoring tools那邊合在一起, 所以這部分建議做成一個外掛. 我們再來討論要怎麼分工.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;3. 根據輸入的減字將每個音合成出來, 這部分要動用additive synthesis以及起頭音合成, 我還不知道小明對提琴的起頭音那部份的成果是否可以直接用過來, 不過值覺是可以的.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;4. 根據使用者對演奏articulation上的需求(多半指的是滑音, 少數是其他技法), 重新在合成.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;5. 將每一個合成的音照使用者指定的時間排好.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;至於其他的事就等這些做好再說!好吧! Let's go!&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:微軟正黑體;"&gt;對了, 請以後將這串同時update到: &lt;/span&gt;&lt;a href="http://guchin-nckucs.blogspot.com/2009/03/blog-post.html" target="_blank"&gt;&lt;span style="font-family:微軟正黑體;"&gt;古琴減字譜數位化&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:微軟正黑體;"&gt;. 感謝!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-8047694133809832993?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/8047694133809832993/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=8047694133809832993' title='12 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8047694133809832993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8047694133809832993'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2009/07/qin-synthesis-and-sw-tools_22.html' title='Qin Synthesis and SW tools - 仕偉'/><author><name>Wayne</name><uri>http://www.blogger.com/profile/15482571947842462955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_8hIvM54kWX0/Sf05vNv9xSI/AAAAAAAAAAM/YxCeks-IyqQ/S220/%E5%B0%81%E9%9D%A2%E5%9C%96.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-XlV7ts-buT4/TYYR5QjMsiI/AAAAAAAAC40/fHQkREdA-So/s72-c/main2.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-4608613221788741026</id><published>2011-03-01T16:55:00.014+08:00</published><updated>2011-05-19T22:22:11.409+08:00</updated><title type='text'>[課程] 高速運算應用與多核心系統</title><content type='html'>&lt;span style="font-weight:bold;"&gt;2011/05/19&lt;/span&gt;&lt;br /&gt;==========================================&lt;br /&gt;Server 已經好了，請大家連線寫程式。&lt;br /&gt;之前提供的 library 有 Bug，已經修改好，麻煩同學重新下載。&lt;br /&gt;&lt;br /&gt;有同學說他在 console 下不能執行 spcishell，那應該是權限問題，&lt;br /&gt;請開啟 console，移動到 spcishell 所在資料夾，輸入 "chmod 755 spcishell"，即可。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011/04/11&lt;/span&gt;&lt;br /&gt;==========================================http://www.blogger.com/img/blank.gif&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;br /&gt;請同學下載這份文件，並且根據內容練習一下用 &lt;br /&gt;SCREAM Processor-Cluster Simulator 寫程式吧，&lt;br /&gt;如果有任何問題，請聯絡陳威佐。&lt;br /&gt;&lt;br /&gt;http://ludwig.csie.ncku.edu.tw/members/Longest/SPCIshell_new.rar&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011/03/29&lt;/span&gt;&lt;br /&gt;==========================================&lt;br /&gt;上次老師講課的投影片(MIT Course)&lt;br /&gt;http://ludwig.csie.ncku.edu.tw/members/Longest/MIT_courses.rar&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011/03/08&lt;/span&gt;&lt;br /&gt;==========================================&lt;br /&gt;請於下周一 3/14，11:59:59 PM 前繳交 CUDA 作業。&lt;br /&gt;&lt;br /&gt;下周易聰、翊臺將會講解他們要開發的 Application，&lt;br /&gt;&lt;br /&gt;威佐也會講解 SCREAM Processor Cluster Platform。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011/03/01&lt;/span&gt;&lt;br /&gt;==========================================&lt;br /&gt;課程老師: 蘇文鈺 &lt;br /&gt;Email: alvinsu@mail.ncku.edu.tw&lt;br /&gt;&lt;br /&gt;課程助教: 陳孇瑀 (Cuda)&lt;br /&gt;Email: bbh4747@hotmail.com &lt;br /&gt;&lt;br /&gt;課程助教: 陳威佐 (Scream Multicore)&lt;br /&gt;Email: prodigyjerry@gmail.com &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;本次上課內容: 講解 CUDA，以及各位同學報告想作的應用。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;今天上課上的 CUDA 教學可以到此下載:&lt;/span&gt;&lt;br /&gt;http://0rz.com/hj3aC1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;FTP為:&lt;/span&gt;&lt;br /&gt;140.116.82.184:21&lt;br /&gt;course/course&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-4608613221788741026?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/4608613221788741026/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=4608613221788741026' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4608613221788741026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4608613221788741026'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/03/blog-post.html' title='[課程] 高速運算應用與多核心系統'/><author><name>雨人</name><uri>http://www.blogger.com/profile/09296459963163649481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6999515804128327996</id><published>2011-03-01T11:22:00.001+08:00</published><updated>2011-03-01T11:25:54.986+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Meetings'/><category scheme='http://www.blogger.com/atom/ns#' term='SCREAMLab. 活動預告與紀實'/><title type='text'>新一學期group meeting報告順序</title><content type='html'>教室我一路借到8月了，不過碩二口試時間通常在七月底，因此我只排到七月初。碩二同學請每週報告進度。&lt;br /&gt;&lt;br /&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;2011&lt;/span&gt;&lt;span style="font-family: 標楷體; font-size: small;"&gt;年&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;group meeting &lt;/span&gt;&lt;span style="font-family: 標楷體; font-size: small;"&gt;報告成員&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;日期&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;報告成員&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;3/7&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;翊臺、易聰&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;3/14&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;威佐、玉琳&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;3/21&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;大鈞、依諴&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;3/28&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;君宇、偉翔&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;4/4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;兒童節&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;4/11&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;翊臺、易聰&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;4/18&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;威佐、玉琳&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;4/25&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;大鈞、依諴&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;5/2&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;君宇、偉翔&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;5/9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;翊臺、易聰&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;5/16&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;威佐、玉琳&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;5/23&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;大鈞、依諴&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;5/30&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;君宇、偉翔&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;6/6&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;端午節&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;6/13&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;翊臺、易聰&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;6/20&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;威佐、玉琳&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;6/27&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;大鈞、依諴&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;7/4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 277.7pt;" valign="top" width="370"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;新細明體&amp;quot;,&amp;quot;serif&amp;quot;; font-size: small;"&gt;君宇、偉翔&lt;/span&gt;&lt;span lang="EN-US" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-6999515804128327996?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/6999515804128327996/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=6999515804128327996' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6999515804128327996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6999515804128327996'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/09/group-meeting.html' title='新一學期group meeting報告順序'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-1846796941569760235</id><published>2011-02-28T18:54:00.001+08:00</published><updated>2011-02-28T19:04:07.817+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='ESL'/><category scheme='http://www.blogger.com/atom/ns#' term='Multicore'/><title type='text'>Multi Arm - 哲榮</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2011.02.28&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;1.&lt;/div&gt;&lt;div&gt;原本DPSRAM在CPU端與FPGA端的Memory map空間是同一塊,但是有byte addressing與word addressing的差異&lt;/div&gt;&lt;div&gt;但是依照上述方式測試時有錯,後來發現在Driver中已經先行把輸入的address*2&lt;/div&gt;&lt;div&gt;使的FPGA端與CPU端的都是以word addressing的方式存取DPSRAM&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.&lt;/div&gt;&lt;div&gt;測試並確定&lt;/div&gt;&lt;div&gt;FPGA的4 bit address (0x0~0xF) 對應到CPU的address為(0x180~0x18F)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;3.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;DPSRAM Interface電路完成但尚未測試完全&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2011.02.19&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;MVC100透過IDE HDD與FPGA進行溝通&lt;/div&gt;&lt;div&gt;溝通方式是在MVC100版子有塊Dual Port SRAM(DPSRAM)&lt;/div&gt;&lt;div&gt;CPU跟FPGA皆可以存取此塊DPSRAM再加上介面提供的Interrupt機制&lt;/div&gt;&lt;div&gt;CPU與FPGA便可以透過DPSRAM交換資料&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但是交換資料的協定必須要自己設計&lt;/div&gt;&lt;div&gt;目前的規劃是以CPU主動下命令給FPGA&lt;/div&gt;&lt;div&gt;CPU把read / write command、address、size寫入到DPSRAM上,並且發出interrupt給FPGA&lt;/div&gt;&lt;div&gt;FPGA收到interrupt後,便讀取DPSRAM上的命令,依據讀取到的命令做動作:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. CPU發出Read指令 : &lt;/div&gt;&lt;div&gt;FPGA將CPU要讀取的資料寫入到DPSRAM上,並且發出Interrupt給CPU來讀取&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. CPU發出Write指令:&lt;/div&gt;&lt;div&gt;FPGA等待第二次CPU發出的interrupt通知 (第一次interrupt是Read/Write命令)&lt;/div&gt;&lt;div&gt;收到Interrupt,便讀取DPSRAM上的data,並寫入到FPGA的SRAM&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;目前正在以上述的協定改電路以及Driver&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2011.01.23&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;因為目前MVC100的板子還在測試&lt;/div&gt;&lt;div&gt;因此士敦學長希望可以試著在friendly arm上跑MPI測試&lt;/div&gt;&lt;div&gt;但由於需要額外安裝MPI所需的物件 如:python、ssh&lt;/div&gt;&lt;div&gt;再加上士敦學長使用的arm-linux-gcc版本不同&lt;/div&gt;&lt;div&gt;因此需要重編他修改過的MPI&lt;/div&gt;&lt;div&gt;後來直接借他一顆friendly arm移植MPI&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MVC100目前已經可以跑一輝學長的sram與fpga溝通範例&lt;/div&gt;&lt;div&gt;OS: linux2.6.28  (沒有android)&lt;/div&gt;&lt;div&gt;因為排線目前只接出部分sram的address與data腳位&lt;/div&gt;&lt;div&gt;只能使用4個bit   address[3:0]、data[3:0]&lt;/div&gt;&lt;div&gt;範例執行結果:&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_ExHjQLI45ro/TTwTgbgarxI/AAAAAAAAAI0/fO2kExwKBhk/s400/mvc_ex.jpg" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 210px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5565344687383555858" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;接下來會試著修改driver以及範例電路為我的InterConnect架構&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2011.01.17&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Friendly arm已經把傳輸的protocol寫入到driver&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;並且也已經改成士敦學長的架構 （每個connection對應一個file descriptor）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;剩下system call poll()還沒有實做&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;MVC100用廠商附的linux 2.6.28加上driver編譯完成&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;但是廠商附得file system是read-only的,所以在開機完後drvier掛不上去&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;這部份文森學長還要花點時間幫忙&lt;/span&gt;&lt;/div&gt;&lt;div&gt;所以就先換跑android版本的範例,但是一輝學長給的kernel image在開機的時候會有kernel panic的問題,我會再去問一下或者我目前有也有重編的android版本的linux kernel（2.6.27）再測看看&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2011.01.10&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;friendly arm更改linux char driver的kernel function&lt;/div&gt;&lt;div&gt;原先使用memcpy()去存取fpga對應的virtual address&lt;/div&gt;&lt;div&gt;改成宗胤學長建議的ioread() , iowrite()&lt;/div&gt;&lt;div&gt;發現read指令的CS , OE訊號會有兩個low trigger的情況 沒有了&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;把呼叫driver的file descriptor函式換成linux system call &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; "&gt;&lt;span class="Apple-style-span"&gt;&lt;pre class="code" style="font-family: monospace; padding-top: 0px; padding-right: 2em; padding-bottom: 0px; padding-left: 0px; "&gt;int open(const char *pathname, int flags)&lt;/pre&gt;&lt;pre class="code" style="font-family: monospace; padding-top: 0px; padding-right: 2em; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; white-space: normal; "&gt;&lt;pre class="code" style="font-family: monospace; padding-top: 0px; padding-right: 2em; padding-bottom: 0px; padding-left: 0px; "&gt;ssize_t read(int fd, void *buf, size_t count);&lt;/pre&gt;&lt;pre class="code" style="font-family: monospace; padding-top: 0px; padding-right: 2em; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; white-space: normal; "&gt;ssize_t write(int &lt;i style="font-style: italic; "&gt;fd&lt;/i&gt;, const void *&lt;i style="font-style: italic; "&gt;buf&lt;/i&gt;, size_t &lt;i style="font-style: italic; "&gt;count&lt;/i&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;不使用c lib提供的fopen fread fwrite&lt;/div&gt;&lt;div&gt;就會解決driver command延遲的問題&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;mvc100目前正試著執行一輝學長的範例&lt;/span&gt;&lt;/div&gt;&lt;div&gt;目前順利編譯好linux kernel 2.6.28&lt;/div&gt;&lt;div&gt;但是開機後掛載driver的步驟還有問題 要再請教一下學長&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;2010.12.29&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;搞定第三顆ARM了 (把sdcard的資料刪一刪後就又可以使用了)&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;另外還有跟士敦學長討論MPICH2 Multi-Arm driver的部分&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;因為學長目前的架構是每個connection各有一個file descriptor負責處理傳輸&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;如下圖&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;img src="http://2.bp.blogspot.com/_ExHjQLI45ro/TRxTFSkmdAI/AAAAAAAAAIk/ZL16Jpq4aVw/s320/one_fd_one_connection.jpg" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 282px; height: 320px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5556407390618153986" /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;因此使用者呼叫Driver時不需要給driver 目的ARM對應的memory map addr&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;driver自行根據fd的minor number判斷目的ARM的&lt;/span&gt;&lt;span class="Apple-style-span"&gt;memory map addr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;呼叫driver的方式使用linux system call :&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; "&gt;ssize_t write(int &lt;i style="font-style: italic; "&gt;fd&lt;/i&gt;, const void *&lt;i style="font-style: italic; "&gt;buf&lt;/i&gt;, size_t &lt;i style="font-style: italic; "&gt;count&lt;/i&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; "&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre; "&gt;ssize_t read(int fd, void *buf, size_t count);&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;&lt;a href="http://linux.die.net/man/2/write"&gt;http://linux.die.net/man/2/write&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;a href="http://linux.die.net/man/2/read"&gt;&lt;span class="Apple-style-span"&gt;http://linux.die.net/man/2/read&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;而我目前的架構是一個file descriptor負責所有的connection傳輸&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;如下圖&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;img src="http://4.bp.blogspot.com/_ExHjQLI45ro/TRxTMA6JO9I/AAAAAAAAAIs/njoBsFn966M/s320/one_fd_all_connection.jpg" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 289px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5556407506135759826" /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;因此使用者呼叫Driver時要給driver 目的ARM對應的memory map addr&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;呼叫driver的方式使用C Lib的: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;b&gt;size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;b&gt;size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/"&gt;http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/fread/"&gt;http://www.cplusplus.com/reference/clibrary/cstdio/fread/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;目前會再做一版driver配合MPICH2的修改&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;還有跟文森學長借MVC100測一下InterConnect Circuit、Driver、EBI...&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;-------------------------------------&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;div&gt;2010.12.20&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;Driver裡的read , write函式&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;write(struct file *filp, const char *buff, size_t count, loff_t *offp)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;read(struct file *filp, char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;其中count可以拿到使用者API要存取的總size大小 bytes&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;例:&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;fwrite(DataBuf , size , cnt , fd);&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;則driver裡收到的count大小為  size * cnt   (單位bytes)&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;並且測試後發現說fwrite(DataBuf , size , &lt;span class="Apple-style-span"&gt;cnt&lt;/span&gt; , fd);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;cnt並不能決定&lt;/span&gt;&lt;span class="Apple-style-span"&gt;write(struct file *filp, const char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;被呼叫的次數&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;是write()的return值決定呼叫次數&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;例:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;fwrite(DataBuf , size=1 , cnt=10 , fd);    //總共10 bytes資料要寫入&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;write&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;(struct file *filp, const char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;span class="Apple-style-span"&gt;return 5&lt;/span&gt;;  //假設每次呼叫都只寫入5 bytes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;則OS會去呼叫write()兩次來符合總大小10 bytes&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;因此做過一個測試就是故意讓write()只return 0;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;發現write()函式會一直被呼叫&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;但是&lt;/span&gt;&lt;span class="Apple-style-span"&gt;read(struct file *filp, char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;不論fread(DataBuf , size , cnt , fd);  的 size * cnt 值為多少&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;count的值始終是4096&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;在無法得知總bytes的情況下,我改成從FPGA上的PacketSize取得要讀取的總bytes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;歸納一下目前做的&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;1. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 6.25px; "&gt;&lt;span class="Apple-style-span"&gt;write&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;(struct file *filp, const char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;a . OS會一直呼叫write()直到return value總合等於API要求的大小&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;b . 測試發現不能寫成只呼叫一次write()就把所有資料(比如10bytes)寫到FPGA電路上&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;     假設呼叫write()一次,寫8 bytes,則只有前2 bytes被寫出去&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;     所以後來寫成每次呼叫只寫2 bytes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;c . blocking , 直到寫完API要求的大小才停止&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 11.1111px; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;2. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 4.34028px; "&gt;&lt;span class="Apple-style-span"&gt;read&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;(struct file *filp, const char *buff, size_t count, loff_t *offp)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;a . OS同樣會一直呼叫read()直到return value&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;總合等於API要求的大小&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;     但是在return value總和還沒達到API要求的大小時 , 出現return 0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;     則OS不會再繼續呼叫read()並且fread()的return size為目前的總bytes(不一定等於API要求的大&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;     小)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;     &lt;span class="Apple-style-span"&gt;但是write()並不會因為有return 0出現,OS就停止呼叫write()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;     而是會繼續呼叫write()直到return值符合為止&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;b . read()可以一次呼叫就把所有的資料讀進來&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;     &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;假設呼叫read()一次,讀10 bytes,可以正常讀取&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;     因此read()我實作成呼叫一次就讀完8 bytes(看API層要求的大小決定)資料&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;c . blocking  , &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;直到讀完API要求的大小才停止&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;但是寫完上述的driver function&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;發現在每次讀寫memory前,必須先去檢查PacketSize的值的動作會有錯誤&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;(PacketSize就是記錄目前這塊memory裡面有多少bytes的資料)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;原因是因為driver command延遲的問題&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;driver呼叫write()後memory bus應該要馬上有訊號發出&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;但是mini2440的卻會延遲直到read()被呼叫後memory bus才發出write()的訊號&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;但是write()的實作動作為 , 寫memory前要先檢查PacketSize是否為0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;否則就要block  , 等待PacketSize = 0時才可以做寫入的動作&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;但是延遲的關係 , 當下抓到的PacketSize值並不是memory bus有動作所抓到的值&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;例:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;fwrite();   //block在迴圈裡 一直檢察PacketSize&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;fread();    //memory bus的訊號發出write()的訊號&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;如上 PacketSize的值並不是實際電路上的PacketSize值&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;而且也無法抓到 因為block住的關係  fread()無法被呼叫&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;同樣read()也有此問題&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;-------------------------------------&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;div&gt;2010.12.13&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%; "&gt;跟楊老師實驗室借了兩條USB轉RS232,目前可以看到同時執行的過程&lt;br /&gt;所以直接開始改driver,把傳輸的protocal寫在driver裡面&lt;br /&gt;以及實做Send()和Receive()兩個API函式 作為之後SPCI使用的傳輸函式&lt;br /&gt;&lt;br /&gt;目前driver的write function可以正常執行&lt;br /&gt;但是read function從OS收到的傳輸byte數的值還有問題 還在找是什麼原因&lt;br /&gt;&lt;br /&gt;另外還有發現先前memory bus的address 0不能用的問題&lt;br /&gt;並不是不能用 是因為bus沒有byte enable的控制&lt;br /&gt;因此一次傳輸一定是2 bytes的data （16 bit)&lt;br /&gt;因此要寫奇數的address時,bus會從address-1 寫16 bits&lt;br /&gt;&lt;br /&gt;然而那時後的誤認,把address先往左shift 1位 (乘2)&lt;br /&gt;然後在電路裡面再取addr[6:1]來使用&lt;br /&gt;讓原本是byte addressing的mini2440變成是word addressing&lt;br /&gt;如下所示&lt;br /&gt;&lt;br /&gt;原先：&lt;br /&gt;11111111 0x00&lt;br /&gt;11111111 0x01&lt;br /&gt;11111111 0x02&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 15px; "&gt;&lt;span style="font-size:100%;"&gt;11111111 0x03&lt;br /&gt;&lt;br /&gt;*2後,並且只取addr[6:1]作為address：&lt;br /&gt;11111111 11111111 0x00&lt;br /&gt;11111111 11111111 0x01&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 100%; "&gt;目前就先不修改這部份&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;-------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15px; "&gt;&lt;div&gt;2010.12.02&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;測試過後發現是V4 FPGA的 GPIO有問題 (J2.8 botton )&lt;/div&gt;&lt;div&gt;J2.8 botton剛好接到friendly arm2的CS pin &lt;/div&gt;&lt;div&gt;目前把ARM2移到J1 botton的位置&lt;/div&gt;&lt;div&gt;目前三顆可以正常存取FPGA上的memory&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接下來會開始測大量資料的傳輸&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.11.28&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;兩顆friendly arm接上fpga的GPIO了&lt;/div&gt;&lt;div&gt;兩顆分別測試存取InterConnect的ram可以正常存取&lt;/div&gt;&lt;div&gt;但是還沒有測同時跑的狀況 , 因為只PC有一條com port...&lt;/div&gt;&lt;div&gt;我會再寫個java層的ap去call linux driver&lt;/div&gt;&lt;div&gt;直接在LCD上操作來測試兩顆ARM同時跑的情況&lt;/div&gt;&lt;div&gt;沒問題就繼續接第三顆&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.11.25&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;因為在連續讀取多筆資料時產生錯誤&lt;/div&gt;&lt;div&gt;後來實際去看邏輯分析儀發現讀取多筆資料時&lt;/div&gt;&lt;div&gt;每次的讀取訊號之間會夾雜一個單一的CS和OE的low trigger&lt;/div&gt;&lt;div&gt;如圖所示 : 這是連續讀兩筆的訊號&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_ExHjQLI45ro/TPH-_nMiFTI/AAAAAAAAAIA/UnVQwu6QpS4/s400/mini2440_bus_burst_read.bmp" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 77px;" alt="" id="BLOGGER_PHOTO_ID_5544492985076553010" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;紅色框圈出來的就是夾雜的訊號&lt;/div&gt;&lt;div&gt;紅色框的部分系統總線給的address並不是driver所下的address&lt;/div&gt;&lt;div&gt;並且在這段時間任意給系統總線data值也不會影響driver實際讀到的值&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;實際在測時發現紅色框的訊號有時不會出現= ="&lt;/div&gt;&lt;div&gt;原因不明...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因此我的fifo的架構抓不準何時該讀出資料&lt;/div&gt;&lt;div&gt;若要解決需要改很滿多地方...&lt;/div&gt;&lt;div&gt;後來就還是換回用ram當儲存空間的InterConnect circuit&lt;/div&gt;&lt;div&gt;arm與arm之間交換資料的ram的大小為 16bit data , 0~4 address&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;div size="15.9722px"&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.11.09&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div size="15.9722px"&gt;測試我的InterConnect circuit正確性&lt;/div&gt;&lt;div size="15.9722px"&gt;InterConnect circuit的memory用的是Xilinx ip gen產生的fifo (16bit data , 0~1024 address)&lt;/div&gt;&lt;div size="15.9722px"&gt;目前可以正常執行單筆資料(16bit data)的讀和寫&lt;/div&gt;&lt;div size="15.9722px"&gt;(friendly arm以word address來看,單一address有16bit的資料)&lt;/div&gt;&lt;div size="15.9722px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;memory map的部分又有再更動 , 因為Friendly arm的系統總線提供的address pin&lt;/div&gt;&lt;div&gt;&lt;div&gt;LADDR24 – not continue&lt;/div&gt;&lt;div&gt;LADDR0  - specific capability   要使用的話必須再去更改driver的設定  詳細我沒有去探究&lt;/div&gt;&lt;div&gt;總之就只剩LADDR1~LADDR6 可以用 因此調整packet size從2個word改成1個word&lt;/div&gt;&lt;div&gt;(1 word = 16 bit)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;說明一下系統總線的存取memory的時脈波形圖&lt;/div&gt;&lt;div&gt;以SMIMS USB在使用的APP_CLK (48Hz)為InterConnect circuit的clk&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Write :&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_ExHjQLI45ro/TPH8ZszrKZI/AAAAAAAAAHw/3fHYh7ipfj0/s400/mini2440_bus_write.JPG" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 145px;" alt="" id="BLOGGER_PHOTO_ID_5544490134724618642" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;當CS和WE為low trigger時&lt;/div&gt;&lt;div&gt;大約在第四個clock 系統總線Data和Address Pin的值才會開始是正確的&lt;/div&gt;&lt;div&gt;因此我的做法是在第四個clock去抓正確的address和data&lt;/div&gt;&lt;div&gt;第五個clock才把我電路fifo的write enable拉起來寫入值&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Read :&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_ExHjQLI45ro/TPH8itI6WWI/AAAAAAAAAH4/cVWHBXh0o6w/s400/mini2440_bus_read.JPG" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 144px;" alt="" id="BLOGGER_PHOTO_ID_5544490289432516962" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;當CS和OE為low trigger時&lt;/div&gt;&lt;div&gt;大約在第五個clock 必須把正確的data值給系統總線讀取&lt;/div&gt;&lt;div&gt;因此我的做法是在第三個clock去抓要讀取的address 並且把fifo的read enable拉起來&lt;/div&gt;&lt;div&gt;讓fifo能夠在第四個clock讀出值並在第五個clock把值給系統總線&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;要注意的是系統總線發出的單筆16bit的read訊號會有兩個low trigger&lt;/div&gt;&lt;div&gt;原先北翰的範例使用ram當儲存空間時,這兩個low trigger的讀取並不會改變ram裡面的值&lt;/div&gt;&lt;div&gt;但是我的InterConnect是使用fifo,因此再遇到這兩個low trigger時會讀出連續兩個address的值&lt;/div&gt;&lt;div&gt;並且由於是fifo,讀出的資料便會從fifo消失 因此會有問題&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我的解決辦法是只再第一個low trigger時才去讀取fifo的值&lt;/div&gt;&lt;div&gt;並且把讀出來的值存再flip flop中維持兩個low trigger的時間&lt;/div&gt;&lt;div&gt;(因為兩個low trigger都要提供系統總線一樣的值,否則friendly arm讀到的值會不完整)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;電路圖因為放上來有點模糊&lt;/div&gt;&lt;div&gt;參考投影片的82,83頁&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9JROslUOqrjNjVjMGY3NDEtZTkzZi00YmE4LTg0OGUtNTk5NDUwNzViYjRh&amp;amp;hl=en"&gt;https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9JROslUOqrjNjVjMGY3NDEtZTkzZi00YmE4LTg0OGUtNTk5NDUwNzViYjRh&amp;amp;hl=en&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;-------------------------------------&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;div&gt;2010.10.27&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;成功把北翰公司提供的範例跑起來了&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;範例是Friendly ARM透過系統總線(com)以排線與Xilinx V4 FPGA版的GPIO相接&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;fpga上的電路組成是一個state machine與一塊的 ram(16bit data , 10 bit address)&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;不過因為系統總線的address pin只能夠使用6 bit,因此fpga上的memory只有使用address;0~63&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;Friendly ARM上boot android並且在linux kernel新增driver來存取fpga上的ram&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;此外還有bcb實作的ui可以透過usb顯示fpga上ram的每個address的值&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;但是此ui在執行open實會將範例電路的bit檔燒進fpga,我又懶的再去裝bcb去改code後來就直接在friednly arm上呼叫driver去驗證ram上的值是否正確&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;範例發現三個問題:&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;1. 讀取memory的值時一些address會讀到不是我剛剛寫入的值&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;已解決---&gt;因為read的時脈沒有對準,以APP_CLK為基準大約在第四個clock,friendly arm才會讀取ram的值&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;2. CS、OE、WE會有雜訊出現&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;減少雜訊---&gt;用一個clock generator產生一個較快的時脈去過濾訊號,讓雜訊持續的時間不到一個clock&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;3. 對driver下的read和write指令會延遲到下一個指令系統總線才會發出訊號&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;比如說下兩個指令&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;fwrite(Buffer , 1 , DataSize , fp);&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;fread(...);&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;則在fwrite當下 系統總線並不會發出寫入ram的訊號&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;此訊號會在fread當下才發出&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;而fread的訊號只會在fwrite之後才會發出&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;像這個例子就是會在fread時系統總線連續發出兩個指令 : 寫入  讀取&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;而當連續下fread指令時只有第一個接在fwrite後的fread系統總現有讀取訊號發出&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;如: fwrite  &lt;span class="Apple-style-span"&gt;fread  &lt;/span&gt;&lt;span class="Apple-style-span"&gt;fread  fread... &lt;/span&gt;只有第一個&lt;span class="Apple-style-span"&gt;fread&lt;/span&gt;的訊號有效&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;找不到原因  因此在使用driver時必須讓read write交錯呼叫才能正常運作&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;-------------------------------------&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;div&gt;2010.06.18&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;完成&lt;span class="Apple-style-span" style="font-size:15;"&gt;SystemC model與四個Qemu相接的模擬器&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 15.9722px;"&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;其架構圖如下&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ExHjQLI45ro/TOzfGEPumUI/AAAAAAAAAHY/meI3d_0QBAQ/s1600/QEMU_SYSTEMC.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 279px;" src="http://1.bp.blogspot.com/_ExHjQLI45ro/TOzfGEPumUI/AAAAAAAAAHY/meI3d_0QBAQ/s400/QEMU_SYSTEMC.jpg" alt="" id="BLOGGER_PHOTO_ID_5543050536698157378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;使用宗胤學長修改的android QEMU&lt;/div&gt;&lt;div&gt;其QEMU能透過driver去存取PC上的Posix Shared Memory&lt;/div&gt;&lt;div&gt;利用此功能,我再寫了四個wrapper SystemC model負責把Shared Memory的資料傳給InterConndet Module以及把&lt;span class="Apple-style-span" style="font-size:15;"&gt;InterConndet Module要丟給QEMU的資料寫入到Shared Memory&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;實作兩個傳輸使用的C++ API : &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Void  Multi_ARM_Send(int CoreID , char* Buf , int DataSize);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;CoreID    : 目的地ARM的ID&lt;/div&gt;&lt;div&gt;Buf          : Data buffer&lt;/div&gt;&lt;div&gt;DataSize : 欲傳輸的資料大小( bytes )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Int Multi_ARM_Receive(int SourceID , int Total_Size);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;SourceID    : 來源ARM的ID&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;Total_Size : 欲接收的資料大小( bytes )  ,必須收滿Total_Size此函式才會return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;Return int  : 實際接收的資料大小 ( bytes )&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15;"&gt;上述兩個API會去呼叫底層的driver完成傳輸的動作&lt;/span&gt;&lt;/div&gt;&lt;div&gt;若fpga上的傳輸空間尚有資料無法寫入或者沒有資料可以讀取------------(a)&lt;/div&gt;&lt;div&gt;此兩個api便會以blocking的方式等待,直到空間空出來&lt;/div&gt;&lt;div&gt;不過後來跟張老師LAB討論過之後這兩個API會拿掉,把傳輸的動作移到driver裡&lt;/div&gt;&lt;div&gt;並且若發生(a)的狀況,直接return 不等待 回傳實際寫入、讀取的資料大小&lt;/div&gt;&lt;div&gt;以(a)的狀況而言回傳的值為 0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.06.02&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;因為考慮到每顆ARM只有接Addr、Data、control signal到傳輸會用到的Sram上&lt;/div&gt;&lt;div&gt;整個memory map的大小是16KB,但是實際可以存取的只有7KB&lt;/div&gt;&lt;div&gt;我想把空下來沒用到的memory map拿掉&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;比如說&lt;/div&gt;&lt;div&gt;Arm0所能看到的memory map 為0x4000~0x7FFF&lt;/div&gt;&lt;div&gt;但是Arm0實際硬體有接線的addr為 &lt;/div&gt;&lt;div&gt;0x4000~0x4FFF  :  4KB&lt;/div&gt;&lt;div&gt;0x5000~0x53FF  :  1KB&lt;/div&gt;&lt;div&gt;0x6000~0x63FF  :  1KB&lt;/div&gt;&lt;div&gt;0x7000~0x73FF  :  1KB&lt;/div&gt;&lt;div&gt;其它硬體沒有接線的addr且Driver必須限制不能存取的addr共有9KB&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我的想法是既然只有接線到部分的sram&lt;/div&gt;&lt;div&gt;那沒接線的sram就不要配入Memory map裡面&lt;/div&gt;&lt;div&gt;所以讓每個Arm看到的Memory map都一樣而且只有8KB&lt;/div&gt;&lt;div&gt;比如說&lt;/div&gt;&lt;div&gt;Arm0所能看到的memory map 為0x1000~0x2FFF,共有8KB&lt;/div&gt;&lt;div&gt;[只能Write的部分]&lt;/div&gt;&lt;div&gt;0x1000~0x13FF :　要傳給Arm0的資料  (1KB) &lt;/div&gt;&lt;div&gt;0x1400~0x17FF :　要傳給Arm1的資料   (1KB)&lt;/div&gt;&lt;div&gt;0x1800~0x1BFF :　要傳給Arm2的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x1C00~0x1FFF :　要傳給Arm3的資料  (1KB)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[只能Read的部分]&lt;/div&gt;&lt;div&gt;0x2000~0x23FF :　收來自Arm0的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2400~0x27FF :　收來自Arm1的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2800~0x2BFF :　收來自Arm2的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2C00~0x2FFF :　收來自Arm3的資料  (1KB)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其中0x1000~0x13FF、0x2000~0x23FF對Arm0的實際硬體來說是同一塊Sram&lt;/div&gt;&lt;div&gt;如下圖所示&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ExHjQLI45ro/TAX2FoSmYtI/AAAAAAAAAGo/cDUahfX9_BQ/s1600/1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 49px;" src="http://4.bp.blogspot.com/_ExHjQLI45ro/TAX2FoSmYtI/AAAAAAAAAGo/cDUahfX9_BQ/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5478055098341286610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這張圖是Arm0的memory map所對應的實際硬體&lt;/div&gt;&lt;div&gt;每個長方型都是一個實體的sram&lt;/div&gt;&lt;div&gt;裡面的兩個數字是 起始Addr 與 結束Addr&lt;/div&gt;&lt;div&gt;有數字的部分就是Arm0實際有接線的sram&lt;/div&gt;&lt;div&gt;其中左上角那塊有重複的Addr (0x1000~0x13FF  和  0x2000~0x2FF)&lt;/div&gt;&lt;div&gt;因為這塊是屬於Arm0丟資料給Arm0的區塊&lt;/div&gt;&lt;div&gt;這部分我希望直接在Driver中做判斷,假如是要丟資料給本身&lt;/div&gt;&lt;div&gt;即不經過硬體做資料交換,直接丟給Arm0的local memory&lt;/div&gt;&lt;div&gt;然後發個Interrupt告訴自己有資料進入&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;下面這張圖則是Arm1的memory map實際對應的硬體&lt;/div&gt;&lt;div&gt;Arm1同樣的也是看到8KB的Memory Map且Memory Map跟其他Arm都一樣&lt;/div&gt;&lt;div&gt;只是接到不同的實體Sram&lt;/div&gt;&lt;div&gt;&lt;div&gt;[只能Write的部分]&lt;/div&gt;&lt;div&gt;0x1000~0x13FF :　要傳給Arm0的資料  (1KB) &lt;/div&gt;&lt;div&gt;0x1400~0x17FF :　要傳給Arm1的資料   (1KB)&lt;/div&gt;&lt;div&gt;0x1800~0x1BFF :　要傳給Arm2的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x1C00~0x1FFF :　要傳給Arm3的資料  (1KB)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[只能Read的部分]&lt;/div&gt;&lt;div&gt;0x2000~0x23FF :　收來自Arm0的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2400~0x27FF :　收來自Arm1的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2800~0x2BFF :　收來自Arm2的資料  (1KB)&lt;/div&gt;&lt;div&gt;0x2C00~0x2FFF :　收來自Arm3的資料  (1KB)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;同樣的也是會有一塊Sram是屬於丟資料給自身的部分&lt;/div&gt;&lt;div&gt;也就是0x1400~0x17FF、0x2400~0x27FF&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_ExHjQLI45ro/TAX_EM_--JI/AAAAAAAAAHI/BYVfhjBRAYw/s400/2.jpg" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 49px;" alt="" id="BLOGGER_PHOTO_ID_5478064969440229522" border="0" /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;下圖是Arm2的Memory對應到的實際Sram&lt;/div&gt;&lt;div&gt;&lt;div&gt;同樣的也是會有一塊Sram是屬於丟資料給自身的部分&lt;/div&gt;&lt;div&gt;也就是0x1800~0x1BFF、0x2800~0x2BFF&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_ExHjQLI45ro/TAX2lveo4BI/AAAAAAAAAG4/d1gWItgO2po/s400/3.jpg" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 49px;" alt="" id="BLOGGER_PHOTO_ID_5478055650026643474" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;下圖是Arm3的Memory對應到的實際Sram&lt;/div&gt;&lt;div&gt;&lt;div&gt;同樣的也是會有一塊Sram是屬於丟資料給自身的部分&lt;/div&gt;&lt;div&gt;也就是0x1C00~0x1FFF 、0x2C00~0x2FFF&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_ExHjQLI45ro/TAX23KsaJZI/AAAAAAAAAHA/-KpZY62BUM8/s400/4.jpg" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 49px;" alt="" id="BLOGGER_PHOTO_ID_5478055949389931922" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;而上面四張圖合起來就是整個實際16塊Sram的架構&lt;/div&gt;&lt;div&gt;也就是說每顆Arm所能看到的Memory Map都一樣&lt;/div&gt;&lt;div&gt;但不一定接線到相同的實際Sram上&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這樣一來Memory Map就只有8KB的大小&lt;/div&gt;&lt;div&gt;不會有Access到不屬於傳輸所允許的Addr&lt;/div&gt;&lt;div&gt;只需要判斷Addr是否在這8KB的範圍內&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;目前正在進行的工作:&lt;/div&gt;&lt;div&gt;1.SystemC model與四個Qemu相接(給張老師LAB測試修改的MPI)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.Friendly Arm(mini2440)與FPGA(v4)相接&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.如果確定架構沒問題就開始寫Verilog&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.05.19&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;由於後來發現S5PC100的SRAM Controller最多只能控制6塊SRAM&lt;/div&gt;&lt;div&gt;所以後來把FPGA上的16塊SRAM改成四塊&lt;/div&gt;&lt;div&gt;第1塊SRAM (最上方) 是儲存Arm0要Send給其他Arm的資料&lt;/div&gt;&lt;div&gt;第2塊SRAM (下一塊) 是儲存Arm1要Send給其他Arm的資料&lt;/div&gt;&lt;div&gt;....以此類推&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;每一塊SRAM的第0KB~(1KB-1bit)的資料是儲存Arm0要Receive來自其他Arm的資料&lt;/div&gt;&lt;div&gt;每一塊SRAM的第1KB~(2KB-1bit)的資料是儲存Arm1要Receive來自其他Arm的資料&lt;/div&gt;&lt;div&gt;...以此類推&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;即是比照之前的Memory Map,只把之前16塊SRAM的每一個橫排併起來成一塊&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ExHjQLI45ro/S_LBRXpJTdI/AAAAAAAAAGY/12GgeAuA3Ng/s1600/4SRAM.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_ExHjQLI45ro/S_LBRXpJTdI/AAAAAAAAAGY/12GgeAuA3Ng/s400/4SRAM.jpg" alt="" id="BLOGGER_PHOTO_ID_5472649001357102546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但是這樣的架構會在多個Arm同時Read同一塊Memory時出問題&lt;/div&gt;&lt;div&gt;之前會切成16塊SRAM就是為了解決同時Read Write的問題&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;後來品皓有個點子,如果讓Arm以為只有4塊SRAM&lt;/div&gt;&lt;div&gt;但是實際電路上是有16塊SRAM這樣或許可以維持原來的16塊的架構&lt;/div&gt;&lt;div&gt;而且原本是預計每顆Arm都可以Access到這16塊SRAM&lt;/div&gt;&lt;div&gt;但是這樣每個Arm就都必須拉線到16個SRAM上這樣之後Layou可能面積會很大&lt;/div&gt;&lt;div&gt;所以打算每個Arm都只拉線到傳輸會用到的SRAM上&lt;/div&gt;&lt;div&gt;但是Arm本身的Memory Map還是會保留沒有用到的Address&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;所以就改成以下架構:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ExHjQLI45ro/S_LHW3jU6RI/AAAAAAAAAGg/jUnSTL5Bwb4/s1600/New_16SRAM.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 358px; height: 400px;" src="http://4.bp.blogspot.com/_ExHjQLI45ro/S_LHW3jU6RI/AAAAAAAAAGg/jUnSTL5Bwb4/s400/New_16SRAM.jpg" alt="" id="BLOGGER_PHOTO_ID_5472655692891744530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Tag的更動&lt;/div&gt;&lt;div&gt;由於Xillinx V4的Block Memory支援Dual port(Write的同時也可Read)&lt;/div&gt;&lt;div&gt;所以原本用來仲裁"Write的同時是否可Read"的Tag就不需要了(原本有定memory map且用register實做)&lt;/div&gt;&lt;div&gt;原本Tag還有紀錄SRAM中的Data Size的功能和做為判斷SRAM是否有資料,來控制Read/Write是否允許&lt;/div&gt;&lt;div&gt;所以改成每個SRAM的起始4Byte作為儲存Data Size的空間,取代原本的Tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後Tag也作為是否該發出Interrupt通知Arm來讀取資料的依據&lt;/div&gt;&lt;div&gt;現在改為用Adddr以及Data值來判斷(假如Addr為Data Size的位址且Data不為0則發出Interrupt)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. 只接線到傳輸相關的SRAM&lt;/div&gt;&lt;div&gt;如上圖所示&lt;/div&gt;&lt;div&gt;Arm0只接線到第一欄和第一列&lt;/div&gt;&lt;div&gt;然後透過Addr某幾個bit和CSn作為SRAM Enable的依據&lt;/div&gt;&lt;div&gt;這樣即使Arm0的程式寫資料到不正確的Addr&lt;/div&gt;&lt;div&gt;在實際電路上依然會寫在第一欄和第一列的範圍內&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. 實際有16塊SRAM,但每顆Arm以為只有1塊&lt;/div&gt;&lt;div&gt;Arm的SRAM controller會接出CS[0:5]做為每塊SRAM的Enable&lt;/div&gt;&lt;div&gt;以Arm0的觀點來看只有一顆SRAM&lt;/div&gt;&lt;div&gt;所以CS只會用到CS0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;透過判斷Addr線、Write Enable、Output Enable , 連到不同的SRAM上&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Initial Tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因為本來儲存Size的Tag換成在SRAM中(原本是Register),因此需要初始化&lt;/div&gt;&lt;div&gt;所以我希望在每顆Arm boot好OS之後必須去把Size初始化為0&lt;/div&gt;&lt;div&gt;每顆Arm各自去把儲存Send資料的SRAM的Size部分歸零,然後才把Initial Tag設為1&lt;/div&gt;&lt;div&gt;再確認每個Initial Tag皆為1後才開始進行資料傳輸&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[這邊有個問題]&lt;/div&gt;&lt;div&gt;就是每次Send資料時都需要去確認Initial Tag嗎?&lt;/div&gt;&lt;div&gt;如果確認Initial Tag是為了要確定目的Arm是否存活&lt;/div&gt;&lt;div&gt;但是一顆無法執行的Arm,無法去修改對應的Initial Tag,就無法判斷目的Arm是否仍然存活&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.04.07&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;之前定的memory map&lt;/div&gt;&lt;div&gt;因為要把儲存資料大小的單位換成byte比較直覺&lt;/div&gt;&lt;div&gt;所以重訂了一下Tag的部分(Packet  Size)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Initial : 每個欄位1byte&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ExHjQLI45ro/S7xE3D0faEI/AAAAAAAAAF8/c5Vc_bF4KxA/s1600/Initial.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 291px; height: 95px;" src="http://2.bp.blogspot.com/_ExHjQLI45ro/S7xE3D0faEI/AAAAAAAAAF8/c5Vc_bF4KxA/s400/Initial.jpg" alt="" id="BLOGGER_PHOTO_ID_5457312561175160898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Packet Size : 每個欄位4byte&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ExHjQLI45ro/S7xFLaplLaI/AAAAAAAAAGE/A70tiDuphmE/s1600/PacketSize.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 390px; height: 400px;" src="http://1.bp.blogspot.com/_ExHjQLI45ro/S7xFLaplLaI/AAAAAAAAAGE/A70tiDuphmE/s400/PacketSize.jpg" alt="" id="BLOGGER_PHOTO_ID_5457312910900800930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Memory Space(Receive data from Arm) : 每個欄位 1 K byte&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ExHjQLI45ro/S7xFq5x7h9I/AAAAAAAAAGM/i0xqtUsovuk/s1600/Data.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 344px;" src="http://1.bp.blogspot.com/_ExHjQLI45ro/S7xFq5x7h9I/AAAAAAAAAGM/i0xqtUsovuk/s400/Data.jpg" alt="" id="BLOGGER_PHOTO_ID_5457313451833264082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.03.29&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;原本為了方便替EBI BUS加Driver&lt;/div&gt;&lt;div&gt;就把MVC100重新PO上linux&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;後來板子先借給文森學長&lt;/div&gt;&lt;div&gt;要先測山寨機的Android AP能不能在MVC100上跑&lt;/div&gt;&lt;div&gt;所以我又重PO了Android上去&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可是新PO的Android螢幕左下角還是一樣會顯示Safe mode&lt;/div&gt;&lt;div&gt;不知道是廠商提供的Android kernel本來就是safe mode,要自己另外抓&lt;/div&gt;&lt;div&gt;還是其它問題,目前還在找&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.03.11&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;Memory Map的部分暫定如下&lt;/div&gt;&lt;div&gt;Initial有四個byte 0x00~0x03分別用來儲存四個Arm是否initial完成&lt;/div&gt;&lt;div&gt;Tag To ArmX為就是架構圖裡面的16個Tag紅色區塊&lt;/div&gt;&lt;div&gt;ArmX Receive為架構圖中 , 每個Arm底下的四塊Memory&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ExHjQLI45ro/S7NEXRvNJWI/AAAAAAAAAFo/oE25Hy5z1Rk/s1600/memory_map1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 222px; height: 400px;" src="http://4.bp.blogspot.com/_ExHjQLI45ro/S7NEXRvNJWI/AAAAAAAAAFo/oE25Hy5z1Rk/s400/memory_map1.jpg" alt="" id="BLOGGER_PHOTO_ID_5454778740364879202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ExHjQLI45ro/S5jh-jNMHOI/AAAAAAAAAFY/_QdLVXbxzgQ/s1600-h/memory_map2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 368px; height: 270px;" src="http://1.bp.blogspot.com/_ExHjQLI45ro/S5jh-jNMHOI/AAAAAAAAAFY/_QdLVXbxzgQ/s400/memory_map2.jpg" alt="" id="BLOGGER_PHOTO_ID_5447352214023314658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ExHjQLI45ro/S5jh1bUyp4I/AAAAAAAAAFQ/ZJp9qOmtQFc/s1600-h/memory_map3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 367px; height: 266px;" src="http://2.bp.blogspot.com/_ExHjQLI45ro/S5jh1bUyp4I/AAAAAAAAAFQ/ZJp9qOmtQFc/s400/memory_map3.jpg" alt="" id="BLOGGER_PHOTO_ID_5447352057288894338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ExHjQLI45ro/S5jhlWKLKgI/AAAAAAAAAFI/mGHXPGcLTBs/s1600-h/memory_map4.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 368px; height: 266px;" src="http://3.bp.blogspot.com/_ExHjQLI45ro/S5jhlWKLKgI/AAAAAAAAAFI/mGHXPGcLTBs/s400/memory_map4.jpg" alt="" id="BLOGGER_PHOTO_ID_5447351781024279042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ExHjQLI45ro/S5jd8HCYjmI/AAAAAAAAAE4/HUs6V7FK-RU/s1600-h/memory_map5.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 367px; height: 266px;" src="http://3.bp.blogspot.com/_ExHjQLI45ro/S5jd8HCYjmI/AAAAAAAAAE4/HUs6V7FK-RU/s400/memory_map5.jpg" alt="" id="BLOGGER_PHOTO_ID_5447347774055550562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;&lt;div&gt;2010.03.09&lt;div&gt;-------------------------------------&lt;/div&gt;&lt;div&gt;目的在於把四顆Arm透過FPGA上的Memory來進行溝通&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1 . 架構&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;[架構圖]&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ExHjQLI45ro/S5ZaUeb-uQI/AAAAAAAAAEg/Ykgq_GWtU-M/s1600-h/%E6%9E%B6%E6%A7%8B%E5%9C%96.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_ExHjQLI45ro/S5ZaUeb-uQI/AAAAAAAAAEg/Ykgq_GWtU-M/s400/%E6%9E%B6%E6%A7%8B%E5%9C%96.jpg" alt="" id="BLOGGER_PHOTO_ID_5446640107165497602" style="margin: 0px 10px 10px 0px; float: left; cursor: pointer; width: 400px; height: 259px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;如架構圖所示,每個Arm透過Memory Bus連接FPGA上的16塊memory&lt;/div&gt;&lt;div&gt;透過這16塊memory進行Arm之間的資料溝通&lt;/div&gt;&lt;div&gt;每個Arm下方的四塊memory是用來接收來自其它Arm的資料&lt;/div&gt;&lt;div&gt;比如Arm0下方的四塊memory , From Arm2這塊memory即是用來儲存來自Arm2的資料&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;每個Arm都可以看到這16塊Memory以及其Tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;每塊memory的總大小為1k byte , 且各自有一塊專屬的Tag , 用來紀錄儲存在此memory中的資料大小 , 而當memory中沒有資料時 , Tag儲存的資料大小為0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Initial Tag為一個大小為1 byte的register , 共有四塊 , 用來記錄四個Arm的initial是否完成&lt;/div&gt;&lt;div&gt;而當四塊Initial Tag的直接為initial完成時 , 才能進行Arm之間的資料傳輸&lt;/div&gt;&lt;div&gt;每個Arm都可以存取到這四塊Initial Tag&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2 . 傳輸方式&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;假如Arm0希望丟一筆資料到Arm1&lt;/div&gt;&lt;div&gt;Arm0必須先將資料丟到FPGA上Arm1底下的From Arm0的那塊memory&lt;/div&gt;&lt;div&gt;然後將From Arm0的Tag設為資料的大小&lt;/div&gt;&lt;div&gt;此時FPGA送出Interrupt訊號給Arm1 , 告知有資料進入memory中&lt;/div&gt;&lt;div&gt;Arm1再主動去FPGA中抓取來自Arm0的資料&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;3 . boot&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;單顆Arm的boot動作為:&lt;/div&gt;&lt;div&gt;Arm裡面有個Rom , 儲存一小支程式 , 這個小程式會去抓Flash的前幾個byte看看是否Flash中有合法的可執行程式 , 如果有的話就會把Flash中的資料抓進SDRAM中 , 然後Arm在去執行SDRAM中的程式 , 如果Flash中沒有程式 , Rom中的小程式變會換成等待USB傳送PC端的資料過來 , 然後將接收到的程式分入SDRAM中讓Arm去執行&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但是這樣會有個疑問就是說 , 如果四個Arm只有第一顆Arm有Flash , 那其它三顆Arm的SDRAM該如何拿到boot所需的程式?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4 . initial&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;當四個Arm確定都boot完成後 , 便要開始去initial FPGA上每塊Memory的Tag , 每個Arm各自去initial對應的memory的Tag , initial完成後便將對應的Initial Tag值設為1 , 直到四塊Initial Tag全部的值皆為1時 , 才能開始進行資料傳輸&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5 . Memory Bus&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Memory Bus有三種訊號要輸入Address , Data , Control Signal&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Arm資料傳輸Function&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Receive(int SrcCoreID , int* Buf) : 用來接收來自SrcCoreID 的資料 , 用sc_event來等待interrupt&lt;/div&gt;&lt;div&gt;Send(int DesCoreID , int* Buf) : 傳送資料給DesCoreID&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7. 目前工作&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a. 定出每塊Arm的memory map&lt;/div&gt;&lt;div&gt;b. 完成SystemC model&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-1846796941569760235?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/1846796941569760235/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=1846796941569760235' title='16 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1846796941569760235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1846796941569760235'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/03/multi-arm.html' title='Multi Arm - 哲榮'/><author><name>long</name><uri>http://www.blogger.com/profile/09775763387371748267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/_ExHjQLI45ro/Skr3cxkgrhI/AAAAAAAAABk/MYCnTHYhvLo/S220/1188380055.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ExHjQLI45ro/TTwTgbgarxI/AAAAAAAAAI0/fO2kExwKBhk/s72-c/mvc_ex.jpg' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-4428855586227326165</id><published>2011-02-18T14:33:00.007+08:00</published><updated>2011-10-05T09:13:22.993+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>HMM with HTK, HTS system - 仕偉</title><content type='html'>--------Synthesis Results-------&lt;br /&gt;&lt;br /&gt;Star Variations&lt;br /&gt;&lt;br /&gt;1. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MZWFhOGY2NzItYjczZC00NzNkLWJkNGMtODUyZjg2YjhmZjU4&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song1&lt;/a&gt;&lt;br /&gt;2. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MZTNiYjM4ZWYtODRlMC00MWY4LWFhMjEtZTU2MGFiNTZhZTI0&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song2&lt;/a&gt;&lt;br /&gt;3. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MOWFjYmE4MDAtZGViOC00NjQ1LWEyMjktOTQ4ZmY5NGFiNTFi&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song3&lt;/a&gt;&lt;br /&gt;4. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MODY5MWUwYWItYWRhMC00MTA3LTkzZDctNDgwOWZhNmYzNGQ4&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song4&lt;/a&gt;&lt;br /&gt;5. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNzY4MThjYTQtZThkMi00ZDVhLWFiMmQtNzgxMmZhZDkxNjRk&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song5&lt;/a&gt;&lt;br /&gt;6. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNTgyMTBmYzYtYjM3Ny00MDBlLWJjMTEtZWM0NjZkODcwMTcz&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song6&lt;/a&gt;&lt;br /&gt;7. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNDUwYzIwMzYtMGVjZi00YjJlLWE0YjUtZmE1NzY1M2JlYzYx&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song7&lt;/a&gt;&lt;br /&gt;8. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MN2VhNjc1MDAtZDMzYy00ODdiLThiZWQtYTAwN2FiZGIwMmU0&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song8&lt;/a&gt;&lt;br /&gt;9. &lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MMWViMjgyOTMtMTQ1ZC00Mjc3LWIwMjAtNTE3MTMwMGY1ZTI2&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song9&lt;/a&gt;&lt;br /&gt;10.&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MM2FkYjExYzQtMWRmNi00MDY2LThjYjktMGNhOTFkMWU4Yzcz&amp;amp;export=download&amp;amp;hl=zh_TW"&gt;Song10&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------- 2011 . 2. 18之2---------&lt;br /&gt;&lt;br /&gt;對於F0基頻設定，trace code結果後發現：&lt;br /&gt;&lt;br /&gt;1. 445Hz要設定LOWERF0=200，UPPERF0=600，基頻的值才會正確被找到。(正確)&lt;br /&gt;&lt;br /&gt;2. 如果設定LOWERF0=100，UPPERF0=500，基頻值會找到2百多Hz。(錯誤)&lt;br /&gt;&lt;br /&gt;-------- 2011 . 2. 18 ------------&lt;br /&gt;&lt;br /&gt;目前在training音檔時發現幾個問題：&lt;br /&gt;&lt;br /&gt;1. 如果我們設定每個state要分成N個HMM model的話，那麼這個state的長度就要大於等於N*0.01(秒)，最小的duration要設為N。&lt;br /&gt;&lt;br /&gt;在HTS中每個state並不是只有一個HMM model去training，而是拆成N個HMM model，而N的大小可以設定。&lt;br /&gt;&lt;br /&gt;之前training設的N值是5，也就是每個state長度至少要大於0.05(秒)。&lt;br /&gt;&lt;br /&gt;我們可以設定N為3，所以在跑matlab程式時，設定state的最小長度至少要0.03(s)，最好的長度是多少還要再實驗。&lt;br /&gt;&lt;br /&gt;2. 在分state的演算法中，之前我有加入一個條件，就是找出頻率轉折點；實際跑時遇到一個例子，頻率是[ 444.75, 444.79, 444.81, 444.80, 444.78, 444.77]，這段頻率人耳聽起來是沒有差異，但是依照演算法會被分成[ 444.75, 444.79, 444.81 ] , [ 444.81, 444.80, 444.78, 444.77 ]兩段，在training時應歸為同一類。此部分已修改完。&lt;br /&gt;&lt;br /&gt;3. 再取F0部分用HTS範例的取F0程式會有問題，例如基頻是445Hz，在取F0時設定最低400Hz，最高500Hz的話會找不到基頻，猜想因為是語音所以設定的頻率較低，目前在trace code看他取基頻的程式是如何。&lt;br /&gt;&lt;br /&gt;附上有做好的進度，紅色為未完成。&lt;br /&gt;基頻目前是直接用讀程式的值，以後應該要人工修一下；還有產生state sequence的程式還沒寫好。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-mdPTOAkZmQ0/TV4W-U7dHgI/AAAAAAAACuw/8azW2Qw3dFE/s1600/prograss.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 237px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5574918648757034498" border="0" alt="" src="http://3.bp.blogspot.com/-mdPTOAkZmQ0/TV4W-U7dHgI/AAAAAAAACuw/8azW2Qw3dFE/s400/prograss.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 12. 28 ----------&lt;br /&gt;&lt;br /&gt;Speech Parameter Generation Algorithm&lt;br /&gt;Considering Global Variance for&lt;br /&gt;HMM-Based Speech Synthesis&lt;br /&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" height="320" src="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=false&amp;amp;embedded=true&amp;amp;srcid=0B7ieyw4NIp3MYzlmYTYyNGMtZGY1MC00ZTI1LWE3OGYtZmFiODk2YTRmOWNk&amp;amp;authkey=CK6F6PkK&amp;amp;hl=zh_TW" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 12. 9 ----------&lt;br /&gt;&lt;br /&gt;我在網路上有找到已經有人用matlab來讀&lt;br /&gt;htk的參數的例子,並且他也用自己的方法算出&lt;br /&gt;MFCCs與htk的MFCCs作比較,如圖:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/TP7rA_b2FSI/AAAAAAAACtE/U54RGfu2h9I/s1600/difference.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 219px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5548130193227781410" border="0" alt="" src="http://2.bp.blogspot.com/_8hIvM54kWX0/TP7rA_b2FSI/AAAAAAAACtE/U54RGfu2h9I/s400/difference.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;input是htk的MFCCs檔案跟原音的wave檔.&lt;br /&gt;&lt;br /&gt;網址:&lt;a href="http://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html"&gt;http://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 12. 8 ----------&lt;br /&gt;&lt;br /&gt;AN ALGORITHM FOR SPEECH PARAMETER&lt;br /&gt;GENERATION FROM CONTINUOUS MIXTURE&lt;br /&gt;HMMS WITH DYNAMIC FEATURES&lt;br /&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" height="320" src="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=false&amp;amp;embedded=true&amp;amp;srcid=0B7ieyw4NIp3MNzM3OGJjYmYtZjM5OC00NTk3LWJlMjAtMThiMmY2NTJkMjAz&amp;amp;authkey=CKDah-UP&amp;amp;hl=zh_TW" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 12. 2 ----------&lt;br /&gt;&lt;br /&gt;上次音檔vibrato不像的原因是因為model分類沒分好,&lt;br /&gt;也就是decision tree未建好.&lt;br /&gt;&lt;br /&gt;正常來講,依前後state不同,同一state的model也應該要分類.&lt;br /&gt;例如attack + vibrato_rise 跟 vibrato_fall + vibrato_rise,&lt;br /&gt;兩個vibrato_rise應該要有不同的model,之前合成是只有一個model.&lt;br /&gt;&lt;br /&gt;改進之後將上述情形分成不同的model,最後合成結果:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MZjI2NWUxMTEtZWE3MS00MzFlLWJiNTMtZTc1NDE2ZDE5YTg5&amp;amp;export=download&amp;amp;authkey=CJj2q-MK&amp;amp;hl=zh_TW"&gt;gen1&lt;/a&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MOWZjMzExYzUtM2I0ZS00YTYxLTg5M2ItMjY4N2YwYjQ1NjRl&amp;amp;export=download&amp;amp;authkey=CIvtzNkM&amp;amp;hl=zh_TW"&gt;gen2,延長vibrato&lt;/a&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MODMwYjc5M2UtNTBlNS00MjczLWExYTMtZDVkODZkNGIzYWIw&amp;amp;export=download&amp;amp;authkey=CLvfmFo&amp;amp;hl=zh_TW"&gt;gen3,用不同的vibrato state去合成&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;目前進度:用matlab將mfcc參數取出,之後要做clustering.&lt;br /&gt;&lt;br /&gt;-------- 2010 . 11. 21 ----------&lt;br /&gt;&lt;br /&gt;延續11月19日,新增合成音檔,&lt;br /&gt;vitrato的rise和fall的state重複多遍, sample rate 44100Hz :&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNDQzN2QyMTgtZTZkOS00OWU5LTkxOTAtYTZhN2ZhNTJiYjJh&amp;amp;export=download&amp;amp;authkey=CMr2jdUJ&amp;amp;hl=zh_TW"&gt;Synthesis D4 Vibrato2 44.1KHz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 11. 19 ----------&lt;br /&gt;&lt;br /&gt;修改了sample rate為44100Hz,&lt;br /&gt;training完後8000Hz以上頻率有找到,聽起來又更像了.&lt;br /&gt;&lt;br /&gt;但比較有趣的是,同樣都用hts_engine但產生的音檔聽起來不一樣,應該是少打參數.&lt;br /&gt;&lt;br /&gt;因為我得到合成的音檔有兩種方式:&lt;br /&gt;&lt;br /&gt;1. 依照script,training完會自動執行hts_engine幫我產生音檔.&lt;br /&gt;&lt;br /&gt;2. training完我手動將產生的model參數移到另一個資料夾,自己下指令用hts_engine合成音檔.&lt;br /&gt;可能是我手動下指令少了什麼參數,所以跟自動產生的音檔不像,這點有待查明.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNzI4Njc3NDQtOTg1OC00ZGI5LTliOTItN2QyN2U1ZDliYTBj&amp;amp;export=download&amp;amp;authkey=CNCly4gN&amp;amp;hl=zh_TW"&gt;原音D4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1.&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MYjBiMzY5OTUtZmVhOC00NzBkLWEyOTQtZjZjNGVhMDMxYzRh&amp;amp;export=download&amp;amp;authkey=CLnBle0L&amp;amp;hl=zh_TW"&gt;Synthesis D4 sample rate 44.1KHz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNmY3ZTY0YTItNjBmOS00OTQ0LTgxY2ItNTJkZjY2YjIwZTEy&amp;amp;export=download&amp;amp;authkey=CJ2j-tkN&amp;amp;hl=zh_TW"&gt;可能少打參數 D4 sample rate 44.1KHz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 11. 11 ----------&lt;br /&gt;&lt;br /&gt;問了奕欽學長關於training model時基頻有沒有限制範圍,&lt;br /&gt;有!!他說有而且可以修改範圍,&lt;br /&gt;找到data/Makefile內有兩行:&lt;br /&gt;&lt;span style="COLOR: rgb(255,0,0)"&gt;LOWERF0 = 110 # lower limit for f0 extraction (Hz)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(255,0,0)"&gt;UPPERF0 = 280 # upper limit for f0 extraction (Hz)&lt;/span&gt;&lt;br /&gt;就是萃取f0時設的範圍.&lt;br /&gt;&lt;br /&gt;所以之前音檔會有低頻雜音可能是因為&lt;br /&gt;原本的聲音的基頻是300Hz,&lt;br /&gt;造成程式在training時硬要是找110~280內的頻率當基頻,&lt;br /&gt;所以才會有低頻的雜音.&lt;br /&gt;&lt;br /&gt;先來實驗看看改範圍能不能解決這個問題!&lt;br /&gt;&lt;br /&gt;//////////////////////////////////////&lt;br /&gt;&lt;br /&gt;將範圍改成 200~500 Hz&lt;br /&gt;&lt;span style="COLOR: rgb(255,0,0)"&gt;LOWERF0 = 200 # lower limit for f0 extraction (Hz)&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(255,0,0)"&gt;UPPERF0 = 500 # upper limit for f0 extraction (Hz)&lt;/span&gt;&lt;br /&gt;雜音的問題就解決了.&lt;br /&gt;&lt;br /&gt;//////////////////////////////////////&lt;br /&gt;&lt;br /&gt;接著實驗vibrato :&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNzI4Njc3NDQtOTg1OC00ZGI5LTliOTItN2QyN2U1ZDliYTBj&amp;amp;export=download&amp;amp;authkey=CNCly4gN&amp;amp;hl=zh_TW"&gt;原音D4 295Hz Vibrato&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;將同一音檔copy 10份去training, 並且合成 :&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MN2M4MTZkZmMtN2EzNC00NDM3LTlmZDEtMWJkYjYwZGJhZGRh&amp;amp;export=download&amp;amp;authkey=CI7E49sP&amp;amp;hl=zh_TW"&gt;Synthesis D4 295Hz Vibrato1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;又將vitrato的rise和fall的state重複多遍 :&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B7ieyw4NIp3MNWUzMzMyYmUtNTExMC00ZDE5LTgwMGMtYTRlMzg3NTA3ZDJk&amp;amp;export=download&amp;amp;authkey=CJ778O4O&amp;amp;hl=zh_TW"&gt;Synthesis D4 295Hz Vibrato2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上為目前結果.&lt;br /&gt;&lt;br /&gt;-------- 2010 . 11. 08 ----------&lt;br /&gt;&lt;br /&gt;這禮拜利用小聽給的java讀cue的程式,&lt;br /&gt;寫了個GUI介面,並修改成HTK label檔的格式如下圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TNgA2bh5qmI/AAAAAAAACro/kcQyEBWRPNs/s1600/readcue.png"&gt;&lt;img style="WIDTH: 352px; HEIGHT: 303px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5537176676954909282" border="0" alt="" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TNgA2bh5qmI/AAAAAAAACro/kcQyEBWRPNs/s400/readcue.png" /&gt;&lt;/a&gt;&lt;br /&gt;只要用程式開啟標完cue的wave檔,就可顯示cue內容,&lt;br /&gt;按下save to label就可存成label檔.&lt;br /&gt;&lt;br /&gt;此外程式也提供一般的txt格式,輸出單位為秒如下圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TNgBiY2x-NI/AAAAAAAACrw/3QbQYIcM6uo/s1600/readcue2.png"&gt;&lt;img style="WIDTH: 342px; HEIGHT: 302px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5537177432151423186" border="0" alt="" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TNgBiY2x-NI/AAAAAAAACrw/3QbQYIcM6uo/s400/readcue2.png" /&gt;&lt;/a&gt;&lt;br /&gt;一樣只要按下save to txt就可存成txt檔.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;這禮拜即利用此程式去標出上次合成出來有雜音問題的D4&lt;br /&gt;(上次報告是說G1,去看頻譜才發現說錯了是D4才對),&lt;br /&gt;合成出來仍有低頻的雜音參雜其中.&lt;br /&gt;&lt;br /&gt;目前解決的辦法就是先去拆解hts_engine程式看它產生音檔的部分,&lt;br /&gt;順便拆解流程.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 11. 02 ----------&lt;br /&gt;&lt;br /&gt;Cepstral Analysis Synthesis on the Mel Frequency Scale&lt;br /&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" height="320" src="http://docs.google.com/viewer?url=https%3A%2F%2Fdocs.google.com%2Fuc%3Fexport%3Ddownload%26id%3D0B7ieyw4NIp3MMWQ5ZDYwOWItYTVmOS00MjUyLWE4YjMtMmVjYmQxYjY4NTNj%26authkey%3DCKvW-PsH&amp;amp;embedded=true" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 10 . 25 ----------&lt;br /&gt;&lt;br /&gt;經過修改與測試之後原來是question set的問題.&lt;br /&gt;目前已有合出聲音,聽得出來像是小提琴的聲音.&lt;br /&gt;&lt;br /&gt;下一步是用cool editor邊看頻譜邊標音,這樣可以標得比較準確,&lt;br /&gt;並把其他不同的state也加入training.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 10 . 13 ----------&lt;br /&gt;&lt;br /&gt;目前有成功產生音檔,但聽起來不像violin的聲音.&lt;br /&gt;&lt;br /&gt;可能有問題的點是:&lt;br /&gt;1. 在標音的時候就沒有標好.&lt;br /&gt;2. question沒建好,問題太少.&lt;br /&gt;3. state間的關係描述太少,例如語音中有分片語,短語,音節,重音等，會用這些關係建HMM model.但我在實驗中只用到音節的關係.&lt;br /&gt;&lt;br /&gt;目前先嘗試:&lt;br /&gt;用同一個音檔重複10次,然後去training,再合成出來,看出來的音是不是跟原來的一樣.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 10 . 3 -----------&lt;br /&gt;&lt;br /&gt;6.&lt;br /&gt;對HMM model作初始化用HInit和HRest,&lt;br /&gt;trace code發現是指令下錯的關係.&lt;br /&gt;先用HInit對要處理的phone的HMM model作uniformly segmented,&lt;br /&gt;再來用HRest對同一個HMM model作Baum-Welch re-estimated.&lt;br /&gt;如此反覆將所有的phone都執行上述兩個指令後,&lt;br /&gt;HMM model的初始化完成.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7.&lt;br /&gt;依HTK格式將所有初始化好的HMM model集合成同一個檔案:&lt;br /&gt;inic.mac&lt;br /&gt;&lt;br /&gt;8.&lt;br /&gt;開始HMM training:&lt;br /&gt;用HERest這個指令也是會跑Baum-Welch re-estimated,與HRest不同之處是HRest只對單一個utterence做處理,HERest在training過程則是處理全部的utterence,並統計每個utterence的means,variances等,用於完善HMM參數.&lt;br /&gt;處理完得到每個phone訓練好的HMM model.&lt;br /&gt;&lt;br /&gt;9.&lt;br /&gt;有了HMM model接下來是合成部份,用的是另一個系統：HTS.&lt;br /&gt;合成需要的參數要有decision tree, question set,這部份如何產生我還要再去研究and問學長,目前進度到此.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 9 . 30 ----------&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;從小提琴的音檔分出C1,G1,D2,A2四個音,每個音準備的音檔數目如下:&lt;br /&gt;C1 : 7個音檔 - 1-1.wav ~ 1-7.wav&lt;br /&gt;G1 : 7個音檔 - 2-1.wav ~ 2-7.wav&lt;br /&gt;D2 : 7個音檔 - 3-1.wav ~ 3-7.wav&lt;br /&gt;A2 : 6個音檔 - 4-1.wav ~ 4-6.wav&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;接下來取spectrum參數,先用語音預設的39維Mel-frequency cepstral coefficients.&lt;br /&gt;由於HTK只吃16bit或8bit的wave format,因此先用cool editor將wave檔降碼.&lt;br /&gt;取完可得*.fea檔案.&lt;br /&gt;&lt;br /&gt;3.&lt;br /&gt;接著是人工標音,使用HTK提供的工具,指令打"HSLab -F WAVE"才能讀入wave檔,&lt;br /&gt;標音的畫面如下:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/TKS5NOGnLkI/AAAAAAAACqM/v2bVkz-5h7Y/s1600/hslab.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 301px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5522742679838338626" border="0" alt="" src="http://2.bp.blogspot.com/_8hIvM54kWX0/TKS5NOGnLkI/AAAAAAAACqM/v2bVkz-5h7Y/s400/hslab.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;目前HMM state暫定為"音階_ADSR_status",&lt;br /&gt;example: "c1_A"代表音色為c1,狀態是attack,其他命名以此類推.&lt;br /&gt;將所有的音檔標示完會有相對應的*.lab檔.&lt;br /&gt;&lt;br /&gt;4.&lt;br /&gt;依HTK格式將所有lab檔案集合成1個*.mlf檔.&lt;br /&gt;&lt;br /&gt;5.&lt;br /&gt;產生HMM model的template,&lt;br /&gt;指令"outMacro Plainhs DiagC 3 "1 1 1" MFCC_E_D_A "13 13 13" &amp;gt; template.hmm",&lt;br /&gt;意思是每個model有三個state，每個state有三個stream，分別用1個、1個、1個mixture，每個stream各佔13維度。&lt;br /&gt;&lt;br /&gt;6.&lt;br /&gt;接著對HMM model作初始化用HInit和HRest,&lt;br /&gt;目前這邊有錯誤,下HInit指令時會有&lt;br /&gt;"ERROR [+2121] HInit: Too Few Observation Sequences [0]",&lt;br /&gt;錯誤可能發生的原因有幾種:&lt;br /&gt;1.樣本數太少.&lt;br /&gt;2.HMM model template設的不對,無法跟*.fea檔相符.&lt;br /&gt;3.取segment時人工切的frame間隔太小,導致取不到參數.&lt;br /&gt;&lt;br /&gt;解決辦法:&lt;br /&gt;問學長and直接trace code找error.&lt;br /&gt;&lt;br /&gt;-------- 2010 . 8 . 12 ----------&lt;br /&gt;&lt;br /&gt;執行HTS的demo檔案,網頁上有分兩種 :&lt;br /&gt;Speaker dependent training demo : training 單獨一人的HMM model.&lt;br /&gt;Speaker adaptation/adaptive training demo : training 不同人的HMM model; 例如要讓speaker A發出的語調要像speaker B, 或是speaker A發出的語調像speaker B+C+D.&lt;br /&gt;&lt;br /&gt;每種語言又分兩種demo :&lt;br /&gt;Normal demo : HTS 內建的方法取 spectral parameter.&lt;br /&gt;STRAIGHT demo : 由另外一位學者自行改進的演算法取 spectral parameter.由於STRAIGHT demo的方法並沒有公開程式碼,需要的話要自行跟那位教授聯絡取得,因此一般都是執行Normal demo.&lt;br /&gt;&lt;br /&gt;我跑的是Speaker dependent training demo : English : Normal,如圖紅框所示 :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TGwNWh784CI/AAAAAAAACnw/4Rp-E8tBNW8/s1600/htsdemo.PNG"&gt;&lt;img style="WIDTH: 346px; HEIGHT: 344px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5506791125085380642" border="0" alt="" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TGwNWh784CI/AAAAAAAACnw/4Rp-E8tBNW8/s400/htsdemo.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;跑完成約需要6~7個小時,會有HMM model的統計資料,包含f0,spectral等,之後就可以直接用這些資料透過hts_engine直接合成聲音.&lt;br /&gt;&lt;br /&gt;目前已跑完取得統計資料,正在研究hts_engine如何使用.&lt;br /&gt;&lt;br /&gt;參考網頁 : &lt;a href="http://hts.sp.nitech.ac.jp/?Download"&gt;http://hts.sp.nitech.ac.jp/?Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 8 . 3 ----------&lt;br /&gt;&lt;br /&gt;HMM-based speech synthesis system(HTS)&lt;br /&gt;&lt;br /&gt;&lt;iframe style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" height="320" src="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=false&amp;amp;embedded=true&amp;amp;srcid=0B7ieyw4NIp3MNzE3NGI3MWMtNTUxMS00MGE2LTg4ZGYtMmE2MTdmNzYxYTdl&amp;amp;authkey=CLLnuMgC&amp;amp;hl=zh_TW" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;介紹如何從音檔轉成參數再來合成語音.&lt;br /&gt;&lt;br /&gt;-------- 2010 . 8 . 1 ----------&lt;br /&gt;About HTS and HTK system.&lt;br /&gt;&lt;br /&gt;HTK - Hidden Markov Model Toolkit&lt;br /&gt;HTS - HMM-Based Speech Synthesis System&lt;br /&gt;&lt;br /&gt;語音合成分為兩部份：training part 和 synthesis part&lt;br /&gt;其中HTK就是負責training參數,HTS則是負責synthesis.&lt;br /&gt;&lt;br /&gt;HTS內沒有加入text analyzer,如果要使用要另外下載,&lt;br /&gt;Festival Speech Synthesis System就是個text analyzer.&lt;br /&gt;&lt;br /&gt;HTS有內建hts_engine可以在不需要HTK library的情形下單獨執行,&lt;br /&gt;可配合Festival或其他應用程式使用.&lt;br /&gt;&lt;br /&gt;HTS是以patch檔的形式存在,安裝後會對HTK及HDecode作更新.&lt;br /&gt;因此除了HTK外還需先裝好HDecode.&lt;br /&gt;&lt;br /&gt;-------- 2010 . 7 . 8 ----------&lt;br /&gt;&lt;br /&gt;viterbi algorithm&lt;br /&gt;&lt;br /&gt;介紹如何將最小單位發音,切成我們指定的HMM state數目.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------- 2010 . 7 . 7 ----------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;接下來要做的就是去看合成的部分,&lt;br /&gt;&lt;br /&gt;並將裡面取特徵參數的方法MFCC改為簡單的LPC,&lt;br /&gt;&lt;br /&gt;再去合成看看看有沒有什麼問題。&lt;br /&gt;&lt;br /&gt;下圖為HTK內建取特徵參數的方法，共有7種類型：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TDQcDAcOLzI/AAAAAAAACgc/L5R9BoYJvHQ/s1600/1.JPG"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 109px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5491044683655032626" border="0" alt="" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TDQcDAcOLzI/AAAAAAAACgc/L5R9BoYJvHQ/s400/1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------- ------------- ----------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-4428855586227326165?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/4428855586227326165/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=4428855586227326165' title='12 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4428855586227326165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4428855586227326165'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/06/hmm-with-htk-system.html' title='HMM with HTK, HTS system - 仕偉'/><author><name>Wayne</name><uri>http://www.blogger.com/profile/15482571947842462955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_8hIvM54kWX0/Sf05vNv9xSI/AAAAAAAAAAM/YxCeks-IyqQ/S220/%E5%B0%81%E9%9D%A2%E5%9C%96.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-mdPTOAkZmQ0/TV4W-U7dHgI/AAAAAAAACuw/8azW2Qw3dFE/s72-c/prograss.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-5107698930724311333</id><published>2011-01-13T23:37:00.001+08:00</published><updated>2011-01-14T09:49:36.501+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Others'/><title type='text'>沒有你們，生命就不精采：我的懺悔文</title><content type='html'>&lt;p&gt;&lt;font face="微軟正黑體"&gt;從1994年回國開始在交大兼任開始算起，我在研究與教學的位置上已經17年了。一剛開始還只是玩票性質，但是當隔年決定到中華大學任教時，對於如何當一個好老師這件事成了我第一件與最重要的思考要件，多年來沒有改變過。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;     &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;但是以做一個研究人員來說，我不覺得自己是成功的。以目前學術界的氣氛，發表足夠多的質量的論文是評斷一個研究者最直接與簡單的方法。就這一點來說，我不算是個好的研究人員，因為我的被訓練過程裡，寫論文從來不是最重要的，也看多不太有用的論文，大概也因為這樣子，我不太愛寫論文，而喜歡做一些自己覺得有趣與有用的論文。在美國，我接收到的觀念是：能拿到Funding的研究才算是有用的研究，尤其像是史丹福這種學校。問題是並非所有研究都可以拿到Funding，所以出論文也是一個不算太差的評斷標準，只不過我的偏見讓我覺得要是寫些自己都不確定會不會有用的論文，那還不如做一些有趣的應用還好些。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;也因為如此，我的論文很少。而就我自己的標準來說，質也不好。因為每當一篇論文寫好，或甚至登出來之後，我就開始覺得自己做得不好。這樣子的心理，讓寫論文變成一件難過的事。但是，這樣子下去，對於學生的畢業會有問題，所以我總是勉力做下去，論文雖不多，但是夠學生畢業就好。這幾年政府五年五百億的政策，讓論文發表一事更形複雜，缺少論文，不僅個人升等，學生畢業受拖累，其影響層面更是深遠，我就不再這裡多說，一剛開始，我還是堅持要好的研究才寫論文，但是，大勢所趨，我不能因為自己不在乎升等這件事而影響學生的前途，我想自己還是放棄一些堅持，畢竟，一篇論文只需要三到四位審查委員的同意即可。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;但是，可想而知，我寫論文的取向，選擇容易出論文的題目，投稿的技巧，甚至決定怎麼運做實驗室來讓出論文變成簡單一點，等等，都不太純熟。當有學生跟我提起我的實驗室的論文極少時，我也只能不好意思的承認了。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;不再有論文壓力的我只能說，為了學生著想，只好老狗學新把戲一樣來面對這日益複雜的論文大環境。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;我跟自己說：繼續努力。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;多年來，在這個工作崗位上我卻有另一個讓我自己覺得驕傲的地方。那是教學方面的。上課方面盡力之外，最重要的是帶學生做研究。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;每一個學生我都盡力去了解他們的個性，把他們當做家人，當做子弟來看待。每個星期的一對一或一對二的Meeting，甚至還幫學生看code或寫幾行sample code給他們參考，這樣子讓我可以更了解每一個學生的特質，也因此可以隨時調整我帶他們的方法與態度，只要兩年下來，功夫都會有長進，若是博士班的學生，雖說不一定很會寫論文，但是實做與研究能力都會變得很好。於是，每一天我都拖著極度疲累的身心回家，但是，也無形中跟學生的感情就很好，畢業後，我當他們是朋友，，而多數學生畢業後都跟我保持聯絡，也還會回來看我，有男女朋友也會跟我說或帶來給我看看，結婚都會請我去吃喜酒，甚至還會在我生日時回來幫我過生日。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;不過，這一切從2006年我接任計網中心的行政職務開始變了。我把許多時間投入在改善學校行政電腦化的工作，雖然三年下來，做了非常多改善，可是畢竟一個人一天只有24小時，加上Diane到來，我取消了每周一對一的師生討論，只以每周的Group Meeting取代，除非問題一看起來就很大，否則有何研究的問題只在那時討論，剛開始還感覺不到壞處，因為那時的研究生在大學部時就修過我的課，而過去我其實也花很多時間在大學部學生的輔導方面，所以跟大學部學生的感情也好。但是，越到後來，問題越多，我感到跟碩士班學生間的嚴重隔閡，所有學生的進展也慢了下來，然後，開始有學生兩年畢不了業，博士班學生到外面interm後不打算再回來繼續學業，這個實驗室出了毛病，而毛病的根源在我自己。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;然後，我從同學眼中不再看到早期的學生看著我時的親近的眼神，我一向引以為傲的部分現在反而成為我最大的失落，但是病弱的身體讓我有藉口，直到，我自己的專題生，曾經是本系大學部前幾名的學生無法準時畢業，我覺得難過極了。諷刺的是，我竟然得到一個名不符實的優良教師獎，讓我連領獎都不敢去。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;11月初，我的一位學生回到實驗室，決定完成學業。有一次，她跟我說她很不習慣現在的實驗室，因為一點discipline也沒有，老師不再跟過去一樣跟學生那麼親近，實驗室的研究能量嚴重下降，她跟我說，要不是當年我陪過她走過一大段做學問的路，今天她根本不會回來這樣子的地方。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;對我來說，這是無比沉重的一席話，我誠意的接受下來，覺得慚愧，也願意懺悔。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;我記得很久以前我說過一句話，現在我對自己再說一遍：&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;老師教給學生知識，學生拯救老師的靈魂。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;對我來說，真的是我的學生在最重要的時刻拯救了我。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;11月，我決心恢復一對一或一對二的師生meeting，不管我的身體有多麼疲累。雖然我的程式能力不再優良，但是眼光還沒退化殆盡，我陪著大家看Code，依照結果，當場請學生改code，一再的修正，一邊講解原因，一邊回到過去依照學生的特質來引導他們的教學方式。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;老師用多少心思在學生身上，學生就會如實回應，真是一點不假。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;12月，我把碩三的那位其實是極優秀的學生找回來，每周跟他做密集的討論，在12月的最後一星期，我讓他住到我家來，多次改進code，一邊幫忙看論文與彩排，終於在2010年12月的最後第二天完成口試。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;兩個多月來，我懷著贖罪的心情努力著，我把實驗室的重點研究分成兩部分，一是以音樂為主，一是以系統實做為主，前者以做出一流的研究與論文為主，後者以架構多核心雲端基礎結構與應用為主，以做出有商業價值但不一定要出論文為目標。然後刪除其他能做想做但是不一定有資源與時間做的研究。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2011年1月，在音樂方面，我們終於有相當大的進展，這星期，我在會議時感謝我的學生容忍我這個怠惰已久的老師，感謝他們做出這麼棒的研究，讓我們在專精的這部分能夠有領先全球的研究機構的可能性，讓我可以不會愧對我的老師當年對我的教誨。在多核心系統方面，我們的軟硬體環境日益成熟，今年內，我們的以ARM與FPGA為元件的多核心系統以及我們稱為ThinＣloud的雲端Infrastructure的原型將會問世。另外，有關SystemC運算核心的平行化也快要到開花的階段，而由玉琳獨自闖入的幼兒腦波研究領域也將會有第一份入門的研究成果產出，我衷心期盼因為她的努力可以為不幸的孩子帶來一點希望。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;曾經，我以身為老師為終身志業，曾經，我一度迷失在這條路上，但是我覺得我的身上一定帶著眾多前世以來就一直帶在身上的地圖，所以我總是會找到回來的路，我想，至少在這一世我大概是不會再迷路了。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;我再次對過去我所對不住的所有學生說抱歉，雖然人生無法重來，我也很難彌補我的過失，但是，我還是要厚顏的請求您們的原諒，同時也原諒我不時的疏忽，任性，甚至孩子氣等等種種缺點。假如在未來，你們需要我的意見的話，又或，您只是希望跟人話話家常，請隨時來找我，我總是我的辦公室裡或是家裡，放著音樂，準備好咖啡與茶在等帶著你們回來，希望能做你們一生中最好的朋友。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;只是為了自己的生活而做事，這樣子的生命沒有意義。作為一個老師，沒有了能跟他成為終生朋友的學生，這樣子的生命就不精采。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;某齣日劇裡，女主角問男主角覺得甚麼時候最幸福，男主角在劇中開了一間小小的花店，他回答道，當人家稱呼我為＂花店老闆＂時是我覺得最幸福的時候。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;對我來說，那就是把＂花店老闆＂換成＂老師＂。我想現在的我是幸福的，希望你們也都能幸福。      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-5107698930724311333?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/5107698930724311333/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=5107698930724311333' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/5107698930724311333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/5107698930724311333'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2011/01/blog-post.html' title='沒有你們，生命就不精采：我的懺悔文'/><author><name>SCREAMLab</name><uri>http://www.blogger.com/profile/05590168398461567054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_H1JqYnMe9ow/SQm74AxigRI/AAAAAAAAAAM/8oHey4ZZfPk/S220/Snoopy001.jpeg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6047183369381367144</id><published>2011-01-13T13:21:00.000+08:00</published><updated>2011-01-13T13:29:59.824+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tool Chain'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenESL'/><category scheme='http://www.blogger.com/atom/ns#' term='ESL'/><category scheme='http://www.blogger.com/atom/ns#' term='Courses'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>2010系統層級程式設計簡介與實做</title><content type='html'>&lt;p&gt;&lt;font face="微軟正黑體"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2011/1/12&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;期末Project評分方式請見:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://0rz.com/W1WIdC"&gt;&lt;font color="#ff0000"&gt;期末作業評分&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;-------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/1/5&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;期末Project:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;期末作業的規範如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1. 使用8051當做中央處理的機器，此為模組一，其工作如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.1 接收來自影像輸入模組的資料。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.2 傳送已處理之影像資料至檔案寫入模組。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3 接收來自參數模組織參數決定處理方式，處理動作於接收來自參數模組之訊息後才開始。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3.1 如參數為0， 將每一影像pixel亮度加上20&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3.2 如參數為1， 將每一影像pixel亮度加上20&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3.3 如參數為2， 將每一影像pixel亮度取sqrt後乘以16&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3.4 如參數為3， 將每一影像pixel亮度平方後除以256&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.4 通知影像輸入模組可以再輸入下一張影像&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2. 影像輸入模組，此為模組二，其工作如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.1 主動輸入一張以YUV格式的影像，檔名由使用者輸入。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.2&amp;#160; 顯示此一影像&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.3&amp;#160; 通知模組一來接收影像。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.4&amp;#160; 接收模組一的訊息以示可以處理下一張影像。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;3. 檔案寫入模組，此為模組三，其工作如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.1 接收來自8051處理後的影像資料。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.2 根據使用者輸入之檔名寫檔。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.3 顯示接收之影像&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;4. 參數模組，此為模組四，其工作如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.1 使用者輸入處理參數&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.2 通知模組一接收參數並開始處理。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;在此，不限定模組織間的溝通通道之實作方式，但是，如果以&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" size="3" face="微軟正黑體"&gt;&lt;strong&gt;1. 一個統一的匯流排(Bus)的方式實做(也就是另外設計Bus為模組五)，加學期總分三分。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" size="3" face="微軟正黑體"&gt;&lt;strong&gt;2. 如果定出Bus 的協定(含Timing Diagram)並實做出Cycle Accurate (CA)的Bus模組，再加學期總分五分。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;以上加分機制實施後，以總分為99分為成績上現。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&lt;font color="#0000ff" size="3"&gt;&lt;strong&gt;期末作業需含完整報告，並附執行檔，將視報告完整度酌量增加評分。如果只有程式以及可執行之執行檔，將只有&lt;font face="微軟正黑體"&gt;&lt;font color="#0000ff" size="3"&gt;&lt;strong&gt;期末作業&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;50%的分數。&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160; &lt;font color="#ff0000" size="3"&gt;期末Project期限為11:59:59PM, 1/24, 2011，不再展延。如之前有作業要補交，也請以之為期限，但成績以乘以0.7計。成績將於11:59:59AM, 1/26, 2011公佈在系辦公室公布欄，如有疑義，請在4PM, 1/26, 2011前向助教詢問是否有登記錯誤，之後將不再接受更改。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;-------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/12/20&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;這是SystemC有關Ports的部分.&lt;/p&gt;  &lt;p&gt;請在這裡下載: &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/Ports_2010.pdf"&gt;&lt;font color="#ff0000"&gt;Ports&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;有關SystemC Communication的更詳細解說請見: &lt;a href="http://ece.ut.ac.ir/classpages/S85/HardwareSoftwareCodesign/SystemC_books/Kluwer.Academic,.SystemC.From.the.Ground.Up.(2004).DDU.pdf" target="_blank"&gt;&lt;font color="#ff0000"&gt;SystemCBook&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;---------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/12/17&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;有關8051的簡介以及工具&lt;/p&gt;  &lt;p&gt;請在這裡下載: &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_9/SCREAM_8051_and_toolchain_v2.pdf"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;SCREAM 805,&amp;#160; its toolchain and FPGA Emulator&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/12/15&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;豪文學長說上星期竟然沒有人把8051 Simulator灌起來，所以實在不知道大家的問題是什麼，請大家趕快動作，因為這個作業最困難之處在於環境的設定。程式倒還是其次。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;以下是作業要完成的。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1. 使用 8051 ESL/SystemC Simulator，請先在上面跑一個簡單的程式，然後使用GDB來debug。簡易程式如下:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160; main(){&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int i,k,j;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; k=1000;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j=1000;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for(i=0:i&amp;lt;k;i++) j- -; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&amp;#160;&amp;#160; 請觀察j的值是否對了。請注意，要知道j有沒有算對，除了用GDB之外，還可以有什麼方法呢?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2. 使用學長提供的8051環境。學長已經提供了一個範例，那是用一個8051以外的Module與8051之間進行溝通。 請改寫此一範例，將上述程式的迴圈數改變。也就是k的內含值。此一外掛模組的功能是自鍵盤輸入一整數，再將此一數字傳到8051模組已更改回圈數。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;3. 請增加一個模組，將8051計算的每一個j的值傳過去，然後寫入一個檔案。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;4. 更改8051之程式，讓它可以接受多次的外部回圈數的設定，並保持第3部分之寫檔功能，直到輸入迴圈數為-1為止。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;-----------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/12/8&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是SystemC有關Channels的討論與作法&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/Channel_2010.pdf"&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;Channels&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/11/17&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是SystemC有關Concurrency的討論與作法.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/Concurrency_2010.pdf"&gt;&lt;font color="#ff0000"&gt;Concurrency&lt;/font&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/11/16&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是SystemC有關SC_THREAD與AC_METHOD大致的實作方式與範例.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載:&lt;/font&gt; &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/Thread_and_Method_2010.pdf"&gt;&lt;font color="#ff0000"&gt;Thread and Method&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/11/3&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是SystemC有關Main Function以及Module Function的宣告以及大致的實作方式與範例.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_11/SystemC_MainandModule2009_11.pdf"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;Structure: Main and Module&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;----------------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/11/3&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是有關解釋SystemC如何根據時序(Timing)來進行模擬, 因為所有硬體系統都需要跟時序相關的.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_11/SystemC_Time2009_11.pdf"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;Timing&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;-------------------------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2010/11/3&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;這是有關解釋SystemC的資料型態.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_11/SystemC_Datatypes2009_11.pdf"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;Data Types&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;_____________________________________________________&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/10/21&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這次的投影片是講解更多的範例以便讓同學多了解SystemC的寫法，這個投影片也是一般SCREAM Lab的自己內部訓練用的簡易型資料，在此同時也規定了第二次的作業。&lt;/font&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;請在此下載: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/SystemCBasic2010.pdf"&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;System Beginners&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/10/19&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;對不起，借一下版面，今年的專題指導名單為:&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;1. 李柏毅&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2. 陳政澤&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;3. 陳奇鴻&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;4. 林俊緯&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;假如前面四位有人改變心意的話，那麼&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;5. 柯旻漢&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;對不起，耽擱大家。並向沒抽到的說聲抱歉。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;-------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/10/11&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這上星期，我們對ESL的重要性做了一點簡單的介紹，為了讓課程的主要進度可以快一點，所以我要先介紹一點SystemC，此一目前的ESL標準程式語言，等大家做了第一個SystemC作業後，再回頭來講ESL的其他觀念。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;以下是SystemC的Overview: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/SystemC_Overview2010.pdf"&gt;&lt;font color="#ff0000"&gt;SystemC Overview&lt;/font&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;HelloWorld程式範例如下: &lt;/font&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/ESL_example.rar"&gt;&lt;font color="#ff0000"&gt;SystemC HelloWorld Example&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;範例程式請在這裡下載:&lt;/font&gt; &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_11/hs example code.rar"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;SystemC Overview Program Example&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;-------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/10/6&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;作業上傳位址:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;ip : 140.116.82.184    &lt;br /&gt;port : 21     &lt;br /&gt;user:eslcourse     &lt;br /&gt;password: scream&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;--------------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/10/5&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這學期，我把上課順序調整一下，先講一點ESL的觀念，然後上SystemC的入門，再回來講完ESL。然後再上其他的課程。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這樣做的用意是8051在其他課程已經再上了，我等一下子再上，其用意只是在於補充一點資料以及我的實驗室所在用的 與8051有關的ESL工具。這是有關ESL的整體的概念性簡介:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;Basics of ESL Design and Modeling&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;第二回上課投影片在此下載: &lt;strong&gt;&lt;u&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_9/ESLBasics.pdf"&gt;&lt;font color="#ff0000"&gt;ESL Basics&lt;/font&gt;&lt;/a&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;未來的Topics包含:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;SystemC coding and simulation&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;Review of Verilog coding and simulation&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;SCREAM8051 and its Toolchain&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;OpenESL&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;Heterogeneous Simulation Environment&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;strong&gt;Simple SoC Design, Modeling and Simulation&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;HW and Grading:&lt;/strong&gt; 五個, 分別練習 C++/Threads, 8051 coding, Verilog coding, SystemC coding&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;Term project:&lt;/strong&gt; Simple SoC Modeling and Simulation Using 8051/ModelSim/SystemC/Verilog&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;HW(60%)+Project(40%). 如期末作業未交或兩個作業(或以上)未交則不及格. 作業必須要能正常執行, 否則視同未交.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;課程資料: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;主要上課資料: 線上投影片(PDF&amp;#160; 格式)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;參考資料: &lt;font color="#0000ff"&gt;&lt;strong&gt;1. &lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;a href="http://screamlab-ncku-2008.blogspot.com/"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;SCREAM Lab Blog&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. &lt;/strong&gt;&lt;/font&gt;&lt;a href="http://screamlabopensource.blogspot.com/"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;SCREAM Lab Open Source Blog&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3. &lt;/strong&gt;&lt;/font&gt;&lt;a href="http://screamlabopensource.blogspot.com/"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;SystemC From the Ground&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4. &lt;/strong&gt;&lt;/font&gt;&lt;a href="http://www.doulos.com/knowhow/systemc/"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;The Guide to SystemC&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;助教的Email: &lt;/strong&gt;&lt;/font&gt;&lt;a href="mailto:ProdigyJerry@gmail.com"&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;&lt;strong&gt;ProdigyJerry@gmail.com&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;假如你們還對此一topic想有進一步的了解, 可以Google以下的關鍵字。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1. SystemC Simulation Kernel&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2. Advanced OpenESL tool development&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;3. TLM2.X&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;4. ARM Processor ESL Model&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;5. Multi-core Virtual Model&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;6. Multi-core Programming on Virtual Model&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;7. Multi-core application programming using CUDA &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;8. Debugging tool for microprocessors&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.arm.com/pdfs/ARM_ESL_20_3_JC.pdf"&gt;&lt;font face="微軟正黑體"&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font face="微軟正黑體"&gt;---------------------------------------------------&lt;/font&gt;   &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;我一直覺得SoC設計應該要由資訊系的學生來做才恰當, 但是資訊系的學生一向怕硬體, 為了破除這個問題, 我在2009的下學期的大學部開一門選修課, 課名如標題. 英文標題是:&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#000000" size="3" face="微軟正黑體"&gt;Introduction to Programming and Tools of Electronic System Level (ESL) Design&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;我寫了第一階段的投影片, 用意在簡介一下ESL的設計觀念. 如下:&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_6/ESL_1.pdf"&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;Electronic System Level Design Basics&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;上面投影片的內容還會再更新，但是可以供大家參考。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;因為是大學部的課, 一些基本的東西還是要含蓋一下, 我又不想把課弄得講太多ESL, 可是實務卻做的少. 所以我計劃有一章是基本工具與知識的介紹, 以便在實做term project或Homework時可以用到. 以下是幾個重要的Topics:&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;1. C++ Basics&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;2. Threads&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;3. Processes&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;4. Verilog HDL Basics and Logic Design&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;5. HDL Simulator and FPGA&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;6. SCREAM 8051 and toolchain&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;7. SCREAM OpenESL&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#0000ff" face="微軟正黑體"&gt;&lt;strong&gt;8. Computer Architecture Basics&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這一些Topics本來有些是同學在其他課程當中就修過了的，但是假如您覺得自己還不夠清楚，請自己加強一下，老師只負責簡單介紹。&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;這學期的上課資料多半會跟去年的類似，但是我會在做一些資料的修正與補充。而由於8051的部分，我們的工具經過一年的修正，加上專題學長的努力，bugs已經少很多了，也就是期末的作業會進行得更順暢，在此向上一屆的同學說抱歉，也向負責的學長說謝謝。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;最後，我發現同學對微處理機與計算機組織的支是還太弱，這是硬體系統設計的基礎，希望同學多自己加強，另外就是8051的使用也是本學期的重點，希望同學在微處理機課程裡多用功。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;2010/9/12&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;以下是第一回的投影片, 是有關C++, Process與Thread.&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;請在這裡下載: &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2009_9/C++_Process_Thread_Overview.pdf" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;C++, Process與Thread&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;新版的投影片請在此下載: &lt;a href="http://ludwig.csie.ncku.edu.tw/members/alvin/2010_9/ESL/C++_Process_2010.pdf"&gt;&lt;font color="#ff0000"&gt;C++/Process/Thread&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#ff0000" face="微軟正黑體"&gt;10/14要繳交的作業內容在新板投影片裡。&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-6047183369381367144?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/6047183369381367144/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=6047183369381367144' title='10 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6047183369381367144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6047183369381367144'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/09/2010.html' title='2010系統層級程式設計簡介與實做'/><author><name>SCREAMLab</name><uri>http://www.blogger.com/profile/05590168398461567054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_H1JqYnMe9ow/SQm74AxigRI/AAAAAAAAAAM/8oHey4ZZfPk/S220/Snoopy001.jpeg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-4948161202687178203</id><published>2010-12-31T11:56:00.000+08:00</published><updated>2010-12-13T16:08:24.068+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Meetings'/><title type='text'>與老師的談心時間</title><content type='html'>為了方便老師跟同學每週上網頁新，我將連結公佈在blog上。&lt;br /&gt;&lt;a href="https://spreadsheets.google.com/ccc?key=0Ah21HMqvV0hCdEpBb1RBbldocmRNLXBvM0RTRXJVNWc&amp;amp;hl=en" title="https://spreadsheets.google.com/ccc?key=0Ah21HMqvV0hCdEpBb1RBbldocmRNLXBvM0RTRXJVNWc&amp;amp;hl=en"&gt;https://spreadsheets.google.com/ccc?key=0Ah21HMqvV0hCdEpBb1RBbldocmRNLXBvM0RTRXJVNWc&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;另外提醒一下，本週(12/13~)碩一的同學通通還沒填哦。&lt;br /&gt;話說，現在blog文章是不是不能透過修改發佈文章的時間(i.e.設成未來時間) 來置頂了呢？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-4948161202687178203?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/4948161202687178203/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=4948161202687178203' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4948161202687178203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4948161202687178203'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/12/blog-post.html' title='與老師的談心時間'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-4405566840522509738</id><published>2010-12-30T17:38:00.061+08:00</published><updated>2011-02-24T15:40:07.254+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>Score Alignment and Following - 小聽</title><content type='html'>&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110223]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;‧DTW path onset selection 一個midi frame對多個wav frame的問題&lt;br /&gt;1. midi的ADSR之A第一個值不從零開始，改成0.1。(也許是因為0對noise太敏感)&lt;br /&gt;2. midi onset frame定為A state的中間。&lt;br /&gt;&lt;br /&gt;‧MATLAB記憶體不足的問題&lt;br /&gt;1. use memory defragmentation (因為MATLAB需要連續的記憶體)&lt;br /&gt;2. frequency domain用其他的scale&lt;br /&gt;3. others...&lt;br /&gt;&lt;br /&gt;‧目前的Cakewalk舊版讀MAPS的midi會有錯&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110217]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;W partial之外的bin設為0的方法。請和2/9的圖來比較。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6YntrCMbkjk/TVzGXVTcyLI/AAAAAAAAAsM/EabSavjYUBM/s1600/K281-Andante-4LowOctaves-L100-1-gbg-W0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://4.bp.blogspot.com/-6YntrCMbkjk/TVzGXVTcyLI/AAAAAAAAAsM/EabSavjYUBM/s400/K281-Andante-4LowOctaves-L100-1-gbg-W0.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110210]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;schedule:&lt;br /&gt;deterministic harmonic constraint -&amp;gt; temperal smoothnese -&amp;gt; spectral smoothnese&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110209]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;同樣是 Friedrich Gulda 的 K 281 - Andante Amoroso&lt;br /&gt;抓了一個低音域的連續八度音片段&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TVKNRB8mFtI/AAAAAAAAAsI/EGzY3M8954Y/s1600/score-freq-4LowOctaves.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TVKNRB8mFtI/AAAAAAAAAsI/EGzY3M8954Y/s200/score-freq-4LowOctaves.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&amp;nbsp;λ = 100, garbage = 1&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TVJUXbMXHwI/AAAAAAAAAsE/AJVZvNR_3aE/s1600/K281-Andante-4LowOctaves-L100-1-gbg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TVJUXbMXHwI/AAAAAAAAAsE/AJVZvNR_3aE/s400/K281-Andante-4LowOctaves-L100-1-gbg.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;58.2705Hz的基頻能量非常小，由於圖比例的關係看不出來。&lt;br /&gt;但是實際上它的能量真的很小，且看的出來三倍頻能量比基頻大許多。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TVJUS7ktMCI/AAAAAAAAAsA/c54R_UNwzjo/s1600/spectrum.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="204" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TVJUS7ktMCI/AAAAAAAAAsA/c54R_UNwzjo/s320/spectrum.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;後來去看西班牙鋼琴資料庫的一些低於100Hz左右的單音頻譜，&lt;br /&gt;發現也有某些二三倍頻的能量大於基頻許多的例子。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110126]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All is 440Hz.&lt;br /&gt;piano : &lt;a href="http://ludwig.csie.ncku.edu.tw/members/vivian/wav/piano_440.wav"&gt;wav&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TUGozLyZNoI/AAAAAAAAArU/4uE3tm5gcVk/s1600/piano.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="83" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TUGozLyZNoI/AAAAAAAAArU/4uE3tm5gcVk/s320/piano.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;violin : &lt;a href="http://ludwig.csie.ncku.edu.tw/members/vivian/wav/violin_440.wav"&gt;wav&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TUGo4Y-QwyI/AAAAAAAAArc/Pn30cJXwrqk/s1600/violin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TUGo4Y-QwyI/AAAAAAAAArc/Pn30cJXwrqk/s320/violin.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;trumpet :&lt;a href="http://ludwig.csie.ncku.edu.tw/members/vivian/wav/trumpet_440.wav"&gt;wav&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TUGo7lmRBzI/AAAAAAAAArk/WRkw-WHuA3E/s1600/trumpet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TUGo7lmRBzI/AAAAAAAAArk/WRkw-WHuA3E/s320/trumpet.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110125]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;P mask, tone model, if else.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110120]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Midi note envelope:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TThummTlJvI/AAAAAAAAAqk/nx9My-kgpcE/s1600/adsr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TThummTlJvI/AAAAAAAAAqk/nx9My-kgpcE/s320/adsr.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Transient part : A= 0.02s, D=0.02s, fixed.&lt;br /&gt;Otherwise, S and R can be scaled. &lt;br /&gt;&lt;br /&gt;K281.Andante - 2 bar&lt;br /&gt;&lt;br /&gt;1. 將第1、2個template除外的其他template (3rd~13th)，給之inital H，&lt;br /&gt;而W的部分先用原本gaussion的initial partial方式來training ，如下圖。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TTh8tx1V0sI/AAAAAAAAAq4/gXCImFZ0Mg8/s1600/00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TTh8tx1V0sI/AAAAAAAAAq4/gXCImFZ0Mg8/s320/00.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;結果：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TTh8JwY7BxI/AAAAAAAAAq0/dbEmasLbQWs/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TTh8JwY7BxI/AAAAAAAAAq0/dbEmasLbQWs/s320/01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;2. 把3rd~13th template W也用上第一次的結果，如下圖。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTiOcOutAGI/AAAAAAAAAq8/OEzeSL66lwQ/s1600/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTiOcOutAGI/AAAAAAAAAq8/OEzeSL66lwQ/s320/02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;結果：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TTiO0V64gNI/AAAAAAAAArA/Ha3NV_v7QRk/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TTiO0V64gNI/AAAAAAAAArA/Ha3NV_v7QRk/s320/03.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;兩者好像差不多...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110119]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;harmonic bands寬度: 一個半音-&amp;gt;半個半音&lt;br /&gt;Mean of all onset difference (Midi synthesized-G Air-2 bars)&lt;br /&gt;0 garbage = 0.057472555 -&amp;gt; 0.057610769&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;1 garbage = 0.167695353 -&amp;gt; 0.087274952&amp;nbsp; (!) &lt;br /&gt;&lt;br /&gt;對付實際演奏的音檔，應該還是需要garbage template的存在，&lt;br /&gt;所以以後把bandwidth設成半個半音來做實驗好了。&lt;br /&gt;&lt;br /&gt;因此將garbage template 個數1，半個半音的bandwidth為參數，&lt;br /&gt;改變midi envelope為ADSR，如下圖：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTbHqK59UHI/AAAAAAAAAqM/RTASzJqInrY/s1600/env-adsr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTbHqK59UHI/AAAAAAAAAqM/RTASzJqInrY/s320/env-adsr.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mean of all onset difference : 0.087274952 -&amp;gt; 0.400023036&lt;br /&gt;結果每個onset都變糟了！ &lt;br /&gt;&lt;br /&gt;以template #14: 440Hz為例，共有三個note，&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTbXH1OvjEI/AAAAAAAAAqQ/B2WNzP2QheU/s1600/new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTbXH1OvjEI/AAAAAAAAAqQ/B2WNzP2QheU/s320/new.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;左圖是簡單的梯形envelope，Diff = ( 0, 0.053333333, 0.022358277 )&lt;br /&gt;右圖是新的ADSR envelope，Diff = ( 0, 0.152018141, 0.376462585 )&lt;br /&gt;&lt;br /&gt;看圖，如果把onset的位置像老師說的定在A stage的中間，那麼應該會準一點吧！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110118]&lt;/span&gt;&lt;br /&gt;Friedrich Gulda - Mozart Piano Sonata K 281 - 2. Andante Amoroso - 3 bars&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVB1_To4lI/AAAAAAAAAp4/_cmrzGkJas0/s1600/score-freq-3-bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="99" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVB1_To4lI/AAAAAAAAAp4/_cmrzGkJas0/s200/score-freq-3-bar.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;λ=100&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TTVB-DNG46I/AAAAAAAAAp8/L0Gzd6_B4Y0/s1600/K281-Andante-3-bar-L100.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TTVB-DNG46I/AAAAAAAAAp8/L0Gzd6_B4Y0/s320/K281-Andante-3-bar-L100.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;λ=10000&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVCBxWW2fI/AAAAAAAAAqA/G0S134iTO1g/s1600/K281-Andante-3-bar-L10000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVCBxWW2fI/AAAAAAAAAqA/G0S134iTO1g/s320/K281-Andante-3-bar-L10000.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;λ=100, 1 garbage&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TTVCE7I8u1I/AAAAAAAAAqE/TrsLdeCUO5w/s1600/K281-Andante-3-bar-L100-1-gbg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TTVCE7I8u1I/AAAAAAAAAqE/TrsLdeCUO5w/s320/K281-Andante-3-bar-L100-1-gbg.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;λ=100, 3 garbage&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVCHcTnFxI/AAAAAAAAAqI/m29Zgil2ygU/s1600/K281-Andante-3-bar-L100-3-gbg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTVCHcTnFxI/AAAAAAAAAqI/m29Zgil2ygU/s320/K281-Andante-3-bar-L100-3-gbg.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mean of all onset difference (Midi synthesized-G Air-2 bars)&lt;br /&gt;0 garbage = 0.057472555&lt;br /&gt;1 garbage = 0.167695353&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110114]&lt;/span&gt;&lt;br /&gt;套一個衰減較快的簡單envelope似乎效果比較好一點&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TTAvGFNHHtI/AAAAAAAAApg/ACN0tXbQFSw/s1600/env.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TTAvGFNHHtI/AAAAAAAAApg/ACN0tXbQFSw/s320/env.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TTAvHyTSd1I/AAAAAAAAApk/Mzl7WmXhOPw/s1600/new2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TTAvHyTSd1I/AAAAAAAAApk/Mzl7WmXhOPw/s320/new2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TTAvIdzWXyI/AAAAAAAAApo/aHzKLsZLK-M/s1600/new3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TTAvIdzWXyI/AAAAAAAAApo/aHzKLsZLK-M/s320/new3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100112]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;今天大家討論之後發現好幾個問題將midi note的能量套一個簡單的envelope，如圖：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TS35aiLkIuI/AAAAAAAAAo4/i8R7NR-ZiMo/s1600/midi-env.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TS35aiLkIuI/AAAAAAAAAo4/i8R7NR-ZiMo/s320/midi-env.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;目前發現有兩個地方因此有所改進：&lt;br /&gt;&lt;br /&gt;1. 對於同時出現的pitch音，在DTW時有了改善，以440為例，在第二小節後半的部分第一聲部和第二聲部同時出現。&lt;br /&gt;&lt;br /&gt;原本：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TTAQVnEAcQI/AAAAAAAAApQ/YYYzEGhvtO4/s1600/old.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TTAQVnEAcQI/AAAAAAAAApQ/YYYzEGhvtO4/s320/old.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;後來：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TTAQcOHKvkI/AAAAAAAAApU/FbFoIeA8B-8/s1600/new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TTAQcOHKvkI/AAAAAAAAApU/FbFoIeA8B-8/s320/new.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;可以看出在2500的附近path有找到第二個peak。&lt;br /&gt;&lt;br /&gt;2. 90度的dtw path 會有 midi frame 一對多個 wav frames 的情況，因此我們需要要訂立一個規則去選擇那一個frame是我們要的，onset部分看起來都是選第一個 frame是最好的，所以假設規則是選最前面的frame，但是在offset的時候卻可能差很多，如下圖。&lt;br /&gt;&lt;br /&gt;原本：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TS39pAfl6wI/AAAAAAAAApI/GIvubEZiM3k/s1600/02old.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TS39pAfl6wI/AAAAAAAAApI/GIvubEZiM3k/s320/02old.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;後來：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TS38nwW3LwI/AAAAAAAAApE/-6LaTwTwGRw/s1600/02new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TS38nwW3LwI/AAAAAAAAApE/-6LaTwTwGRw/s320/02new.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;可以看出offset的位置依照規則來選的話結果算是好的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20110106]&lt;/span&gt;&lt;br /&gt;todo :&lt;br /&gt;1. midi中音符的地方能量改成"梯形"。&lt;br /&gt;2. training一次後，使用initial W : 在某個時間點沒有其八度音的音，initial H : DTW的結果。&lt;br /&gt;&lt;br /&gt;貼一下結果圖：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TTRnUM5BixI/AAAAAAAAApw/6xnfykzoo38/s1600/score_2-bar-freq.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TTRnUM5BixI/AAAAAAAAApw/6xnfykzoo38/s200/score_2-bar-freq.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TS38W-jHEnI/AAAAAAAAAo8/j28VhvinsFQ/s1600/Air-2-bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TS38W-jHEnI/AAAAAAAAAo8/j28VhvinsFQ/s400/Air-2-bar.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101230]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;今天大家討論之後發現好幾個問題&lt;br /&gt;&lt;br /&gt;1. 音檔比譜高了八度音&lt;br /&gt;2. partial filter bands 忘記inverse&lt;br /&gt;3. 音檔本身高頻就沒有能量&lt;br /&gt;4. 左手應該是Do mi so，比譜多了一個E5。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (實際用鋼琴測試了一下，應該是有彈mi)&lt;br /&gt;5. 多音可以用garbage template來解決，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 少音卻可能會發生那個template吃掉別人的partial能量的現象。 &lt;br /&gt;&lt;br /&gt;更正一下結果圖：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TRzWWY00SnI/AAAAAAAAAoc/RzUcyYAZpbo/s1600/Boston-1half-bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TRzWWY00SnI/AAAAAAAAAoc/RzUcyYAZpbo/s400/Boston-1half-bar.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;‧λ=100的harmonic的效果不夠好，右邊的才有比較好的效果，&lt;br /&gt;&amp;nbsp;&amp;nbsp; 其中第一個template的第二根peak就是 Mi (E5)的基頻。&lt;br /&gt;‧partial數很少是因為音檔本身的問題。&lt;br /&gt;‧目前的五個template是代表 C5、G5、C6、E6、G6&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以發現八度音和五度音的問題確實會影響很大...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101229]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Input : (performance wav , piano )&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TRrlb9lpjPI/AAAAAAAAAoI/ZtfoBctLiRs/s1600/score_half-bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TRrlb9lpjPI/AAAAAAAAAoI/ZtfoBctLiRs/s200/score_half-bar.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;(按圖可放大)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TRrj-8btXdI/AAAAAAAAAoE/dsaumsCN9rQ/s1600/Boston-1half-bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TRrj-8btXdI/AAAAAAAAAoE/dsaumsCN9rQ/s400/Boston-1half-bar.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;使用鋼琴的演奏音檔，觀察頻譜發現這個樂器的特性不是f0能量最大而是partial 1。&lt;br /&gt;NMF的結果，對照initial template的圖可以很明顯的發現partial跑掉了，將harmonicity cost function的 λ 加大也沒什麼效果..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101227]&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Input data：First bar of "Back - Air on the G String" (wav synthesized by MIDI )&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TRji_cXMU8I/AAAAAAAAAn8/-oLXtw-GfsE/s1600/score_1-bar-freq.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TRji_cXMU8I/AAAAAAAAAn8/-oLXtw-GfsE/s320/score_1-bar-freq.png" width="193" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Only initial：# partial = 10, Gaussion distribution ( σ = 1)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TRji5uy30FI/AAAAAAAAAn4/E8mlyiXU9tc/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TRji5uy30FI/AAAAAAAAAn4/E8mlyiXU9tc/s640/1.png" width="302" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TRjgytECT7I/AAAAAAAAAnw/v4pj_lMzYoY/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;With additional harmonic cost function (by hanyo)：λ = 0.02&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TRjhDt7O1sI/AAAAAAAAAn0/kFLeC1_aHxY/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TRjhDt7O1sI/AAAAAAAAAn0/kFLeC1_aHxY/s640/2.png" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The mean of aboutsolute difference between the above two :&lt;br /&gt;W = 1.0837e-007&lt;br /&gt;H = 9.2215e-004&lt;br /&gt;&lt;br /&gt;Initial template放了對的頻率之後，有沒有使用harmonicity cost function的結果看起來是差不多的。分的結果看起來不錯，但，也許是因為input是由Midi合成的關係？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101221]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Parallelism in Dynamic Time Warping for Automatic Signature Verification&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101216]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;將NMF的template設為只能是譜上出現的音+額外具有特殊功能的template，update時加上harmonic的限制。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;假設在NMF的結果不錯的原則上，&lt;br /&gt;有兩種方法：&lt;br /&gt;&lt;br /&gt;1. 整首歌會出現的pitch都有一個自己的template，得到結果之後，再做單音對單音的 alignment。每個H row，分別去對那個pitch的score，得到自己的alignment。所以音檔裡總共有幾個pitch就會做幾次DTW。&lt;br /&gt;&lt;br /&gt;2. 判斷那一個時間點有哪些音，template的個數和其代表的pitch會隨之改變。不做DTW，直接將H的值來分析結果。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101213]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp; 純MATLAB&amp;nbsp; code的加速：&lt;br /&gt;&lt;br /&gt;本來程式是依照這樣的公式寫，很直覺的就是用for loop針對matrix的每一個element去做計算。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TQXl-VFtWgI/AAAAAAAAAmc/aR1aHhUoLv8/s1600/NMF1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TQXl-VFtWgI/AAAAAAAAAmc/aR1aHhUoLv8/s200/NMF1.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;後來依照我11/23所報的第一篇paper上面的公式，他把它寫成更矩陣的形式。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TQXmBPLXXZI/AAAAAAAAAmg/QwH4N7K_GX8/s1600/NMF2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TQXmBPLXXZI/AAAAAAAAAmg/QwH4N7K_GX8/s400/NMF2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;span style="color: #666666; font-size: 12px;"&gt;[ref. Accelerating Non-negative Matrix Factorization for Audio Source  Separation on Multi-core and Many-core Architectures]&lt;/span&gt;&lt;br /&gt;&lt;div style="color: black; margin: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;改寫後在matlab上跑，參數：frame size = 8192，hop size = 256，# of templates = 10， # of frames = 769。&lt;br /&gt;只計算update部分的時間，iteration = 100次。 &lt;br /&gt;&lt;br /&gt;origin : 297.644882 (sec)&lt;br /&gt;modified：28.522258 (sec)&lt;br /&gt;speedup：10.4355倍&lt;br /&gt;&lt;br /&gt;竟然差了十倍，看來在matlab上真的要盡量用矩陣運算來取代for loop寫法！ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp; 在MATLAB上使用CUBLAS library的SGEMM(Single-precision GEneral Matrix Multiply)：&lt;br /&gt;&lt;br /&gt;矩陣相乘維度參數 &lt;b&gt;m&lt;/b&gt; x &lt;b&gt;k&lt;/b&gt; x &lt;b&gt;n&lt;/b&gt;&lt;br /&gt;假設 C=A*B，A : m x k，B：k x n，C：m x n&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TQXytQlcRrI/AAAAAAAAAmk/oL77mSetahs/s1600/result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TQXytQlcRrI/AAAAAAAAAmk/oL77mSetahs/s400/result.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;每一列的意思：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MATLAB : 使用matlab指令A*B&lt;/li&gt;&lt;li&gt;myAPI：我寫的matlab函式，透過MEX-file得到matlab的參數，因為matlab是double-presicion，要先轉換型態之後，再去使用cublas library，之後再把值傳回。&lt;/li&gt;&lt;li&gt;Speedup：MATLAB time / myAPI time&lt;/li&gt;&lt;li&gt;only CUBLAS：myAPI中，不去計算matlab矩陣轉換到cuda矩陣的時間。&lt;/li&gt;&lt;li&gt;only cublasSgemm：only CUBLAS中，不去計算allocate cuda memory和搬運的時間，只計算lib中矩陣相乘函式cublasSgemm的時間。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;左邊的參數會這樣設是仿造目前的參數W*H 來的，但這樣使用CUDA反而比MATLAB還要慢；右邊的實驗是想說資料維度大一點或許就會比MATLAB來的快，結果也如我想的。&lt;br /&gt;&lt;br /&gt;接下來如果真的要使用mex &amp;amp; CUDA，應該不能一次矩陣相乘就呼叫一次，因為這樣資料要轉換型態、記憶體allocate還要搬好幾次，不划算。應該要寫一個把整個NMF過程都包含進去的API，最好是整個NMF都在GPU memory上面運作就好。&lt;br /&gt;&lt;br /&gt;猜想11/23報的第一篇paper會比後面兩篇speedup來的小的原因是因為，他把每個operation拆開，每一個都寫成一個kernel function去執行，而後面兩篇可能是一次把事情做掉吧。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101206]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black; margin: 0px;"&gt;在Matlab上使用CUDA，可以參考Nvidia提供的pdf。&lt;br /&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/1_0/Accelerating%20Matlab%20with%20CUDA.pdf"&gt;White Paper - Accelerating MATLAB with CUDA™ Using MEX Files&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;如果只要使用cuda提供的library，(ex. cufft)...等，那麼只需寫成.c檔就好了。&lt;br /&gt;&amp;gt;&amp;gt; mex filename.c -IC:\CUDA\include -LC:\CUDA\lib -lcudart -lcufft&lt;br /&gt;成功的話就會被compile成MEX-file(.mexw32)。&lt;br /&gt;&lt;br /&gt;如果需要自己寫kernel function，要寫成cuda特有的.cu檔案才行，之後交給nvcc去compile。&lt;/div&gt;&lt;div style="color: black; margin: 0px;"&gt;這時候需要使用一些plugin tool。&lt;/div&gt;&lt;div style="color: black; margin: 0px;"&gt;&lt;br /&gt;&lt;a href="http://www.cs.ucf.edu/%7Ejanaka/gpu/using_nvmex.htm"&gt;A Guide to Using NVMEX tool&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;可能因為os、matlab、vc版本不同，在這邊會出現一些錯誤。&lt;br /&gt;&lt;br /&gt;首先，我使用的是VC9，但範例中是VC8，因此需要修改一下nvmexopts.bat的一些路徑，&lt;br /&gt;怎麼修改請看此pdf中的第6點 (&lt;a href="http://www.sumseq.com/CUDA_MATLAB_SETUP_GUIDE.pdf"&gt;連結&lt;/a&gt;)。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;再來出現的錯誤&lt;br /&gt;nvcc fatal&amp;nbsp;&amp;nbsp; : Unknown option 'oC:\Users\Vivian\AppData\Local\Temp\mex_F9gfIA\test.obj'&lt;br /&gt;看的出來因為路徑前面多了一個o所以找不到所需要的檔案。&lt;br /&gt;&lt;br /&gt;只好去看一下nvmex.pl，把perl中的一些變數印出來看，發現是&lt;br /&gt;$name_arg = $NAME_OBJECT . smart_quote($target_name);&lt;br /&gt;$NAME_OBJECT這個變數的關係。&lt;br /&gt;&lt;br /&gt;解決方法是把nvmexopts.bat中，&lt;br /&gt;set NAME_OBJECT=-o　改成&amp;nbsp; set NAME_OBJECT=&lt;br /&gt;也就是不給它值，就不會被干擾哩。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;之後再compile，會發現會出現很多錯誤訊息，&lt;br /&gt;google之後找到nvidia forums 有人和我有相同的問題！ (&lt;a href="http://forums.nvidia.com/index.php?showtopic=97199"&gt;連結&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;將 nvmexopts.bat 中，&lt;br /&gt;set COMPFLAGS=-c -D_WCHAR_T_DEFINED -Xcompiler "/c /Zp8 /GR /W3 /EHsc /Zc:wchar_t- /DMATLAB_MEX_FILE /nologo"&lt;br /&gt;&lt;br /&gt;"/Zc:wchar_t- " 改為 "/Zc:wchar_t"，也就是把"-"去掉，這樣雖然會出現一些warning，但是就可以compile過了！&lt;br /&gt;&lt;br /&gt;感謝討論串中的eigma大大。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最後小小測試 fft v.s cufft，speed up大概是1.5~2.5左右。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101123]&lt;/span&gt;&lt;br /&gt;報告&lt;br /&gt;&lt;div&gt;&lt;div style="color: black; margin: 0px;"&gt;NMF on CUDA&lt;/div&gt;&lt;div style="color: black; margin: 0px;"&gt;&lt;a href="http://ludwig.csie.ncku.edu.tw/members/vivian/presentation/101123.pdf"&gt;投影片&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; margin: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101115]&lt;/span&gt;&lt;/div&gt;實作chroma方法on MATLAB，依照Multi-pass...那一篇paper。&lt;/div&gt;Frame size = 8192，hop size = 2048，DTW使用type I，與PSD的一樣。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TODu4sm8NjI/AAAAAAAAAlM/x4woJoHvXKM/s1600/chromagram.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539690199480284722" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TODu4sm8NjI/AAAAAAAAAlM/x4woJoHvXKM/s400/chromagram.png" style="cursor: pointer; display: block; height: 226px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TODvZY2wx5I/AAAAAAAAAlU/kzuSGq8Gk9A/s1600/DTWpath_8192_2048.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539690761113618322" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TODvZY2wx5I/AAAAAAAAAlU/kzuSGq8Gk9A/s400/DTWpath_8192_2048.png" style="cursor: pointer; display: block; height: 341px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/TODv0pZi2NI/AAAAAAAAAlc/5DI4oez1i5Q/s1600/compare_8192_2048.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539691229410941138" src="http://3.bp.blogspot.com/_41yFCBHdPkc/TODv0pZi2NI/AAAAAAAAAlc/5DI4oez1i5Q/s400/compare_8192_2048.png" style="cursor: pointer; display: block; height: 269px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TODxC98G6hI/AAAAAAAAAlk/fFWcgmXVMB8/s1600/compare_table.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539692574954416658" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TODxC98G6hI/AAAAAAAAAlk/fFWcgmXVMB8/s400/compare_table.png" style="cursor: pointer; display: block; height: 151px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;平均差異值來看好像PSD好上一點，但PSD遇到長音感覺比較容易出錯，且chroma的異常值比較少。chroma在第344個錯誤可能真的是因為那個音的onset的能量太小。&lt;br /&gt;&lt;br /&gt;但是在兩個paper中，有一點比較不一樣的地方是在DTW三個方向的weight。&lt;br /&gt;PSD : (w0, w45, w90)=(1,2,1)&lt;br /&gt;Chroma :  (w0, w45, w90)=(1,1,1)&lt;br /&gt;有點trick的是，因為是比min，(1,1,1)這樣的weight會比較傾向於走45度角，應該要讓它大一點畢竟走的距離是比較大的，可以看DTW path右上角的小小方區塊，一個走水平方向一個走斜對角方向，可能是此原因造成的差異，也許兩種都改成(1, sqrt(2), 1)會是比較公平的比較。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101112]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;經由DTW path反推出alignment onset，與之前標的比較。圖為和alignment之後得到的onset與groundthruth onset比較的difference。&lt;/div&gt;另外，因為使用的是typeI的DTW (0, 45, 90度)，所以有可能會有一個midi frame對多個wav frame的情形，下圖分別是取中間frame、第一個frame、最後一個 frame來做為比較的差。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TOAH2WLYdxI/AAAAAAAAAk0/DOUwByqnYIw/s1600/compare_8192_2048.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539436171913361170" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TOAH2WLYdxI/AAAAAAAAAk0/DOUwByqnYIw/s400/compare_8192_2048.png" style="cursor: pointer; display: block; height: 218px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;difference error (seconds):&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TOAInKj3mVI/AAAAAAAAAk8/4vm-dUrRJIM/s1600/compare_table.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539437010608429394" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TOAInKj3mVI/AAAAAAAAAk8/4vm-dUrRJIM/s400/compare_table.png" style="cursor: pointer; display: block; height: 156px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;每個frame之間距離2048，所以resolution大約是46 ms。&lt;br /&gt;&lt;br /&gt;以下以取中位數frame的情況來分析，數字代表音符的index；&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/TOAJclNA-bI/AAAAAAAAAlE/G3yJyhT_-5M/s1600/outliners.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539437928293398962" src="http://1.bp.blogspot.com/_41yFCBHdPkc/TOAJclNA-bI/AAAAAAAAAlE/G3yJyhT_-5M/s400/outliners.png" style="cursor: pointer; display: block; height: 130px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;如果說去除大於1.5秒的那3個值，重新計算difference平均 = 0.0937 s，大約是兩個frame 。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第344個音符是BWV1007這曲子中，中間長音之後的第一個音符，在演奏的音檔中，這個音符的onset音量很小。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TN-szJymXNI/AAAAAAAAAj0/NHBZCInLIxk/s1600/note344_wav.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539336061490453714" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TN-szJymXNI/AAAAAAAAAj0/NHBZCInLIxk/s400/note344_wav.png" style="cursor: pointer; display: block; height: 159px; margin: 0px auto 10px; text-align: center; width: 196px;" /&gt;&lt;/a&gt;而第655、656個notes是曲子的結尾，是長音。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/TN_7qLHSYEI/AAAAAAAAAkc/CiBh6YH70v8/s1600/note656_wav.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539422768645431362" src="http://4.bp.blogspot.com/_41yFCBHdPkc/TN_7qLHSYEI/AAAAAAAAAkc/CiBh6YH70v8/s400/note656_wav.png" style="cursor: pointer; display: block; height: 162px; margin: 0px auto 10px; text-align: center; width: 195px;" /&gt;&lt;/a&gt;&lt;br /&gt;接下來有點想要在matlab上實作一次chroma的方法，比較一下這兩種方法對於BWV1007的結果如何。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101108]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Implement 6月7號所報告的論文，使用Matlab...令人感動的方便許多。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Midi parser的部分感謝這個網站與它的主人&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.kenschutte.com/midi"&gt;http://www.kenschutte.com/midi&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;經由midiInfo可得到每個note的資訊（[track chan nn vel t1 t2 msgNum1 msgNum2]），之後再利用他的piano_roll，此原本是用來畫圖的function，我們丟進適當的時間間隔參數（hop的時間長度），就可以視為是我們的譜的roll，接著用回傳的PR矩陣，可以知道每個frame有哪些音符，再利用它造出我們的filter。每個note有8個bandpass filter，bandwith為一個semitone。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TNjRMsStrOI/AAAAAAAAAiw/28d8te5KUAM/s1600/2_2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5537405757830311138" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TNjRMsStrOI/AAAAAAAAAiw/28d8te5KUAM/s400/2_2.png" style="cursor: pointer; display: block; height: 171px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TNjRS28EW-I/AAAAAAAAAi4/B3iJAq_3RK4/s1600/10_230.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5537405863767333858" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TNjRS28EW-I/AAAAAAAAAi4/B3iJAq_3RK4/s400/10_230.png" style="cursor: pointer; display: block; height: 171px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;依然是先使用Bach BWV1007 prelude做實驗，wav是2分44秒，共656個notes。&lt;br /&gt;圖中藍色線為spectrum，綠色線為band filters。上圖是wav的第2個frame vs midi的第2個frame，distance較小；下圖是wav的第10個frame vs midi的第220個frame，distance較大。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;論文中的hop size為256，所以有5.8ms的resolution。&lt;/div&gt;&lt;div&gt;可是如果這樣的話，matlab記憶體會不夠，因為矩陣變得相當大；且論文中提及他實驗的一首兩分半的巴哈小提琴獨奏，就需要2GB的記憶體，但筆電的RAM也才2GB...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;所以先使用frame size = 8192，hamming window，hop size = 2048。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/TN_In_pN30I/AAAAAAAAAj8/KKLKbk9hUaU/s1600/psd%2526dtw_8192_2048.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5539366656113762114" src="http://2.bp.blogspot.com/_41yFCBHdPkc/TN_In_pN30I/AAAAAAAAAj8/KKLKbk9hUaU/s400/psd%2526dtw_8192_2048.png" style="cursor: pointer; display: block; height: 171px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;左邊是distance的矩陣，顏色越深代表越相似；&lt;br /&gt;右邊紅色線是DTW找出來的對應路徑，0度, 45度, 90度的 typeI，weight=[1,2,1]，頭對頭、尾對尾；此外記錄一下一些參數 thetaD = 0.5, thetaS = 0.5, ss = 1, sd = 1。&lt;br /&gt;可以發現結果和左邊用肉眼看出的由distance小的element所那條組合成的線很相近，不過這也只能說是DTW找出來的path和最小cost真的很符合而已。&lt;br /&gt;&lt;br /&gt;要知道結果好不好，還是要和ground truth（之前用cool edit標的）比較，下一步應該要把cue的資訊弄進matlab計算正確率。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20101026]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;報告&lt;br /&gt;Artificial Neural Network: An Overview&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_101026.pdf"&gt;投影片&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100928]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;A Multi-Pass Algorithm for Accurate Audio-to-Score Alignment&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100928.pdf"&gt;投影片&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100802]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Improving Polyphonic and Poly-Instrumental Music to Score Alignment&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100802.pdf"&gt;投影片&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100608]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Q:&lt;br /&gt;我有一個spectrum，已知裡面的某一個f0，想要知道它是不是單音且為harmonic ？&lt;br /&gt;A:&lt;br /&gt;1. filter : 因為知道f0，在每個倍頻上用 gaussian 去 model 每個 peak&lt;br /&gt;2. 計算 : spectrum 的總能量 - spectrum 經過 filter 後的能量&lt;br /&gt;3. 如果是單音且為harmonic，那麼剩下的能量應該會很小。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100607]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Alignment of Monophonic and Polyphonic Music to Score - Ircam.&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100607.pdf"&gt;投影片&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;除了之前看的chroma feature，也有好一些人是使用這篇論文提出來的方法。這篇論文是2001年publish的，它提出了一個名為 Peak Structure Distance(PSD) 的 feature，這個Distance用來當作DTW中的local distance使用，相對於之前我們的作法就是用來取代Euclidean distance。&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;PSD簡單來說，就是去算score frame與 audio frame 的peak的相似度，越相近distance越小。另外它還model了一個note的開始 (attack model) 與 結束 (silence model) 。&lt;br /&gt;&lt;br /&gt;它做了很多仔細的實驗和數據，結果看起來不錯，感覺上還蠻值得參考的。下次會看也是由Ircam在2003年發表的paper，關於這個方法提出的改進。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100604]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;以 Mozart piano sonata K.545 的前四小節為測試曲子，修改 midi 來合成測試的 wav。&lt;br /&gt;Midi 合成 wav 軟體 : WinGroove&lt;br /&gt;&lt;br /&gt;目前ground truth : Calkwalk 看 event list -&amp;gt; Cool Edit 人工標記&lt;br /&gt;（未來：不執著於要存到wav裡的cue，用另外的檔案代替儲存。）&lt;br /&gt;&lt;br /&gt;新增輸出 onset error 詳細資料的 html table。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;測試了合成時有無reverberation、某個時間點譜不只一個音出現但audio其中一個音比譜晚出現半拍的情況。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;進度投影片&lt;/div&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/audio_100604.pptx"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100521]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;由於想了解DTW在一些特定的情況之下會有怎樣的行為，因此我用midi式的chroma feature來作實驗，測試了比原本的 chroma 多音、少音、平移幾個半音，對於兩種 type 的 DTW 會有怎樣的結果。&lt;br /&gt;&lt;br /&gt;另外也測試了 piano 與 trumpet 的片段。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;進度投影片&lt;/div&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/audio_100521.pptx"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100503]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Handling Asynchrony in Audio-score Alignment&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100503.pdf"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100430]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;現在的目標，是讓score alignment夠準，然後能自動截取audio中每個音的起始時間，還有結束時間，它的f0和partials的frequency、amplitude，來做合成使用。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;新增輸出 cue 詳細資料的 html table、輸出 alignment 結果所對應的midi、wave 之 frame、second 的 html table。&lt;br /&gt;&lt;br /&gt;程式有bug待修。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;進度投影片&lt;/div&gt;&lt;div&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/audio_100430.pptx"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[201003022]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;GPU ...&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100503.pdf"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100204]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;兩件事情：解決讀midi的bug、score alignment的onset時間 v.s 人工標記的onset時間。&lt;br /&gt;&lt;br /&gt;1. 讀midi的bug : 在某些時候會少讀了一些長度&lt;br /&gt;發現依然是讀檔時，byte轉換發生的問題，java的byte是signed，所以當值大於127它就會變成負的，再去做排列就會錯。這個問題之前也發生在讀wav的時候，用一樣的方式解決就好了。&lt;br /&gt;&lt;br /&gt;更正一下上次po的圖，BWV1007前兩小節(點圖可放大)&lt;br /&gt;midi :&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/S2r25vHCd4I/AAAAAAAAAZc/D1gjmhDop9A/s1600-h/2_m.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5434427372134889346" src="http://1.bp.blogspot.com/_41yFCBHdPkc/S2r25vHCd4I/AAAAAAAAAZc/D1gjmhDop9A/s400/2_m.jpg" style="cursor: pointer; display: block; height: 27px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;wav origin :&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r3xacVcpI/AAAAAAAAAZk/NsqSLtYDT08/s1600-h/2_np.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5434428328659743378" src="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r3xacVcpI/AAAAAAAAAZk/NsqSLtYDT08/s400/2_np.jpg" style="cursor: pointer; display: block; height: 36px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;wav considering partials :&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r39Caq7KI/AAAAAAAAAZs/S8tpLCEC55M/s1600-h/2_p.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5434428528368741538" src="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r39Caq7KI/AAAAAAAAAZs/S8tpLCEC55M/s400/2_p.jpg" style="cursor: pointer; display: block; height: 36px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.  score alignment 結果的onset時間 v.s 人工標定的onset時間&lt;br /&gt;&lt;br /&gt;FFT frame size : 4096&lt;br /&gt;hop size (兩個frame起始位置間隔) : 512&lt;br /&gt;表格裡面的值 (秒) :&lt;br /&gt;|score alignment 結果 - 人工標定的onset時間| / 總共onset個數&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r-pd8NIgI/AAAAAAAAAaE/Iz7DF_3gFJM/s1600-h/table.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5434435888741163522" src="http://3.bp.blogspot.com/_41yFCBHdPkc/S2r-pd8NIgI/AAAAAAAAAaE/Iz7DF_3gFJM/s400/table.png" style="cursor: pointer; display: block; height: 169px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/S2r6Wc-yWrI/AAAAAAAAAZ0/Z_mcaZiWkYQ/s1600-h/table.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;br /&gt;&lt;/a&gt;可以發現前四組結果，有考慮partials的方法會比沒有考慮來的好一些，&lt;br /&gt;但是如果是整首BWV1007來做比對，兩者結果都變差許多，而且有考慮partials的方法結果還變得比沒有原始的方法差。&lt;br /&gt;&lt;br /&gt;對於整首的這組結果來觀察，發現平均值增大的原因可能是因為有幾個onset的差異比平均大許多，大概一秒鐘左右。而有考慮partials的方法差異大的onset比原始方法的這種情況還要多。&lt;br /&gt;&lt;br /&gt;新方法大約310-343+後面24個onset誤差較大，原始方法大約323-343+後面20個onset誤差較大所致。第343個onset對於BWV1007剛好是歌曲的段落，是一個長音，而且BWV1007這首歌除了中間和最後的兩個音是長音，其它都是16分音符，不曉得是不是因為這個原因讓判斷變差。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20100120]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Music Score Alignment and Computer Accompaniment&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_100120.pdf"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091231]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;BWV 1007前2小節對譜全圖  (點圖可放大)&lt;/div&gt;&lt;div&gt;沒加新方法的 wav :&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/SzzpVpIvSnI/AAAAAAAAAXs/ZD3O_h_GDT4/s1600-h/03.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5421464609476266610" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SzzpVpIvSnI/AAAAAAAAAXs/ZD3O_h_GDT4/s400/03.png" style="cursor: pointer; display: block; height: 37px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;有往上加 partial 的 wav :&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/Szzo3sfG5JI/AAAAAAAAAXc/Up7HRUTsUd0/s1600-h/01.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5421464094979318930" src="http://3.bp.blogspot.com/_41yFCBHdPkc/Szzo3sfG5JI/AAAAAAAAAXc/Up7HRUTsUd0/s400/01.png" style="cursor: pointer; display: block; height: 37px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;midi :&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SzzpVHak0II/AAAAAAAAAXk/4wdAS4XicPg/s1600-h/02.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5421464600424272002" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SzzpVHak0II/AAAAAAAAAXk/4wdAS4XicPg/s400/02.png" style="cursor: pointer; display: block; height: 40px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可以看出，有加了往上疊加 partial 能量方法的對譜效果比較好，&lt;/div&gt;&lt;div&gt;最後面的部分沒對好，是因為 midi parser 那部分有些問題，最後面少讀了一些音。&lt;/div&gt;&lt;div&gt;所以接下來要幫 midi parser 的部分code debug。&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;→ check 完學長原本的 c# 程式應該是對的，所以可能是改到 java 的時候不知道哪裡改錯了...　　&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: #999999;"&gt;(&lt;/span&gt;&lt;span style="color: #999999;"&gt;20100105&lt;/span&gt;&lt;span style="color: #999999;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091221]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;首先是解決冠廷學長之前沒處理到的部分：由於 map 到每個 pitch class 的 bin 數量不會一樣，所以要做一次 normalize 的動作。&lt;br /&gt;&lt;br /&gt;左邊圖片是原本的，右邊是有加上取平均。(也就是傳統chroma)&lt;br /&gt;1. white noise&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy-YjKHWjHI/AAAAAAAAAUE/N1B87C_BuQQ/s1600-h/%E5%B0%8D%E7%85%A71.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417716606528031858" src="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy-YjKHWjHI/AAAAAAAAAUE/N1B87C_BuQQ/s400/%E5%B0%8D%E7%85%A71.jpg" style="cursor: pointer; display: block; height: 67px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;2. BWV1007-15s&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/Sy-Y2wn-3jI/AAAAAAAAAUk/y_xvKSu5sIk/s1600-h/%E5%B0%8D%E7%85%A72.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417716943282953778" src="http://3.bp.blogspot.com/_41yFCBHdPkc/Sy-Y2wn-3jI/AAAAAAAAAUk/y_xvKSu5sIk/s400/%E5%B0%8D%E7%85%A72.jpg" style="cursor: pointer; display: block; height: 67px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;之後就作新加的部分，要往上加 partial 能量，也加上了 normalize 取平均的步驟。&lt;br /&gt;以 BWV1007 前 15s 為例：&lt;br /&gt;1. original&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sy-v9qKJ8vI/AAAAAAAAAUw/8oxT7yHTB64/s1600-h/origin.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417742350573761266" src="http://1.bp.blogspot.com/_41yFCBHdPkc/Sy-v9qKJ8vI/AAAAAAAAAUw/8oxT7yHTB64/s400/origin.jpg" style="cursor: pointer; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;2. 每個&lt;span style="color: #cc0000;"&gt; bin &lt;/span&gt;從 frequency domain 中找最接近的partial's bin，加總其能量並取平均。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/Sy-wbV3PWMI/AAAAAAAAAU4/nck_0b92YTI/s1600-h/bin_partial.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417742860521789634" src="http://2.bp.blogspot.com/_41yFCBHdPkc/Sy-wbV3PWMI/AAAAAAAAAU4/nck_0b92YTI/s400/bin_partial.jpg" style="cursor: pointer; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;3. 每個&lt;span style="color: #cc0000;"&gt; pitch &lt;/span&gt;從 frequency domain 中找最接近的 partial's bin，加總其能量並取平均。(花較少時間)&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy-wtHIqW0I/AAAAAAAAAVA/RQz0F0dAdMY/s1600-h/pitch_partial.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417743165805976386" src="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy-wtHIqW0I/AAAAAAAAAVA/RQz0F0dAdMY/s400/pitch_partial.jpg" style="cursor: pointer; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;目前以第三個方法為主。&lt;br /&gt;&lt;br /&gt;上面三個圖之間似乎沒有很大的變化，&lt;br /&gt;第二個比較稍微不一樣一點，第一個圖和第三個圖只有些微差距。&lt;br /&gt;&lt;br /&gt;令人在意的是第二個音，譜是 RE，但是卻是五度音的 LA 能量較強，用了新的方法依然沒解決這個問題，這蠻出乎意料的。後來印出一些資料來看，發現可能是threshold設太小的問題。&lt;br /&gt;&lt;br /&gt;這個threshold是用於判別這個bin是不是目前基頻的partial：&lt;br /&gt;| (bin frequency/基頻) - ((bin frequency/基頻)最接近的整數) | &amp;lt;= threshold  　 所以我試著將 threshold 從0.001 調整為 0.1，第二個音 RE 就出現了！ &lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sy_aKtSxvII/AAAAAAAAAVI/RRJ9X-9dXyI/s1600-h/thres1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417788754241895554" src="http://1.bp.blogspot.com/_41yFCBHdPkc/Sy_aKtSxvII/AAAAAAAAAVI/RRJ9X-9dXyI/s400/thres1.jpg" style="cursor: pointer; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;對譜的結果也比之前的好&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy_aWJ7axnI/AAAAAAAAAVQ/dh_NxMBUOTo/s1600-h/thres2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417788950907111026" src="http://4.bp.blogspot.com/_41yFCBHdPkc/Sy_aWJ7axnI/AAAAAAAAAVQ/dh_NxMBUOTo/s400/thres2.jpg" style="cursor: pointer; display: block; height: 355px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091217]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Audio Thumbnailing of Popular Music Using Chroma-Based Representations&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_091217.pdf"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091216]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;與老師討論了一下，以後可能有兩個方向可以走。&lt;br /&gt;&lt;br /&gt;1. 假設 midi 是對的。&lt;br /&gt;我們可以經由 DTW 的 cost 去調整 partial 的比例，也可以說是 chroma template 的 weighting 參數，以貼近現在樂器的特性。&lt;br /&gt;比如說現在這把大提琴第三個partial的能量會特別高，希望可以經由 DTW cost feedback 來調整我們的 chroma template 的參數。&lt;br /&gt;&lt;br /&gt;2. 假設知道是什麼樂器，而且只適用在這首歌只有一種樂器上，但是這樂器可以是多音。&lt;br /&gt;(1) 把 midi 經由這樂器的音色庫，合成出符合這樂器的 wav，轉成 chroma 後再進行對譜。&lt;br /&gt;(2) 由 wav 來建 instrument model，藉由這個來讓 chroma 更準確。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091211]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;看了老師的回應，和小明學長討論了一下，預計的做法是：&lt;br /&gt;FFT(4096) -&amp;gt; map 2048個bin到最接近的 pitch -&amp;gt; 每個pitch從frequency domain中找最接近的partial's bin，加總其能量，取平均。&lt;br /&gt;&lt;br /&gt;這樣應該會減少一些計算量。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091209]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;為了解決五度音等partial重疊導致能量貢獻給別的音名的問題，但是又想要維持使用chroma，也不想要在這裡使用pitch detection等較複雜的演算法。經過討論之後，決定現在多一個步驟的做法：讓每個頻率往上找它的partial，把其能量加起來到自己身上，這樣重疊的partial能量就會貢獻到可能是它的f0的身上。&lt;br /&gt;&lt;br /&gt;流程 :&lt;br /&gt;FFT (size:4096) → Map 每個 bin 到最接近的 pitch frequency → 每個 bin 往上找倍頻的能量並加到自己本身 → 每個 bin 分配到 chroma vector&lt;br /&gt;&lt;br /&gt;我們使用的pitch frequency table是參考wiki的&lt;a href="http://zh.wikipedia.org/wiki/%E9%9F%B3%E9%AB%98#.E9.9F.B3.E9.AB.98.E9.A0.BB.E7.8E.87.E8.A1.A8" target="_blank"&gt;音高頻率表&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;另外就是這個演算法花的時間很久...&lt;br /&gt;&lt;br /&gt;結果:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/Sx_gkmsn_aI/AAAAAAAAATs/kxPGejCRLLg/s1600-h/%E5%BE%80%E4%B8%8A%E5%8A%A02.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5413292196590255522" src="http://3.bp.blogspot.com/_41yFCBHdPkc/Sx_gkmsn_aI/AAAAAAAAATs/kxPGejCRLLg/s400/%E5%BE%80%E4%B8%8A%E5%8A%A02.jpg" style="cursor: pointer; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;發現最下面那條Do的pitch class的能量一直非常大。&lt;br /&gt;&lt;br /&gt;後來發現是因為第一個bin大約是10.7666Hz左右，然而第一個bin一定是所有bin頻率的因數，對照pitch frequency table，10.7666Hz最接近的是C0(DO)，因此它的能量因此會最大。&lt;br /&gt;&lt;br /&gt;忽略了第一根bin的結果:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sx_jI0RI9kI/AAAAAAAAAT0/-HamxoBTFHE/s1600-h/%E5%BE%80%E4%B8%8A%E5%8A%A0%E4%BD%86%E5%BF%BD%E7%95%A5%E7%AC%AC%E4%B8%80%E5%80%8Bbin2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5413295017731618370" src="http://1.bp.blogspot.com/_41yFCBHdPkc/Sx_jI0RI9kI/AAAAAAAAAT0/-HamxoBTFHE/s400/%E5%BE%80%E4%B8%8A%E5%8A%A0%E4%BD%86%E5%BF%BD%E7%95%A5%E7%AC%AC%E4%B8%80%E5%80%8Bbin2.jpg" style="cursor: pointer; display: block; height: 121px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;發現變成是往上數第六條的能量最大，對照音名是FA。這是因為第二根bin也是好多bin們的因數，第二根bin頻率大約是21.5332Hz，對照表最接近的是F0，因此得知。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;後來和小明學長討論發現了另一個問題，都是關於應該需要去取平均的地方。&lt;br /&gt;&lt;br /&gt;1. 冠廷學長做Chroma的方式，如果是採用每根bin就map到跟它頻率最接近的那個音之後加起來，那麼事實上他可能忽略了一個問題，低頻的部分兩根bin中間可能有好多的音在那個範圍，在高頻的部分可能在兩個音的範圍中間會有好多根bin，因此會有每個音所擁有的bin會不同數量的問題，我們實驗用white noise當作input，真的發現chroma的顏色並沒有分布的很均勻。所以應該要讓每個音除以它所擁有的bin的個數，取平均。&lt;br /&gt;&lt;br /&gt;2.  在我們新加的方法中，低頻的bin會有較多的partial，所以能量加到自己身上之後，應該也要除以partial的個數來取平均。雖然這樣當能量懸殊的時候還是會造成彼此相對的差異減少，不過總是比沒有做normalize來的正確一些。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091201]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;用BWV1007前四小節去跑，發現wav chroma錯誤了。&lt;br /&gt;1. 前兩個音SO(低)、RE的部分，推論是因為五度音的關係，f0相差1.5倍，因此倍頻重疊了，RE的部分能量被認為是 SO 的。&lt;br /&gt;2. 後面四個音也錯了，變成都是LA，推測是因為frame size不夠大，造成 fft 後頻率域的resolution不夠高。&lt;br /&gt;&lt;br /&gt;origin frame size : 2048&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUj97IeVlI/AAAAAAAAASo/OOOrHHuTTTQ/s1600/chroma+2048.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410270074107745874" src="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUj97IeVlI/AAAAAAAAASo/OOOrHHuTTTQ/s400/chroma+2048.png" style="cursor: pointer; display: block; height: 350px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;frame size : 4096&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUj5y58L2I/AAAAAAAAASg/0M8HOC5cGYI/s1600/chroma+4096.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410270003179827042" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUj5y58L2I/AAAAAAAAASg/0M8HOC5cGYI/s400/chroma+4096.png" style="cursor: pointer; display: block; height: 350px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;frame size : 8192&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUjS661elI/AAAAAAAAASQ/eh5hZtvs_AU/s1600/chroma+8192.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410269335316167250" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUjS661elI/AAAAAAAAASQ/eh5hZtvs_AU/s400/chroma+8192.png" style="cursor: pointer; display: block; height: 350px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;可以看出增加frame size以增加frequency的解析度，結果準確許多。&lt;br /&gt;不過第二個音 RE 的部分為什麼chroma顯示出來是 LA 的能量最強呢，是因為 RE 和 LA 是五度音嗎？&lt;br /&gt;但是觀察spectrum，發現440 Hz左右真的有一條能量強的partial，所以不只是 RE 和 LA 第一個重疊的倍頻880Hz所分配給 LA 的部分。&lt;br /&gt;&lt;div&gt;&lt;span style="color: #999999;"&gt;→ 440Hz是這裡的 RE(146.83Hz) 的三倍頻沒錯，之前誤以為是它的高八度 RE(293.66Hz) ，而它的三倍應該是880Hz，所以才會疑惑為什麼會有440Hz的強能量。&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: #999999;"&gt;(&lt;/span&gt;&lt;span style="color: #999999;"&gt;20091202&lt;/span&gt;&lt;span style="color: #999999;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(按圖可放大)&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUgTEzTUHI/AAAAAAAAAR0/No-_dn3lCAA/s1600/specturum.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410266039434039410" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUgTEzTUHI/AAAAAAAAAR0/No-_dn3lCAA/s400/specturum.png" style="cursor: pointer; display: block; height: 226px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;另外，SO 的能量一直很強，造成餘音的效果。雖然譜上看起來是單音的樂曲，但是實際上是多音。可能是因為樂器的特性，第三個partial的能量特別強。&lt;br /&gt;&lt;br /&gt;目前把頻率域的值map到chroma gram的方法是，準備一個10個八度音的frequency tabel，然後就去對和哪個pitch最接近，再map到chroma vector。&lt;br /&gt;這樣的方法，五度音的partial能量會分配給兩者頻率較高的那一個。ex. RE (293.66Hz)的第三個partial、LA(440Hz)的第二個partial，大約是880Hz，而880Hz對照frequency tabel是LA。&lt;br /&gt;但是學長也提到，如果採用傳統f0 detection的投票方法，那麼五度音的重疊partial能量會分配給兩者頻率較低的那一個音。&lt;br /&gt;&lt;br /&gt;學長建議，接下來有兩條路。&lt;br /&gt;第一條路，去解決五度音在chroma vector上表現的問題。&lt;br /&gt;另一條路就是略過五度音的問題，找個沒有五度音的片段，往下找DTW在對譜時所展現的特性，也就是找DTW在對錯譜前後的參數變化情況。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091128]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;把DTW 的matrix印出來。&lt;br /&gt;本來是要印成文字檔，但是實在不好觀察，所以就做了另一個可以輸出成HTML的版本，這樣可以用簡單的方式去讓印出來的tabel上色和排列。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUL-zJxZ3I/AAAAAAAAAQ4/2YVtTqSBNak/s1600/2009-12-01_202423.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410243700866508658" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUL-zJxZ3I/AAAAAAAAAQ4/2YVtTqSBNak/s320/2009-12-01_202423.png" style="cursor: pointer; display: block; height: 280px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;不過table真的很大，光是一分多鐘的dtw table的txt檔案，就可以達到450MB左右。&lt;br /&gt;以下是用BWV1007前四小節的結果。&lt;br /&gt;&lt;br /&gt;type 1 :&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUIOITjmiI/AAAAAAAAAQw/XZ8bTcGYOls/s1600/type1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410239566196218402" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUIOITjmiI/AAAAAAAAAQw/XZ8bTcGYOls/s320/type1.png" style="cursor: pointer; display: block; height: 141px; margin: 0px auto 10px; text-align: center; width: 171px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUDIJabOuI/AAAAAAAAAQc/bbDMoUEtwJc/s1600/DTW+table+type1+txt.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410233965856111330" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUDIJabOuI/AAAAAAAAAQc/bbDMoUEtwJc/s400/DTW+table+type1+txt.png" style="cursor: pointer; display: block; height: 193px; margin: 0px auto 10px; text-align: center; width: 319px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUMHV_yA2I/AAAAAAAAARA/hBulCXAlA9g/s1600/DTW+table+type1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410243847658799970" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxUMHV_yA2I/AAAAAAAAARA/hBulCXAlA9g/s320/DTW+table+type1.png" style="cursor: pointer; display: block; height: 246px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;type 2 :&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUMbgemzrI/AAAAAAAAARI/iTXBOLAaJVE/s1600/type2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410244194069827250" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUMbgemzrI/AAAAAAAAARI/iTXBOLAaJVE/s320/type2.png" style="cursor: pointer; display: block; height: 141px; margin: 0px auto 10px; text-align: center; width: 164px;" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUNH092fnI/AAAAAAAAARQ/FZZEpEtj0Os/s1600/DTW+table+type2+txt.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410244955483831922" src="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUNH092fnI/AAAAAAAAARQ/FZZEpEtj0Os/s320/DTW+table+type2+txt.png" style="cursor: pointer; display: block; height: 193px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUNPDjgMfI/AAAAAAAAARY/MyG0iOxP9qw/s1600/DTW+table+type2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410245079658934770" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SxUNPDjgMfI/AAAAAAAAARY/MyG0iOxP9qw/s320/DTW+table+type2.png" style="cursor: pointer; display: block; height: 246px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;粉紅色底的格子是代表dtw找出來的path。&lt;br /&gt;&lt;br /&gt;&lt;type1&gt;&lt;type1&gt;&lt;type2&gt;&lt;type1&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091124]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;標音檔的SOP(手稿)&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_41yFCBHdPkc/SxT_zm8i4vI/AAAAAAAAAQM/IT3emvIqkh0/s1600/memo+sop.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410230314471711474" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SxT_zm8i4vI/AAAAAAAAAQM/IT3emvIqkh0/s400/memo+sop.png" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 275px;" /&gt;&lt;/a&gt;&lt;br /&gt;工作畫面&lt;br /&gt;上方是cool edit，左邊是cue list(Desc欄寫pitch)，下方是catwalk，主要是拿來顯示譜。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUA2iCT65I/AAAAAAAAAQU/rZMAGSYDniE/s1600/2009-11-22_205737.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5410231464204954514" src="http://1.bp.blogspot.com/_41yFCBHdPkc/SxUA2iCT65I/AAAAAAAAAQU/rZMAGSYDniE/s400/2009-11-22_205737.jpg" style="cursor: pointer; display: block; height: 243px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091122]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;標好了巴哈無伴奏大提琴BWV 1007 Prelude，大約兩分五十秒，655個音，655個cue。&lt;br /&gt;每個cue我都給他一樣的長度(4096個sample)，因為要抓住那個音是哪個瞬間出現的有點難，所以後來決定去抓換音的瞬間，因為換音耳朵比較好辨認，所以我想起頭音的時間點就設cue的中點。&lt;br /&gt;&lt;br /&gt;小筆記：&lt;br /&gt;1.  20小節的地方音檔或譜似乎有錯，&lt;br /&gt;音聽起來是do# la mi fa so mi fa so&lt;br /&gt;譜是do# la do re mi do re mi&lt;br /&gt;觀察DTW的時候可以注意一下這地方。&lt;br /&gt;(應該是midi錯，因為去找過&lt;a href="http://www.youtube.com/watch?v=S6yuR8efotI"&gt;youtube上面的影片&lt;/a&gt;聽過跟wav是一樣的)&lt;br /&gt;2.  發現mi不知道為什麼波形amplitude都比較大&lt;br /&gt;3.  同一個音連續出現的話有點難聽出onset，所以是看波型來標。&lt;br /&gt;&lt;br /&gt;之後，用之前的java程式去跑跑看，在作DTW一直出現例外 java.lang.OutOfMemoryError: Java heap space，有試著逐步幫JVM加大他的記憶體，但是還是出現一樣的例外。&lt;br /&gt;所以我就想知道這樣的長度DTW到底需要多大的記憶體，就用學長之前的C#程式去跑，發現DTW大概吃掉1.5G左右的記憶體。可是給JVM這麼大的記憶體參數，會顯示無法建立的訊息。&lt;br /&gt;&lt;br /&gt;目前wav的frame size是沿用學長的2048 overlap 512，想改成4096 overlap 2048，這樣可以減少frame的數量。此外midi是用一個tick當作一個frame，所以frame的數量很大。因此兩者所構成的DTW matrix使用的空間是很大的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091112]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;An Efficient Multiscale Approach to Audio Synchronization&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_091112.pdf"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091023]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;讀cue的程式寫好了，用 java去改寫，因為想說之前的chroma部分也是用java來做。&lt;br /&gt;結果大概如下圖，測試的是原本語音的檔案。&lt;br /&gt;&lt;br /&gt;&lt;/type1&gt;&lt;/type2&gt;&lt;/type1&gt;&lt;/type1&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_41yFCBHdPkc/SuF0MojU8oI/AAAAAAAAAN0/3GQ9YaT7xPs/s1600-h/2009-10-23_171344.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5395721588959408770" src="http://2.bp.blogspot.com/_41yFCBHdPkc/SuF0MojU8oI/AAAAAAAAAN0/3GQ9YaT7xPs/s400/2009-10-23_171344.png" style="cursor: pointer; display: block; height: 164px; margin: 0px auto 10px; text-align: center; width: 231px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;因為我們的目的是要知道onset，所以對於cue來說，我們需要的就只是某個cue的起始時間。所以學長建議我，在幫音樂wav標onset的時候，cue的長度用很短就可以了。&lt;br /&gt;&lt;br /&gt;現在我先著手標記巴哈無伴奏BWV1007的onset，因為它是單一樂器，而且它的節奏不會很快，可能會比較容易。現在覺得有個問題就是...要抓住並判斷音出現的那瞬間真的有點難@@&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20091006]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;為了可以在wav上面標記出正確的onset作為比對資料，和小明學長去了吳老師實驗室詢問了一下，知道了可以用cool edit直接在wav檔裡面記錄cue list，方法很簡單，就是用滑鼠選取這個cue的範圍，然後按下F8就可以了。&lt;br /&gt;&lt;br /&gt;學姊也給了一隻他們之前寫的程式給我，是用VC6+MFC環境寫的關係，還有它的output有用到資料庫，我的電腦上執行不起來，所以想說自己來改寫一個。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090924]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;Polyphonic Audio Matching and Alignment for Music Retrieval&lt;br /&gt;&lt;a href="http://myweb.ncku.edu.tw/%7Ep76984398/upload/paper_ppt_090924.pdf"&gt;投影片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090924]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;學長的程式已經轉換到java完畢。&lt;br /&gt;以前的程式架構，是每個步驟都是分散手動進行。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sr0BRbc07TI/AAAAAAAAAMc/dnndOLDbU5E/s1600-h/2009-09-26_014319.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5385462128343051570" src="http://1.bp.blogspot.com/_41yFCBHdPkc/Sr0BRbc07TI/AAAAAAAAAMc/dnndOLDbU5E/s320/2009-09-26_014319.jpg" style="cursor: pointer; display: block; height: 187px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sr0AlXQEg0I/AAAAAAAAAMI/IhMpgy291TQ/s1600-h/2009-09-26_013909.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;然後我現在把它整合在一起。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_41yFCBHdPkc/Sr0AxDrlTWI/AAAAAAAAAMQ/ZYSJWIYdAF8/s1600-h/2009-09-26_013930.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5385461572206677346" src="http://1.bp.blogspot.com/_41yFCBHdPkc/Sr0AxDrlTWI/AAAAAAAAAMQ/ZYSJWIYdAF8/s320/2009-09-26_013930.jpg" style="cursor: pointer; display: block; height: 206px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;Improvement :&lt;br /&gt;1. 整合、連貫各個project的功能。&lt;br /&gt;2. 自行從GUI選擇讀取的檔案，不再受限於固定名稱。&lt;br /&gt;3. draw onset frames&lt;br /&gt;4. 可以使上下兩個scroll bar同步移動方便對照&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式畫面和流程 :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_41yFCBHdPkc/Sr0G7vQan0I/AAAAAAAAAMk/sZMQ3cnuB4M/s1600-h/demo.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5385468352772349762" src="http://4.bp.blogspot.com/_41yFCBHdPkc/Sr0G7vQan0I/AAAAAAAAAMk/sZMQ3cnuB4M/s320/demo.jpg" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 255px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090908]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;學長的MidiParser專案轉換到java已完成，得到的結果也和學長的一致。bug仍然是出在byte的問題，不過由於上次的經驗，這次解決就快多了。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這個專案的功用是：讀取midi file並分析，得到midi的chroma，也輸入了上個步驟得到的wav chroma，將兩個chroma做DTW，最後輸出onset的資料。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另外發現學長midi的delta-time(variable-length quantity)算法好像有些錯誤。這部分還需要find out。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #999999;"&gt;→ 學長沒有錯，是我誤解code的意思。    (&lt;/span&gt;&lt;span style="color: #999999;"&gt;20090909&lt;/span&gt;&lt;span style="color: #999999;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #999999;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090831]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;首先確定JAVA和C的input stream對於wav值都是使用同樣排列方法。&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5376060617471432402" src="http://1.bp.blogspot.com/_41yFCBHdPkc/SpuapeNaFtI/AAAAAAAAAKE/Su4qyjYGLrY/s320/05.png" style="cursor: pointer; display: block; height: 50px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;使用上次說的&lt;a href="http://www.thisisnotalabel.com/Reading-and-Writing-Wav-Files-in-Java.php"&gt;網站&lt;/a&gt;的方法去做會有問題，因為它這樣出來的值全部都會是正數，這樣不是我們想要的結果。所以我們要偵測第二個byte的highest bit是0還是1，如果是1的話，代表這是一個負數，所以我們在幫int的最高和第二高的byte補上1。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由此得到的int就是我們要的sample。和MATLAB的值對照過，兩者是相同的。&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5376061255070465090" src="http://3.bp.blogspot.com/_41yFCBHdPkc/SpubOlc3PEI/AAAAAAAAAKM/TQQoaSkSwts/s320/03.png" style="cursor: pointer; display: block; height: 234px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;另外這是如果我們每一個sample想用short去存的方法。(最初是用short)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #0000ee;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5376062438895498626" src="http://lh4.ggpht.com/_41yFCBHdPkc/SpukjQHrx4I/AAAAAAAAAK4/2klGW3_GnsQ/s800/04.png" style="cursor: pointer; display: block; height: 65px; margin: 0px auto 10px; text-align: center; width: 384px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: #0000ee;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #0000ee;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;比起最之前的寫法，是多了把在smaple裡的lower byte &amp;amp; 0xff 這個步驟，因為這樣可以先確保他會先轉換成是一個positive的int，再轉換成short，這樣值就不會錯。如果直接轉換的話，他可能會認為byte值是負的然後就轉換到一個不正確的short，之後higher byte再往左移8 bit之後合併數值會有問題。之後也確認了這個方法與MATLAB的值一致。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後使用的是網路上找的java FFT code，學長使用的FFT code的結果，虛部會差一個正負號，但是因為我們用的是能量值所以不會影響到chroma。不過我不確定我找的那個是不是open source，能否自由使用...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;能解決這個問題感謝DNA與小明學長的幫忙。接著我開始來改MIDI Parser的部分，找到了java有提供javax.sound.midi這個package，試看看能不能拿來在這個部分使用。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090824]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;把兩邊程式的FFT結果印出來，發現值真的不同，著手改寫冠廷學長使用的c# FFT sourse code改成JAVA，錯誤還是存在。後來小明學長建議用MATLAB裡的wavread還有fft function去做，把從MATLAB得到的wav還有fft值分別和C#、JAVA讀到的wav之後用MATLAB fft做的結果去比較。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;結果是發現JAVA的是在讀取wav檔的值就有錯了，每一個frame裡錯誤的個數、index都不一定，錯誤的element值和正確的值相差的都是256的倍數，目前測試結果最大可差別到256*8=2048。猜想可能是overflow之類的問題。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google到這個網址，&lt;a href="http://www.thisisnotalabel.com/Reading-and-Writing-Wav-Files-in-Java.php"&gt;Reading and Writing Wav Files in Java&lt;/a&gt;，它說因為JAVA不像C語言，沒有unsigned type的設計，都是two's Complement，所以使用java的File-IO得到的資料還要經過處理，他提供的解法是比如說2 bytes的short 就用4 bytes的int來代替，int用long來代替。這個可能就是我們的問題所在，會用此方法來試試看。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090818]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;與冠廷學長交接之後，開始著手改寫程式從C#轉到JAVA，這是為了將來可以使用在authoring tool上。目前改寫至可以運作的部分有：&lt;/div&gt;&lt;div&gt;1. Read wav file → FFT → Chroma Vector&lt;/div&gt;&lt;div&gt;2. Music Library&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;但是比對我的程式和學長的程式對同一個wav檔案所轉出來的chroma，發現能量最高(=1, because of normalization) 的地方在某一時間區段是不同的，後來覺得只比對能量=1的地方好像不是很好，所以以下是用圖片來呈現。發現c#的結果乾淨許多…&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;c#&lt;/div&gt;&lt;div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5376042110166987970" src="http://1.bp.blogspot.com/_41yFCBHdPkc/SpuJ0NILdMI/AAAAAAAAAJI/hwMIlUe4dIE/s320/01.jpg" style="cursor: pointer; float: left; height: 96px; margin: 0px 10px 10px 0px; width: 320px;" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;java&lt;/div&gt;&lt;div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5376042311193410658" src="http://4.bp.blogspot.com/_41yFCBHdPkc/SpuJ_6AnPGI/AAAAAAAAAJQ/U7Mlafs1VQY/s320/02.jpg" style="cursor: pointer; float: left; height: 96px; margin: 0px 10px 10px 0px; width: 320px;" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由於學長程式的FFT是使用c#的open source code，我目前java的版本也是先使用外面找的java code，所以推測可能是在FFT這步驟出現不同所以導致結果不一致。老師建議把先FFT的結果印出來作驗證。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #e8730a;"&gt;[20090714 by SCREAM Lab, NCKU, Taiwan. 位於 下午 6:08]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在MIREX2008裡面有一個比賽項目叫做Score Alignment, 網址如下:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MIREX2008 Score Alignment or Score Following&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;其實就是冠廷學長的論文其中的一部分. 冠廷用的是Chroma Feature, 其論文我們過一陣子再Post出來, 但是我們一貫的討論可以在下面看到:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;冠廷的Polyphonic Music Information Retrieval&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這個問題對我們很重要, 不過一般的Score Alignment做的要是能從頭Follow到尾, 也就是冠廷做的. 研究上當然是要如此完整, 但是假如以短時間內能用到我們要做的應用, 那麼是可以有一些妥協的. 比如說, 我們可以讓使用者把一段Wave框起來, 在讓它來對Target的譜子, 而且一次只要對一部分的譜就好, 例如四小節, 八小節, 長短就看我們的演算法的好壞.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這個串今天由我來起個頭, 接下來就由小聽來接續. 我建議可以將冠廷學長的方法先弄起來, 然後找其他人的論文來Implement, 久了後, 相信會越做越好, 也許有一天我們也可以去參加比賽.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另外就是Score Alignment會是Authoring tool的一部分.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-4405566840522509738?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/4405566840522509738/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=4405566840522509738' title='44 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4405566840522509738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/4405566840522509738'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2009/08/score-alignment-and-following.html' title='Score Alignment and Following - 小聽'/><author><name>小聽</name><uri>http://www.blogger.com/profile/07866116028953493812</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_41yFCBHdPkc/SxU_NZQ_l7I/AAAAAAAAAS0/YV4QEswsVmE/S220/icecream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-6YntrCMbkjk/TVzGXVTcyLI/AAAAAAAAAsM/EabSavjYUBM/s72-c/K281-Andante-4LowOctaves-L100-1-gbg-W0.png' height='72' width='72'/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-3328682056438626859</id><published>2010-12-30T02:34:00.003+08:00</published><updated>2010-12-30T03:19:00.720+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>Pitch/Partial Tracking的新方向 - 胤霖</title><content type='html'>&lt;span style="color: #cc0000;"&gt;-----------2010.12.30-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;簡單測試使用已知和未知的initial templates，單獨分析一個time frame。(frame size = 8192, initial number of templates = 4)&lt;br /&gt;&lt;br /&gt;W未知(random)：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/TRuF_u0jkDI/AAAAAAAAAMM/v8fHfSZIUkE/s1600/unknown.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" n4="true" src="http://3.bp.blogspot.com/_64K0X8Lr2as/TRuF_u0jkDI/AAAAAAAAAMM/v8fHfSZIUkE/s320/unknown.bmp" width="270" /&gt;&lt;/a&gt;&lt;/div&gt;W已知(由上而下分別設templates初始音高為 - G2, D3, B3, A3)：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/TRuGq2W-OvI/AAAAAAAAAMQ/57gRutwFeXk/s1600/known.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" n4="true" src="http://4.bp.blogspot.com/_64K0X8Lr2as/TRuGq2W-OvI/AAAAAAAAAMQ/57gRutwFeXk/s320/known.bmp" width="262" /&gt;&lt;/a&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: black;"&gt;如果W沒有給適當的資訊，training的結果就整個都很亂；反之，結果好很多。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.12.28-------------------&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;論文報告：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-family: &amp;quot;Bookman Old Style&amp;quot;; language: en-US; mso-ascii-font-family: &amp;quot;Bookman Old Style&amp;quot;; mso-bidi-font-family: +mj-cs; mso-color-index: 1; mso-fareast-font-family: 標楷體; mso-font-kerning: 12.0pt; text-shadow: auto;"&gt;&lt;span style="color: black;"&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/self.aspx/.Public/TR2004-104.pdf"&gt;Non-negative Matrix Factor Deconvolution; Extraction of Multiple Sound Sources from Monophonic Inputs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/view.aspx/.Public/20101228.pptx"&gt;ppt&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.12.23-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;接續上次的結果，加上限制條件的同時再多加一個random不受限的template：&lt;/span&gt;&lt;br /&gt;(&lt;span style="color: blue;"&gt;藍色&lt;/span&gt;-result of standard NMF；&lt;span style="color: red;"&gt;紅色&lt;/span&gt;-再加harmonicity &amp;amp; random tamplate)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/TRuBW7niuLI/AAAAAAAAAMI/tup-hgQOnfk/s1600/%25E9%2599%2590%25E5%2588%25B6%25E5%258A%25A0%25E5%25A4%259A.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" n4="true" src="http://3.bp.blogspot.com/_64K0X8Lr2as/TRuBW7niuLI/AAAAAAAAAMI/tup-hgQOnfk/s320/%25E9%2599%2590%25E5%2588%25B6%25E5%258A%25A0%25E5%25A4%259A.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.12.10-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;"但是基本partial energy分配沒多大變化，可以解釋一下嗎?"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;老師提到的這個問題，是不是指被抑制的partial們沒有影響到其他template?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;我的想法是這樣：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;在這次的例子中，每個templates裡都有一根很明顯的G2基頻(下圖紅色圈圈示)，但是加上限制後，這個能量被抑制了，結果全部集中到A3裡，所以最後A3中G2基頻的能量反而特別高(此外，也許連其他雜訊也都跑到這裡了)。&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/TQHWy7ICRkI/AAAAAAAAAL4/w26LiEqGr-A/s1600/2222_2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" n4="true" src="http://1.bp.blogspot.com/_64K0X8Lr2as/TQHWy7ICRkI/AAAAAAAAAL4/w26LiEqGr-A/s320/2222_2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;我用cooledit將原本的音檔分成兩半(剩下前八個音，前八個音和後八個音是重複的)，再把A3這個音直接刪掉，如下圖(譜)。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/TQHW7EGM3BI/AAAAAAAAAL8/je_eI470fXs/s1600/Suie+1+-+la.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="147" n4="true" src="http://4.bp.blogspot.com/_64K0X8Lr2as/TQHW7EGM3BI/AAAAAAAAAL8/je_eI470fXs/s320/Suie+1+-+la.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;以這一段音檔測試有加和沒加限制的結果。lamda設為1。initial template = 3。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/TQHXC0-tHfI/AAAAAAAAAMA/KF_ZGYRqA_A/s1600/non_la.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" n4="true" src="http://1.bp.blogspot.com/_64K0X8Lr2as/TQHXC0-tHfI/AAAAAAAAAMA/KF_ZGYRqA_A/s320/non_la.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;上圖左是沒加上限制，右邊有。&lt;br /&gt;結果和上次相似，圖右的B3也是雜訊能量增加。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.12.7--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;簡單的測試一下harmonicity的必要性:&lt;br /&gt;測試的曲目為巴哈無伴奏前16個音，使用4個templates，在第一次run完NMF演算法後，分別以這4個templates中的4組partial groups來作harmonicity的限制。&lt;br /&gt;限制的方法(很久以前報的)，在原本的cost function中加上一個計算雜訊能量的項，如下式:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/TP00xGzKaTI/AAAAAAAAALs/4O38DpXZ4ws/s1600/g4.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="62" ox="true" src="http://4.bp.blogspot.com/_64K0X8Lr2as/TP00xGzKaTI/AAAAAAAAALs/4O38DpXZ4ws/s320/g4.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;S用來取出W中，不為harmonics的能量。 &lt;/div&gt;其中的lamda我還沒有去計算出正確的值，以下的結果以1/8和2代入。&lt;br /&gt;lamda = 1/8&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/TP01QTHiAaI/AAAAAAAAALw/nj6aOYTnJeM/s1600/8888.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" ox="true" src="http://1.bp.blogspot.com/_64K0X8Lr2as/TP01QTHiAaI/AAAAAAAAALw/nj6aOYTnJeM/s320/8888.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;上圖左沒有限制，右邊有加上harmonic限制。&lt;br /&gt;加上限制後，不在各個template的harmonics上的能量變小，但都還在。&lt;br /&gt;&lt;br /&gt;lamda = 2 &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/TP01jlEu7bI/AAAAAAAAAL0/zT2dL712Bjs/s1600/2222.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" ox="true" src="http://2.bp.blogspot.com/_64K0X8Lr2as/TP01jlEu7bI/AAAAAAAAAL0/zT2dL712Bjs/s320/2222.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;上圖左沒有限制，右邊有加上harmonic限制。 &lt;br /&gt;lamda值增加後，除了A3這個template雜訊的能量反而增加，其他的不在harmonics上的能量都被消掉了。&lt;br /&gt;不過以上的結果，可能因為我使用的update rules而有錯誤，之後會確定一下公式的正確性並找出適當的lamda值。&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.11.30-------------------&lt;/span&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;論文報告：&lt;/span&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/self.aspx/.Public/Mnakano2010LVAICA09.pdf"&gt;Nonnegative Matrix Factorization with Markov-chained Bases for Modeling Time-varying patterns in Music Spectrograms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/self.aspx/.Public/20101130.pptx"&gt;ppt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.11.2--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告：&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/self.aspx/.Public/HennequinBadeauDavid%5E_DAFx10%5E_P9.pdf"&gt;TIME-DEPENDENT PARAMETRIC AND HARMONIC TEMPLATES IN NON-NEGATIVE MATRIX&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.office.live.com/self.aspx/.Public/TIME-DEPENDENT%20PARAMETRIC%20AND%20HARMONIC%20TEMPLATES%20IN%20NON-NEGATIVE%20MATRIX.pptx"&gt;ppt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.4.27--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;繼續上次的實驗，把相同的compoment加再一起。&lt;br /&gt;加完後W變成:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S9abvMaEUkI/AAAAAAAAALI/EFZc5LDKyck/s1600/w7.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5464726432947393090" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S9abvMaEUkI/AAAAAAAAALI/EFZc5LDKyck/s320/w7.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 210px;" /&gt;&lt;/a&gt;&lt;br /&gt;以此W去測試，結果如下:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S9ab-FO6J0I/AAAAAAAAALQ/hvlXhAdKxzc/s1600/afterw7.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5464726688719578946" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S9ab-FO6J0I/AAAAAAAAALQ/hvlXhAdKxzc/s320/afterw7.jpg" style="cursor: hand; display: block; height: 243px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;左邊為X矩陣，右邊為W矩陣。&lt;br /&gt;因為第4個W較雜亂，所以把她刪除看看結果(第7個取代第4個):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S9acTZa_KUI/AAAAAAAAALY/pQ9XmDU44dI/s1600/afterw6.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5464727054916200770" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S9acTZa_KUI/AAAAAAAAALY/pQ9XmDU44dI/s320/afterw6.jpg" style="cursor: hand; display: block; height: 208px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;結果和上一張圖的幾乎相同。&lt;br /&gt;分開過後的W很多值都變成0，在train後也不會再有值，也因為這樣partial的形狀都不太改變了。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.4.14--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;針對巴哈的小步舞曲第三節，原本會有在同一template觀察到兩個partial group的問題，測試結果如下。&lt;br /&gt;第三小節的譜:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S8WZFarrTEI/AAAAAAAAAKA/kEwi-ymxihU/s1600/mark_Minuet01333.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5459938441597504578" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S8WZFarrTEI/AAAAAAAAAKA/kEwi-ymxihU/s320/mark_Minuet01333.gif" style="cursor: hand; display: block; height: 120px; margin: 0px auto 10px; text-align: center; width: 161px;" /&gt;&lt;/a&gt;&lt;br /&gt;原本作出來混合的W和其對應的X :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S8WZQSFq3qI/AAAAAAAAAKI/ctO9IvB2qcg/s1600/1.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5459938628269170338" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S8WZQSFq3qI/AAAAAAAAAKI/ctO9IvB2qcg/s320/1.jpg" style="cursor: hand; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;如圖所示，第2、5、6個template都有混合的音。&lt;br /&gt;新的W長這樣:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S8WZh7ZbGyI/AAAAAAAAAKY/cC2JvcTZT7c/s1600/3.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5459938931415653154" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S8WZh7ZbGyI/AAAAAAAAAKY/cC2JvcTZT7c/s320/3.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 166px;" /&gt;&lt;/a&gt;&lt;br /&gt;再次train的結果(W和其對應的X):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S8WZtLp9sfI/AAAAAAAAAKg/O2gnMOAkD1Q/s1600/2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5459939124758557170" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S8WZtLp9sfI/AAAAAAAAAKg/O2gnMOAkD1Q/s320/2.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 306px;" /&gt;&lt;/a&gt;&lt;br /&gt;除了第4個還是很雜亂，其他的templates都保持很好的partial的形狀。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.3.19--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;上次的實驗結果不盡理想，所以做了以下的修改：&lt;br /&gt;1.Input較小的錄音片段，每次大約1到2小節。&lt;br /&gt;2.檢查用來做template的西班牙錄音，看看他的諧波結構是否影像NMF結果&lt;br /&gt;3.要保留較好的W時，一次保留較少的template。&lt;br /&gt;&lt;br /&gt;一開始我先試了一下上次的小步舞曲那個片段的第四小節(共4個音)：&lt;br /&gt;先檢查西班牙的錄音，我選了C4、D4、E4、F4這四個notes來看，下面是他的頻譜的放大圖：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M9nFJFEpI/AAAAAAAAAII/evKL4iVImfQ/s1600-h/tem_ori.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450267715652883090" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M9nFJFEpI/AAAAAAAAAII/evKL4iVImfQ/s320/tem_ori.jpg" style="cursor: hand; display: block; height: 158px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;用這四個音當作templates去算第四小節的結果：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6NAuBWJnjI/AAAAAAAAAJ4/XbSZxvjrVi0/s1600-h/4th_100_4tem_ori.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450271133427932722" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6NAuBWJnjI/AAAAAAAAAJ4/XbSZxvjrVi0/s320/4th_100_4tem_ori.jpg" style="cursor: hand; display: block; height: 285px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;因為部分在基頻前會有小小的peak(能量滿小的)，將其變小如下：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S6M-HFCq33I/AAAAAAAAAIY/kHaSyl1m6XI/s1600-h/tem_aft.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450268265381814130" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S6M-HFCq33I/AAAAAAAAAIY/kHaSyl1m6XI/s320/tem_aft.jpg" style="cursor: hand; display: block; height: 160px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;再用這四個修改過的音去算第四小節：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M-NxMiexI/AAAAAAAAAIg/AIQ2gMm06Go/s1600-h/4th_100_4tem_aft.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450268380313582354" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M-NxMiexI/AAAAAAAAAIg/AIQ2gMm06Go/s320/4th_100_4tem_aft.jpg" style="cursor: hand; display: block; height: 282px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;從圖上看來差不多，也許因為那些多出來的peak能量很小，影響不大；所以template算出來不好看應該不是這個原因導致。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S6M-rnUURBI/AAAAAAAAAIw/3wC79FneKxY/s1600-h/4th_ori.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450268893057926162" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S6M-rnUURBI/AAAAAAAAAIw/3wC79FneKxY/s320/4th_ori.jpg" style="cursor: hand; display: block; height: 58px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;接著對於第一次train出來的W，我保留了第一個較好的，再丟回去train一次：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S6M-Xz38zEI/AAAAAAAAAIo/6mf18LN2NaU/s1600-h/4th_100_4tem_save.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450268552831224898" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S6M-Xz38zEI/AAAAAAAAAIo/6mf18LN2NaU/s320/4th_100_4tem_save.jpg" style="cursor: hand; display: block; height: 281px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M-1r9yrqI/AAAAAAAAAI4/Of9NqdEtDBU/s1600-h/4th_save.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269066104319650" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M-1r9yrqI/AAAAAAAAAI4/Of9NqdEtDBU/s320/4th_save.jpg" style="cursor: hand; display: block; height: 58px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;看剛剛的圖有些許不同，第二的template變得比較明顯，不知道算不算是有變好？&lt;br /&gt;&lt;br /&gt;然後我算了一下問題最多的第三小節(共6個音)，這個小節一直都有兩個音在同一個template或是miss音的問題：&lt;br /&gt;以下是第一次train：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_B33NNcI/AAAAAAAAAJA/6bObUZTDFFw/s1600-h/3th_100_6tem.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269275456353730" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_B33NNcI/AAAAAAAAAJA/6bObUZTDFFw/s320/3th_100_6tem.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 254px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_hXRUkII/AAAAAAAAAJg/Frwl48_MWvE/s1600-h/3th_ori.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269816463331458" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_hXRUkII/AAAAAAAAAJg/Frwl48_MWvE/s320/3th_ori.jpg" style="cursor: hand; display: block; height: 58px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;然後再分別測試只保留1st和同時保留1st和3rd的template。&lt;br /&gt;以下是保留了第一個template後再丟回去的結果：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_KjjqnII/AAAAAAAAAJI/qnjgdgXC52Q/s1600-h/3th_100_6tem_save01.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269424624508034" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_KjjqnII/AAAAAAAAAJI/qnjgdgXC52Q/s320/3th_100_6tem_save01.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 254px;" /&gt;&lt;/a&gt;&lt;br /&gt;以下是保留第一個和第三個template後再丟回去的結果：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_SxY95AI/AAAAAAAAAJQ/SFFW01Jm-5M/s1600-h/3th_100_6tem_save0103.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269565776684034" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_SxY95AI/AAAAAAAAAJQ/SFFW01Jm-5M/s320/3th_100_6tem_save0103.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 256px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_aoJPsPI/AAAAAAAAAJY/g3DtIMBr4VM/s1600-h/3th_save.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269700733776114" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_aoJPsPI/AAAAAAAAAJY/g3DtIMBr4VM/s320/3th_save.jpg" style="cursor: hand; display: block; height: 58px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;兩個結果看起來都差不多。音都還是混在一起。&lt;br /&gt;&lt;br /&gt;最後，老師問過說如果Ｗ丟random的會怎樣，我分別對這兩小節丟random的W算：&lt;br /&gt;第三小節：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_ogE2xGI/AAAAAAAAAJo/gKENECJpZBo/s1600-h/3th_100_6tem_ram.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450269939086050402" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S6M_ogE2xGI/AAAAAAAAAJo/gKENECJpZBo/s320/3th_100_6tem_ram.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 258px;" /&gt;&lt;/a&gt;&lt;br /&gt;第四小節：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_wZ8MHPI/AAAAAAAAAJw/klcBmOH_7YM/s1600-h/4th_100_4tem_ram.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5450270074878041330" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S6M_wZ8MHPI/AAAAAAAAAJw/klcBmOH_7YM/s320/4th_100_4tem_ram.jpg" style="cursor: hand; display: block; height: 266px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;得到丟random也是可以算出結果，而且算出來X的位置還滿準的，不過W沒那麼明顯，第四小節比較好一點，第三小節就看不太出頻率了。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.3.10--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;為了要改善NMF這個演算法，使它在pitch detection上有更好的辨識度，試著找出、修改他的cost function，主要是希望可以從train的過程中找到好的templates(W矩陣)。現在定義一個有明顯諧波形狀的template是好的，所以在修正時也是讓W可以update成這個樣子最好。然後決定train出來的W哪些是要的哪些是不要的。&lt;br /&gt;要保證選擇好的templates是有用，所以我在之前作過的曲子中把好的W取出來再丟回去作一次，看看結果如何。&lt;br /&gt;&lt;br /&gt;以下是我以之前作過的Bach - Minuet01的錄音片段作的測試：&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z3PbVUTEI/AAAAAAAAAHA/BJNT3Nl75fg/s1600-h/mark_Minuet01.GIF"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446671906270104642" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z3PbVUTEI/AAAAAAAAAHA/BJNT3Nl75fg/s320/mark_Minuet01.GIF" style="cursor: hand; display: block; height: 92px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;(共13個pitch)&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z3hDDpOdI/AAAAAAAAAHI/62c365SGF3w/s1600-h/orig.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446672208991173074" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z3hDDpOdI/AAAAAAAAAHI/62c365SGF3w/s320/orig.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 110px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S5Z3tcS2wVI/AAAAAAAAAHQ/MKEQ2Iq239M/s1600-h/o1.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446672421924290898" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S5Z3tcS2wVI/AAAAAAAAAHQ/MKEQ2Iq239M/s320/o1.bmp" style="cursor: hand; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;上面是第一次跑NMF後的結果(圖都有經過放大)。&lt;br /&gt;初始的templates：C4、D4、…A5、B5 (14個)&lt;br /&gt;按照定義選擇諧波形狀較明顯的templates出來，這邊我是選取第1、2、4、5、6、7、9、10、11、12個template當作好的(從W的圖上可以看到這些都是諧波較明顯的)，再回去測試一次。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S5Z33shm49I/AAAAAAAAAHY/Le4m8LDOMSw/s1600-h/after.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446672598079824850" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S5Z33shm49I/AAAAAAAAAHY/Le4m8LDOMSw/s320/after.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 113px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S5Z3_h0cPiI/AAAAAAAAAHg/n5bvxka9_60/s1600-h/a2.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446672732644982306" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S5Z3_h0cPiI/AAAAAAAAAHg/n5bvxka9_60/s320/a2.bmp" style="cursor: hand; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;上面是第二次測試的結果。&lt;br /&gt;templates：剛剛取的10個再加上E4、C5、A5、B5。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z4InPXRhI/AAAAAAAAAHo/a2Gk4AsomUk/s1600-h/then.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446672888718902802" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z4InPXRhI/AAAAAAAAAHo/a2Gk4AsomUk/s320/then.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 113px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/S5Z4QJ5ozWI/AAAAAAAAAHw/onM3xk6fXck/s1600-h/t3.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446673018282102114" src="http://1.bp.blogspot.com/_64K0X8Lr2as/S5Z4QJ5ozWI/AAAAAAAAAHw/onM3xk6fXck/s320/t3.bmp" style="cursor: hand; display: block; height: 122px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;上面是第三次測試的結果。&lt;br /&gt;templates：第一次取的10個再加上E4、C5、A3、B4。&lt;br /&gt;&lt;br /&gt;有打X記號的templates是看起來不好(我認為)的W，從第二和第三次的結果中看到train完結果沒有變不好，但似乎也沒有變更好，miss的pitch還是沒有被找到，而兩次後來加的templates經過training後幾乎一樣。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2010.1.29--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;因為之前拼湊出來的巴哈小步舞曲，在以同一種音色的template情況下，仍然無法每個音都正確找出，推測是出錯的note音量太小導致，所以現在嘗試找強弱變化較大的歌曲來作看看。&lt;br /&gt;&lt;br /&gt;測試曲目：Debussy／clair de lune → &lt;span style="color: #3366ff;"&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/clair%5E_de%5E_lune%5E_P.wav"&gt;音檔&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;選取其中彈奏有漸強的一個片段：&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S5Z5DA2fbZI/AAAAAAAAAH4/Z-SLmlR2vAI/s1600-h/mark.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446673892026314130" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S5Z5DA2fbZI/AAAAAAAAAH4/Z-SLmlR2vAI/s320/mark.jpg" style="cursor: hand; display: block; height: 108px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt; 共51個音符，19個不同的notes。 &lt;span style="color: #666666;"&gt;(修正標錯的音高, 2010/3/10)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;測試結果：&lt;br /&gt;Template：C4、C4#、D4……B5，共24個。 &lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z6G_qS73I/AAAAAAAAAIA/OFJzyGH65AI/s1600-h/24_1600_all.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446675059937832818" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S5Z6G_qS73I/AAAAAAAAAIA/OFJzyGH65AI/s320/24_1600_all.bmp" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 246px;" /&gt;&lt;/a&gt;上圖是X的結果。紅色圈圈指的是多出的peak。 &lt;span style="color: #666666;"&gt;(修正上圖第2個X的錯誤, 2010/3/10)&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S2HVLOIGORI/AAAAAAAAAGY/D8Csvwvczhk/s1600-h/mark24_1600_all.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431857014332864786" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S2HVLOIGORI/AAAAAAAAAGY/D8Csvwvczhk/s320/mark24_1600_all.bmp" style="cursor: hand; display: block; height: 108px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt; 我把有找對的音符標記起來，橘色圈起的是對照有符合的音符。 &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S2HVVo-OVbI/AAAAAAAAAGg/peyHj_Yf0Nc/s1600-h/24_1600_all_ppt.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431857193337902514" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S2HVVo-OVbI/AAAAAAAAAGg/peyHj_Yf0Nc/s320/24_1600_all_ppt.bmp" style="cursor: hand; display: block; height: 221px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;圈圈是對的，三角形是有少peak的。雖然有的template有update出某個頻率，但是對照其對應的X和譜上的位置都對不太起來，就當成是沒找到。&lt;br /&gt;在update完的template中，miss了C3#、B3、C4、F4、E5、B5。&lt;br /&gt;&lt;br /&gt;從上面的結果來看，前半部音量較小的部分，滿多都有被找出來的，可能是這段的音量前半部都是比較小聲而後半部都是比較大聲的關係。而在後半部像是C5#、E5、G5#、B5這幾個相對比較小聲的音(我自己聽起來)，有些是被miss掉有些是位置對不太起來。&lt;br /&gt;所以針對後半部，再把曲子分成兩半，對後半部這段旋律作測試。(後半有12個不同的音)&lt;br /&gt;&lt;br /&gt;測試結果：&lt;br /&gt;Template：C4、C4#、D4……B4、C5，共13個。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/S2HVo6YR9vI/AAAAAAAAAGo/fjWNpGCSEUs/s1600-h/13_400_right.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431857524428109554" src="http://4.bp.blogspot.com/_64K0X8Lr2as/S2HVo6YR9vI/AAAAAAAAAGo/fjWNpGCSEUs/s320/13_400_right.bmp" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 115px;" /&gt;&lt;/a&gt; 上圖為X的結果，紅色圈圈是缺少一個peak的地方。 &lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/S2HVzZ4hbyI/AAAAAAAAAGw/XVSCI0VHwCk/s1600-h/mark13_400_right.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431857704683532066" src="http://2.bp.blogspot.com/_64K0X8Lr2as/S2HVzZ4hbyI/AAAAAAAAAGw/XVSCI0VHwCk/s320/mark13_400_right.jpg" style="cursor: hand; display: block; height: 205px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;橘色圈起處是對照後符合的音符。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/S2HV_sbd0OI/AAAAAAAAAG4/h_nvSoVze7o/s1600-h/13_400_right_ppt.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431857915820364002" src="http://3.bp.blogspot.com/_64K0X8Lr2as/S2HV_sbd0OI/AAAAAAAAAG4/h_nvSoVze7o/s320/13_400_right_ppt.bmp" style="cursor: hand; display: block; height: 116px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt; 本來以為音樂片段短一點效果會比較好，但跟上一個比起來結果更奇怪了…，miss的音更多。也許是初始的W設得不好？&lt;br /&gt;&lt;br /&gt;上面的實驗我都是用Kawai RX2_k5的鋼琴錄音作為templates，應該要試試看用其他的鋼琴錄音。&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.12.31-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Kameoka2004ICA04.pdf"&gt;paper&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Extraction%20of%20Multiple%20Fundamental%20Frequencies%20from%20Polyphonic%20Music.ppt"&gt;ppt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.12.21-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;上次使用同一個樂器，卻還是出現錯誤的問題，DNA學長說可以多增加一個無關的template，看是否讓錯誤的資訊都收集到此template中。&lt;br /&gt;以下是測試的結果:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/Sy8SAitYG5I/AAAAAAAAAF4/2u-CyY0KXjk/s1600-h/no14.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417568677276425106" src="http://4.bp.blogspot.com/_64K0X8Lr2as/Sy8SAitYG5I/AAAAAAAAAF4/2u-CyY0KXjk/s320/no14.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 175px;" /&gt;&lt;/a&gt;&lt;br /&gt;第11和13個template是原本出錯的template，第14個是新增的。&lt;br /&gt;增加以後出錯的兩個在時間上的peak就變明顯，也可以從W矩陣中看出頻率大小。&lt;br /&gt;但是第13個template(E5)還是會有另外一個聲音的頻率出現(C4)。&lt;br /&gt;而C4和E5在演奏時是同時出現的。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/Sy8T4GuGAUI/AAAAAAAAAGA/rE4OH5RrKck/s1600-h/01.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5417570731347542338" src="http://4.bp.blogspot.com/_64K0X8Lr2as/Sy8T4GuGAUI/AAAAAAAAAGA/rE4OH5RrKck/s320/01.gif" style="cursor: hand; display: block; height: 92px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;不過除了出現C4這個問題，其他的音都有被正確的找出。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.12.16-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這次我用了兩種方法來測試template:&lt;br /&gt;1.使用已有的鋼琴錄音拼成曲子來當作測試的音檔。&lt;br /&gt;2.用相同的template測不同的音樂。&lt;br /&gt;&lt;br /&gt;以下是結果:&lt;br /&gt;1.使用已有的鋼琴錄音拼成曲子來當作測試的音檔。曲子選自Bach Minuet NO.1的片段；鋼琴錄音為Kawai RX2 k5。&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SyirhbkU8HI/AAAAAAAAAEo/HO5fuV60uh4/s1600-h/minuet01_kawai.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415767142737178738" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SyirhbkU8HI/AAAAAAAAAEo/HO5fuV60uh4/s320/minuet01_kawai.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 272px;" /&gt;&lt;/a&gt;&lt;br /&gt;左邊是x矩陣，右邊是W矩陣，後面標示的數字是他的頻率和對應的note，"問號"是不能明顯看出其頻率是多少。&lt;br /&gt;感覺做完的結果並沒有比較好，反而有更多component放了兩個音的情形，觀察了拼湊的片段的頻譜，在音跟音之間的能量很大，可能是因為我在連接時沒有接好。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/SyisURNVkII/AAAAAAAAAEw/fb_dWiuxDUM/s1600-h/matlab_Kawai.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415768016129724546" src="http://1.bp.blogspot.com/_64K0X8Lr2as/SyisURNVkII/AAAAAAAAAEw/fb_dWiuxDUM/s320/matlab_Kawai.jpg" style="cursor: hand; display: block; height: 110px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;所以我把能量大的部份去掉再試一次，得到的結果:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SyisoNm122I/AAAAAAAAAE4/euH-AxjROHE/s1600-h/matlab_kawai_2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415768358760340322" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SyisoNm122I/AAAAAAAAAE4/euH-AxjROHE/s320/matlab_kawai_2.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 147px;" /&gt;&lt;/a&gt;&lt;br /&gt;只顯示x矩陣的圖和頻率。&lt;br /&gt;除了miss掉C5和E5以外，其他都是正確的。而miss的C5和E5應該就是打問號的那兩個component。&lt;br /&gt;&lt;br /&gt;2.用同一份template去測Bach Minuet NO.1的另外一個片段。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/SyivcDOcRwI/AAAAAAAAAFA/ngIjhQju-hE/s1600-h/P2_2_mark.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415771448350099202" src="http://3.bp.blogspot.com/_64K0X8Lr2as/SyivcDOcRwI/AAAAAAAAAFA/ngIjhQju-hE/s320/P2_2_mark.gif" style="cursor: hand; display: block; height: 134px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/Syivl1ZpSsI/AAAAAAAAAFI/17kKY0mOLpc/s1600-h/P2_2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415771616437684930" src="http://3.bp.blogspot.com/_64K0X8Lr2as/Syivl1ZpSsI/AAAAAAAAAFI/17kKY0mOLpc/s320/P2_2.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 173px;" /&gt;&lt;/a&gt;&lt;br /&gt;圈起來的部分是不該出現peak卻出現peak的位置。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/SyixVzbj-3I/AAAAAAAAAFQ/zxTtLEYNDX4/s1600-h/table_P2_2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415773540054203250" src="http://1.bp.blogspot.com/_64K0X8Lr2as/SyixVzbj-3I/AAAAAAAAAFQ/zxTtLEYNDX4/s320/table_P2_2.jpg" style="cursor: hand; display: block; height: 114px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;打三角形的component是這兩個音在不該有peak的時候出現peak，打X的是看不出頻率的，塗紫色的兩個component是這兩個音被update成相同的音，他們在頻率上有一點點偏差，但是時間上出現的peak位置差不多。&lt;br /&gt;&lt;br /&gt;另外，針對上次的實驗，有兩個音放在同一component的問題，我提高他update的次數看有沒有改善，結果是沒有，還是一樣有這個情形。改將原本的音檔切成兩半，分別來測。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/Syi09ceiqTI/AAAAAAAAAFY/VluI2Beg2hU/s1600-h/mark_Minuet01.GIF"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415777519622334770" src="http://2.bp.blogspot.com/_64K0X8Lr2as/Syi09ceiqTI/AAAAAAAAAFY/VluI2Beg2hU/s320/mark_Minuet01.GIF" style="cursor: hand; display: block; height: 92px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;前半是到第二小節的第2個音，後半是第二小節第2個音到最後。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/Syi2X40Pf7I/AAAAAAAAAFg/FnXySblwT9g/s1600-h/P1_12.JPG"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/Syi6JyJHFsI/AAAAAAAAAFw/9kAiwvPoE1M/s1600-h/P1_12.JPG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415783229154596546" src="http://1.bp.blogspot.com/_64K0X8Lr2as/Syi6JyJHFsI/AAAAAAAAAFw/9kAiwvPoE1M/s320/P1_12.JPG" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 312px;" /&gt;&lt;/a&gt;&lt;br /&gt;左半邊是前半部的X矩陣的圖，右半邊是後半部的X矩陣的圖。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/Syi2qiR8_fI/AAAAAAAAAFo/sxLIcCuN5PA/s1600-h/table_P1_12.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415779393785888242" src="http://1.bp.blogspot.com/_64K0X8Lr2as/Syi2qiR8_fI/AAAAAAAAAFo/sxLIcCuN5PA/s320/table_P1_12.jpg" style="cursor: hand; display: block; height: 236px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;上圖是前半部，下圖是後半部。&lt;br /&gt;可以看到沒有兩個音放到同一component的情況了。&lt;br /&gt;而塗紫色和藍色的區塊，是指這兩個component被分成相同的note，他們頻率有點不同，但是在時間上的位置差不多。除了這個問題和有些音看不出頻率以外(後半部miss掉D5)，其他都分得很正確。&lt;br /&gt;&lt;br /&gt;問題:&lt;br /&gt;上次報的paper提到，如果template的個數比受測試音檔的音多的話，多出來的template和其對應的x矩陣的值都會很小，稱為non-note component，但是我測試出來的結果沒有這個現象，如上面的測試，template是13個，受測試的音為8和11個，多出來的component雖看不出頻率是多少，但是和x矩陣的數值都還是很大。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.12.4--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;之前老師提到說，template可以有兩種做法，一種是直接將一首曲子的音切下來當template，也就是鋼琴的音色會相同(如果曲子鋼琴演奏的話)；另一種就是使用不同音色的錄音當作template，看看是不是會影響結果。&lt;br /&gt;目前我做的實驗，曲子和template都是先以鋼琴音樂來測試，template是從西班牙的鋼琴錄音拿來放的，一次放一個八度或是放曲子彈奏音的範圍，可以有很多種放的方法，實驗的目的是希望定義出最好的template，找出哪些音可以由哪些template train出來，對各種曲子的pitch detection有好的幫助。&lt;br /&gt;&lt;br /&gt;以下是目前簡單的測試結果&lt;br /&gt;曲子的片段來自: Bach Minuet No.1 on Victor piano by Sony PCM-D1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/SxjGD4OdHtI/AAAAAAAAADw/0r8v8IOL9rM/s1600-h/mark_Minuet01.GIF"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411292722220572370" src="http://3.bp.blogspot.com/_64K0X8Lr2as/SxjGD4OdHtI/AAAAAAAAADw/0r8v8IOL9rM/s320/mark_Minuet01.GIF" style="cursor: hand; display: block; height: 92px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;1. template: 未知的piano (C1, F#1, C2, F#2, …, F#6)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjGyGvxbqI/AAAAAAAAAD4/UkO6zOWSe-o/s1600-h/bach1_test.JPG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411293516392394402" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjGyGvxbqI/AAAAAAAAAD4/UkO6zOWSe-o/s320/bach1_test.JPG" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 291px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjHKfxkyuI/AAAAAAAAAEA/8NZaa4B39zI/s1600-h/table1.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411293935427701474" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjHKfxkyuI/AAAAAAAAAEA/8NZaa4B39zI/s320/table1.jpg" style="cursor: hand; display: block; height: 104px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;錯誤: 第7,10,11個column將兩個音放在同一個component，第3個column在未彈奏此音的位置出現peak。&lt;br /&gt;&lt;br /&gt;2. Kawai RX2_k5 (from G3~E5)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjI0m3zNgI/AAAAAAAAAEI/Ku_6B-qreU8/s1600-h/bach1_Kawai.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411295758398993922" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjI0m3zNgI/AAAAAAAAAEI/Ku_6B-qreU8/s320/bach1_Kawai.jpg" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 259px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/SxjKVHWfu8I/AAAAAAAAAEQ/qXkZzZnlefg/s1600-h/table2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411297416385117122" src="http://2.bp.blogspot.com/_64K0X8Lr2as/SxjKVHWfu8I/AAAAAAAAAEQ/qXkZzZnlefg/s320/table2.jpg" style="cursor: hand; display: block; height: 105px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;錯誤: 第1個column將兩個音放在同一個component，第6個column在未彈奏此音的位置出現peak。&lt;br /&gt;&lt;br /&gt;3. Kawai RX2_k5 (from C4~B4)&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjK5p7Px-I/AAAAAAAAAEY/SUdLUvvlGAE/s1600-h/bach1_kawai_OCT.JPG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411298044141357026" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjK5p7Px-I/AAAAAAAAAEY/SUdLUvvlGAE/s320/bach1_kawai_OCT.JPG" style="cursor: hand; display: block; height: 206px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjLKFQ15hI/AAAAAAAAAEg/131Mikv9eK8/s1600-h/table3.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411298326357599762" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SxjLKFQ15hI/AAAAAAAAAEg/131Mikv9eK8/s320/table3.jpg" style="cursor: hand; display: block; height: 154px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;錯誤: miss G3 and A3&lt;br /&gt;另外，因為template的個數小於歌曲出現的音的個數，所以update完後，多個音會被分配到相同的component中。&lt;br /&gt;&lt;br /&gt;接下來就是把已經有的錄音拼出歌曲，再拿來用NMF測試看同音色的結果如何，也可以用不同音色的template測試看看。另外我想可以拿同一個template對不同的曲子測，也許比較可以看出各個template update的效果。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.11.28-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;討論過後，現在W放的內容很重要。&lt;br /&gt;矩陣再update時，我們無法控制他會update出怎樣的結果，若note在一開始就被計算錯了，後面再出現這個note時很可能繼續錯下去，就會找不到。還有八度音甚至不是八度音也可能會被分到同一個component的問題。所以先要分析出來哪些template是好的要用，哪些是不好的就不要用。&lt;br /&gt;&lt;br /&gt;接下來工作就是用曲子下去測試看看，找出合適的template出來。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.11.25-------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;NMD 的 implement：&lt;br /&gt;　　再簡單說明一下NMD的algorithm，給一個聲音的訊號存進矩陣Y，NMD的目的就是尋找出兩個矩陣W和X，使得Y≈W∙X。其中，W∙X重建的Y’與Y越相近越好。W放的是basis function(harmonic templates)，X放可最佳重建Y的係數。此三矩陣都必須是非負矩陣。&lt;br /&gt;　　在這次的實作，使用的樂器是鋼琴，W放12個不同的鋼琴音符作為templates，Input data Y也是由這12個音檔作組合，X則是先放一些正整數做測試。&lt;br /&gt;&lt;br /&gt;實驗：&lt;br /&gt;1. 輸入為單音&lt;br /&gt;上圖和下圖分別為原始的y和reconstruct的y，重建的y與原本的y每一個bin的頻率位置相當接近。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/Swwjoa24iVI/AAAAAAAAACw/x19vxLYUvP4/s1600/60yy.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407736429876382034" src="http://4.bp.blogspot.com/_64K0X8Lr2as/Swwjoa24iVI/AAAAAAAAACw/x19vxLYUvP4/s320/60yy.bmp" style="cursor: hand; display: block; height: 231px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;下圖的每一條線表示x矩陣中的每一列。圖中，較大的row的值(&lt;strong&gt;黑色&lt;/strong&gt;的data)，正好是輸入的音對應的row的值。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/Swwj5PSst6I/AAAAAAAAAC4/AObhZZLLaNI/s1600/60x.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407736718829598626" src="http://3.bp.blogspot.com/_64K0X8Lr2as/Swwj5PSst6I/AAAAAAAAAC4/AObhZZLLaNI/s320/60x.bmp" style="cursor: hand; display: block; height: 172px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;下圖為與上述較大的row在w矩陣中相對應的column值，得到f0與輸入之音檔相同。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/Swwj_3RrEcI/AAAAAAAAADA/N7i-bByKip8/s1600/60w.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407736832641929666" src="http://1.bp.blogspot.com/_64K0X8Lr2as/Swwj_3RrEcI/AAAAAAAAADA/N7i-bByKip8/s320/60w.bmp" style="cursor: hand; display: block; height: 146px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;2. 混合兩個不同的聲音輸入(相當於同時彈奏)&lt;br /&gt;reconstruct y與y的頻率位置大致上是接近的。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_64K0X8Lr2as/SwwkKpPa1PI/AAAAAAAAADI/Ai8ABMmTjJY/s1600/mixyy.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407737017852941554" src="http://3.bp.blogspot.com/_64K0X8Lr2as/SwwkKpPa1PI/AAAAAAAAADI/Ai8ABMmTjJY/s320/mixyy.bmp" style="cursor: hand; display: block; height: 270px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;但是從x矩陣(下)看，擁有較大值的row對應的音並不是輸入的兩個音。應該是因為兩個音同時發生，不夠明顯，NMD無法辨識出來。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_64K0X8Lr2as/SwwkQ564XtI/AAAAAAAAADQ/eYtSMjLm73w/s1600/mixwx.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407737125409414866" src="http://2.bp.blogspot.com/_64K0X8Lr2as/SwwkQ564XtI/AAAAAAAAADQ/eYtSMjLm73w/s320/mixwx.bmp" style="cursor: hand; display: block; height: 261px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;3. 將兩個不同音高的音相間排列當作輸入&lt;br /&gt;原始的y與 reconstruct y的 頻率位置幾乎相同。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/SwwkYW4pfsI/AAAAAAAAADY/P30xgnFmMcE/s1600/72_84yy.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407737253443763906" src="http://1.bp.blogspot.com/_64K0X8Lr2as/SwwkYW4pfsI/AAAAAAAAADY/P30xgnFmMcE/s320/72_84yy.bmp" style="cursor: hand; display: block; height: 260px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;在x矩陣中，與混合的兩個音相對應的row值大小(&lt;span style="color: #33ccff;"&gt;&lt;strong&gt;淡藍色&lt;/strong&gt;&lt;/span&gt;和&lt;span style="color: #006600;"&gt;&lt;strong&gt;綠色&lt;/strong&gt;&lt;/span&gt;的data)，也較其他的大一些。此外可以看到，上方的圖為混合音檔的spectrum，x矩陣的row可以表現原始音檔時間軸上的頻率變化。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_64K0X8Lr2as/SwwkjKc-ayI/AAAAAAAAADg/_dH7iz8tlKo/s1600/72_84x.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407737439085030178" src="http://1.bp.blogspot.com/_64K0X8Lr2as/SwwkjKc-ayI/AAAAAAAAADg/_dH7iz8tlKo/s320/72_84x.bmp" style="cursor: hand; display: block; height: 201px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;w矩陣計算出來的f0，也與輸入音檔相同。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_64K0X8Lr2as/SwwksNJJMlI/AAAAAAAAADo/DpOFpkBkthg/s1600/72_84w.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5407737594425979474" src="http://4.bp.blogspot.com/_64K0X8Lr2as/SwwksNJJMlI/AAAAAAAAADo/DpOFpkBkthg/s320/72_84w.bmp" style="cursor: hand; display: block; height: 138px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;以上呈現的結果都是讓x矩陣的每一個row放相同值，結果還是可以找到正確的f0。另外測試x矩陣在錯誤的音對應的row上放較大的數，結果也是可以找到正確的f0。&lt;br /&gt;&lt;br /&gt;遇到的問題：&lt;br /&gt;1. 照理說隨著update的次數越多次，y和reconstruct y之間的差距應該越來越小，但是目前cost function算出來的值卻不會慢慢收歛，而是有時變大有時變小。&lt;br /&gt;2. x矩陣中，正確的音對應的row應有較大值，但隨著update的次數增加，錯誤的音對應的row也會慢慢變大。&lt;br /&gt;跟DNA學長討論了一下，以上兩個問題應該都是跟cost function有關，接下來會修正cost function看看是否會改善。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.10.15-------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;論文報告&lt;br /&gt;&lt;a href="http://books.nips.cc/papers/files/nips17/NIPS2004_0324.pdf"&gt;Real-Time Pitch Determination of One or More Voices by NonnegativeMatrix Factorization&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Real-Time%20Pitch%20Determination%20of%20One%20or%20More%20Voices.ppt"&gt;ppt&lt;/a&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.10.9--------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我根據ICA作了一個例子，這個例子我是先將兩個wav檔mix在一起後，再利用ICA找出他原本的音源。我用的是鋼琴音樂，mix成三筆資料input，output出兩個independent component。&lt;br /&gt;toolbox：FastICA ( &lt;a href="http://www.cis.hut.fi/projects/ica/fastica/"&gt;http://www.cis.hut.fi/projects/ica/fastica/&lt;/a&gt; )。&lt;br /&gt;&lt;br /&gt;做出來的結果：&lt;br /&gt;&lt;br /&gt;原本的音檔1&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Input1%5E_kiki.wav"&gt;music_Input1&lt;/a&gt;&lt;/div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5390431501367078370" src="http://4.bp.blogspot.com/_64K0X8Lr2as/Ss6o5AkPbeI/AAAAAAAAACA/oqaUfx2sJAs/s400/kiki.jpg" style="cursor: hand; display: block; height: 144px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;output的IC1&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Output1.wav"&gt;music_Output1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5390432237995132674" src="http://3.bp.blogspot.com/_64K0X8Lr2as/Ss6pj4uDhwI/AAAAAAAAACQ/DoWRFZaIWHU/s400/3s1.jpg" style="cursor: hand; display: block; height: 100px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;原本的音檔2&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Input2%5E_sky.wav"&gt;music_Input2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5390433115185019922" src="http://2.bp.blogspot.com/_64K0X8Lr2as/Ss6qW8ga_BI/AAAAAAAAACg/UO9zukBLuoU/s400/sky.jpg" style="cursor: hand; display: block; height: 144px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;output的IC2&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Output2.wav"&gt;music_Output2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5390433530390297250" src="http://1.bp.blogspot.com/_64K0X8Lr2as/Ss6qvHREuqI/AAAAAAAAACo/Y-04CaOZjcM/s400/3s2.jpg" style="cursor: hand; display: block; height: 93px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;&lt;br /&gt;學長說因為MATLAB會把聲音變大，所以一開始IC輸出成wav檔的時候，有些部分就被切掉，導致聽起來音樂像有雜音一樣很吵，因此把輸出的值全部除以一個整數讓他的能量變小來改善，最後得到的結果，除了比較大聲以外，聽起來幾乎是和原本的音檔一樣。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.9.23--------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;關於ICA(Independent Component Analysis)：&lt;br /&gt;&lt;br /&gt;　　ICA起源於”cocktail-party problem”。在宴會中有各種發出聲音的來源，藉由在不同位置收集到的聲音混合訊號，來統計分析出不同的音源，即是ICA的目的。ICA是解決blind source separation(BSS)的一種方法，因為聲音的來源以及其混合的方式都是未知的所以叫做blind，BSS可以復原這些音源訊號。&lt;br /&gt;　　舉例來說，假設一個房間裡有三個人同時說話(聲音的來源)，記為S1(t)、S2(t)、S3(t)，另外也有三個麥克風收集三個不同的混合訊號，記為X1(t)、X2(t)、X3(t)，因為每個麥克風收集到的混合訊號是音源的線性組合，便可列出以下的式子：&lt;br /&gt;&lt;br /&gt;X1(t) = a11 S1(t) +a12 S2(t) + a13 S3(t)&lt;br /&gt;X2(t) = a21 S1(t) +a22 S2(t) + a23 S3(t)&lt;br /&gt;X3(t) = a31 S1(t) +a32 S2(t) + a33 S3(t)&lt;br /&gt;&lt;br /&gt;其中a11、a12、a13、a21、a22、a23、a31、a32、a33 均為常數。&lt;br /&gt;也就是說，ICA的模型可以寫作：&lt;br /&gt;&lt;br /&gt;X = A S&lt;br /&gt;&lt;br /&gt;其中X = [ X1, X2, … , Xn ]T；S = [ S1, S2, … , Sm ]T；A為一個未知的n*m的矩陣。&lt;br /&gt;S即為independent components。&lt;br /&gt;&lt;br /&gt;ICA的假設和限制條件：&lt;br /&gt;1. 假設independent components為獨立的。&lt;br /&gt;　　這是ICA的原則，而隨機變數是否獨立，可由其機率密度(probability density)來定義，令P(y1, y2, … ,yn)為yi的joint probability density function(pdf)。&lt;br /&gt;&lt;br /&gt;yi are independent &amp;lt;=&amp;gt; P(y1, y2, … ,yn) = P(y1) P(y1) …P(yn)&lt;br /&gt;&lt;br /&gt;2. Independent components 必須是nongaussian分配。&lt;br /&gt;3. 為了簡化運算，假設未知的混合矩陣為方陣。&lt;br /&gt;　　即矩陣A為n*n矩陣。&lt;br /&gt;&lt;br /&gt;計算ICA的方法：&lt;br /&gt;1. Maximization of Nongaussianity&lt;br /&gt;2. Maximum Likelihood Estimation&lt;br /&gt;3. Minimization Mutual Information&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;References： &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;1. Aapo Hyvarinen, Independent Component Analysis, John Wiley &amp;amp; Sons. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.9.15--------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;about PCA : &lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Principle%20component%20analysis.ppt"&gt;ppt&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.8.18--------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;論文報告&lt;/span&gt;&lt;br /&gt;&lt;a href="http://lgm.fri.uni-lj.si/~matic/clanki/ICMC2000.pdf"&gt;Adaptive oscillator networks for partial trackingand piano music transcription&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-0089036216d8100d.skydrive.live.com/self.aspx/.Public/Adaptive%20oscillator%20networks%20for%20partial%20tracking.ppt"&gt;ppt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.8.16---------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我把我看的一些東西先放上來。&lt;br /&gt;先簡單的說明一下PCA(Principal component analysis)的架構。&lt;br /&gt;&lt;br /&gt;PCA主要的功能有：&lt;br /&gt;1. 能將資料簡化，將多個有相關的變數簡化成少數幾個互不相關的component。&lt;br /&gt;2. 找出的這些principal component為多個變數的線性組合，可以保有原來這些變數大部分的特性&lt;br /&gt;3. 就是對於較重要的變數給予較大個權重，較不重要的的變數給予較小的權重的一種方法。&lt;br /&gt;&lt;br /&gt;　　而PCA的分析方法，是利用資料變數Ｘ的covariance matrix，找出其eigenvalues λ1. λ2…λn和對應的eigenvectors w1. w2 …wn。最大的eigenvalue λ1對應的eigenvector w1乘上變數Ｘ即稱為first principal component；第二大的eigenvalue λ2 對應的eigenvector w2乘上隨機變數Ｘ稱為second principal component…以此類推。&lt;br /&gt;&lt;br /&gt;Principal component 解釋資料的能力：&lt;br /&gt;第i個principal component對原來的變數的解釋比例為&lt;br /&gt;&lt;br /&gt;　　　　　　　　　　λi / (λ1 +λ2 + …+λq +…+ λp )&lt;br /&gt;&lt;br /&gt;若取出q個principal component 來解釋原有的p個變數，其解釋比例為&lt;br /&gt;&lt;br /&gt;　　　　　　　　　　(λ1 ＋λ2 + …+λq ) / (λ1 +λ2 + …+λq +…+ λp )&lt;br /&gt;&lt;br /&gt;λ為eigenvalue。&lt;br /&gt;　　這樣一來，選取principal component的數目就很重要了。為了簡化資料量，而選取較少的principal component，原來變數的特性較無法保持，反之，選取較多的principal component雖可以保有較完整的變數特性，但即失去簡化的目的。&lt;br /&gt;選取的方法：&lt;br /&gt;&lt;br /&gt;　　　　　　　　　　λ1 &amp;gt;λ2 &amp;gt; …&amp;gt;λq &amp;gt;λq+1 =λq+2 = … =λp&lt;br /&gt;&lt;br /&gt;　　將eigenvalues由大到小排列，檢查若最後(p-q)個eigenvalues相等，表示最多可以取前q個principal components即可。&lt;br /&gt;&lt;br /&gt;PCA的幾何意義：&lt;br /&gt;一筆資料x的散佈圖如下：&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5370582763323647730" src="http://1.bp.blogspot.com/_64K0X8Lr2as/SogkkZS95vI/AAAAAAAAABw/Wu79BZUMgbs/s320/1.2.bmp" style="cursor: hand; display: block; height: 191px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;　　而first principal component 的權重就是要找出一個方向，使得這些資料點在此方向的投影變異數最大。如下圖中的U、V方向，所有的點在U方向的投影較在V方向的投影分散，可以較明顯看出各點的差異，也就是說U方向比V方向更可以解釋原來的資料變異。&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5370580162937640674" src="http://3.bp.blogspot.com/_64K0X8Lr2as/SogiNCGoVuI/AAAAAAAAABo/Zck-t_1ggFU/s320/1.1.bmp" style="cursor: hand; display: block; height: 191px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;References：&lt;br /&gt;1. Aapo Hyvarinen, Independent Component Analysis, John Wiley &amp;amp; Sons.&lt;br /&gt;2. 陳順宇(2005)，多變量分析(四版)，華泰書局。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;-----------2009.8.16---------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我把原來的串複製過來，之後的進度會更新在這裡。&lt;br /&gt;&lt;br /&gt;雖然文森學長的work做得很好, 但是我們的心中有一點點缺憾, 那就是學長的方法, 除了WGCDV是以前AL學長做的之外, 多半還是來自其他世界上其他的研究者的想法, 縱使為bff學長所開發的High Order HMM. 而過去我也曾經講過, 利用HMM來做tracking似乎不做第二人想, 但是我們除了HMM之外, 能有其他的創見嗎?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://screamlab-ncku-2008.blogspot.com/2008/11/20081118-centcent.html" target="_blank"&gt;文森的Pitch/Partial Tracking&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這一點, 我跟DNA學長聊過, 在過去, 我們利用Partial Group似乎得到一些效果, 不過一切的方法似乎比較像是在做影像處理或圖形識別的研究, 也就是試著找所謂的Feature(特徵), 然後用HMM的方式把他們在時間軸上連起來. 但是老實說, 我對影像類的特徵找法不是太有好感, Heuristic或Empirical是我一直用來形容這類方法的名詞, 我對Neural Network的感覺也是如此.&lt;br /&gt;&lt;br /&gt;這讓我希望回到用Data Decomposition的比較正統的數學方法來定義Features, 可是怎麼做呢? 我沒十足把握, 所以這一篇不好寫.&lt;br /&gt;&lt;br /&gt;一般的數學做法是找eigenvectors, 利用eigenvectors來當tracking(可以是HMM也可以不是)用的Features似乎可行, 不過在我們要對付的問題上, 一般的decomposition的方法卻可能會有問題, 要是可以, 那麼PCA(Principle Component Analysis)或ICA(Independent Component Analysis)的方法就可能派得上用場. 不過, 因為八度音, 甚至五度關係都會讓這類方法破功, 其原因我就不在這裡細講. 因此在這裡我們要定義的Feature Vectors一定有別於一般Linear Algebra中的eigenvectors, 而如何找到演算法來算這Feature Vectors以及如何避開八度與五度的問題是關鍵所在.&lt;br /&gt;&lt;br /&gt;所以胤要對付的問題的真正解法在哪裡需要我們一起努力尋找, 而這一類問題要做得好, 數學要有一點底子, 別忘了, Higher Order HMM Tracking是數學系出身的bff學長想出來的. 這讓IRCAM與SCREAM首次在MIREX裡勝出.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.music-ir.org/mirex/2008/index.php/Multiple_Fundamental_Frequency_Estimation_%26_Tracking_Results" target="_blank"&gt;MIREX2008 Multiple F0s estimation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我想, DNA與我會多花一點心思在這個問題上面, 請胤想法子趕快學好Matlab, 因為我不希望花太多時間自己寫matlab裡已經有的東西.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-3328682056438626859?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/3328682056438626859/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=3328682056438626859' title='28 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3328682056438626859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3328682056438626859'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2009/08/pitchpartial-tracking.html' title='Pitch/Partial Tracking的新方向 - 胤霖'/><author><name>胤霖</name><uri>http://www.blogger.com/profile/11223442467053357929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_64K0X8Lr2as/S8rY5kJ0UdI/AAAAAAAAAKo/3eqj7aneqp8/S220/starry_night.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_64K0X8Lr2as/TRuF_u0jkDI/AAAAAAAAAMM/v8fHfSZIUkE/s72-c/unknown.bmp' height='72' width='72'/><thr:total>28</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-8536868153652897621</id><published>2010-12-06T10:30:00.003+08:00</published><updated>2010-12-06T10:47:52.794+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='GPU'/><category scheme='http://www.blogger.com/atom/ns#' term='Multicore'/><title type='text'>Molecular Dynamic Simulation - 威佐、雙魚</title><content type='html'>--------- 2010 . 12. 06 ----------&lt;br /&gt;威佐 : &lt;br /&gt;&lt;br /&gt;目前已經將幾個常用的 Operations 取出，&lt;br /&gt;需要計算的力包括:&lt;br /&gt;Bonded(Bond length、Bond angle、Dihedral 三種力)和 Non-Bonded，&lt;br /&gt;&lt;br /&gt;我相信這是簡化過的形式，但對於我們做加速運算已經足夠，&lt;br /&gt;&lt;br /&gt;我現在使用的 Code 是學長給的那本書中的 Code (老師我沒有自己寫一個...)。&lt;br /&gt;但是因為要先嘗試做 translator，所以先暫用書中的 Code，等到評估期過後，&lt;br /&gt;我們可以自己改一份 MD 的 Code，&lt;br /&gt;&lt;br /&gt;另外，現在成熟的 MD 套件大概是 CHAMBER、AMBER、NAMD、GROMACS，&lt;br /&gt;可以下載使用，看一下別人如何做的，當然我們不需要做到像這些軟體這麼複雜。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;雙魚:&lt;br /&gt;&lt;br /&gt;著手將 MD 的 Code 改成 Multi-Thread，&lt;br /&gt;目前先規劃將 Non-Bonded Force 的部份給平行，&lt;br /&gt;如果修改完成，可以再加入 Bonded 的部分。&lt;br /&gt;&lt;br /&gt;下一步，就是將它寫成 SPCI 的 Component。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-8536868153652897621?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/8536868153652897621/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=8536868153652897621' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8536868153652897621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8536868153652897621'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/12/molecular-dynamic-simulation.html' title='Molecular Dynamic Simulation - 威佐、雙魚'/><author><name>雨人</name><uri>http://www.blogger.com/profile/09296459963163649481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-7396230436383623223</id><published>2010-12-05T16:22:00.009+08:00</published><updated>2010-12-05T18:28:30.601+08:00</updated><title type='text'>ROC - 雙魚</title><content type='html'>=== 2010.11.23 ===&lt;br /&gt;&lt;br /&gt;更改成matlab可連結的函式後&lt;br /&gt;把此份.c檔放到要執行的matlab資料夾內&lt;br /&gt;&lt;br /&gt;編譯.c檔的流程如下:&lt;br /&gt;(1)如果是第一次用mex,先設定編譯器&lt;br /&gt;執行 mex , 畫面會列出你電腦上現有的編譯器&lt;br /&gt;選擇好後電腦會記下,以後使用就不用執行這步驟&lt;br /&gt;&lt;br /&gt;(2)編譯.c檔 : 執行 mex xx.c (xx為檔名)&lt;br /&gt;如果順利編譯通過,同一個資料夾下會出現xx.dll檔案&lt;br /&gt;(3)接著就可以執行matlab code&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;比較原本matlab程式和呼叫 C library的matlab程式時間&lt;br /&gt;(1)原本matlab程式: &lt;br /&gt;for j = 1:1000  呼叫ROC計算函式  end&lt;br /&gt;時間為: 8分鐘&lt;br /&gt;&lt;br /&gt;(2)呼叫 C library的matlab程式:&lt;br /&gt;for j = 1:1000  呼叫 ROC_scream()  end&lt;br /&gt;時間為: 0.679 s &lt;br /&gt;&lt;br /&gt;呼叫 C library的matlab程式時間節省不少&lt;br /&gt;11/23把此程式交給龔老師,也跟他說明了使用方法&lt;br /&gt;ROC改寫到底為止&lt;br /&gt;&lt;br /&gt;=== 2010.11.19 ===&lt;br /&gt;&lt;br /&gt;把改寫後的C code包成matlab可用的library型式&lt;br /&gt;即可在matlab程式中直接使用改寫後的code&lt;br /&gt;參考連結: http://twntwn.info/blog/ajer001/archives/790&lt;br /&gt;按照連結中的方法來更動原本的C code&lt;br /&gt;&lt;br /&gt;matlab迴圈呼叫的寫法:&lt;br /&gt;for j = 1:1000   &lt;br /&gt;[auc_resp_sf fa_resp_sf hr_resp_sf] = ROC_scream(all4type, all4respyesno_sf);&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;說明: ROC_scream()為改寫後的C code&lt;br /&gt;all4type,all4respyesno_sf為輸入的數列&lt;br /&gt;[auc_resp_sf fa_resp_sf hr_resp_sf]為output&lt;br /&gt;fa_resp_sf和 hr_resp_sf是數列,auc_resp_sf為1*1的double&lt;br /&gt;&lt;br /&gt;更動步驟如下:&lt;br /&gt;(1)在code中開頭加入 #include "mex.h"&lt;br /&gt;(2)將程式主要部分放在 mexFunction()中&lt;br /&gt;mexFunction(int nlhs, mxArray *plhs[],&lt;br /&gt;            int nrhs, const mxArray *prhs[])&lt;br /&gt;mexFunction()為程式的進入點,prototype不可隨意更動&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)要把matlab輸入數列換成 C陣列&lt;br /&gt;value = mxGetPr(prhs[0]);&lt;br /&gt;sign  = mxGetPr(prhs[1]);&lt;br /&gt;bufsize = mxGetM(prhs[0]);&lt;br /&gt;n  = mxGetN(prhs[0]);&lt;br /&gt;&lt;br /&gt;說明:&lt;br /&gt;plhs: ROC_scream函式等號左邊參數本體&lt;br /&gt;prhs: ROC_scream函式等號右邊參數本體&lt;br /&gt;mxGetPr:取得矩陣之實數部分&lt;br /&gt;mxGetM:取得矩陣之第一維大小&lt;br /&gt;&lt;br /&gt;value會取得ROC_scream()中 all4type數列&lt;br /&gt;sign會取得ROC_scream()中all4respyesno_sf數列&lt;br /&gt;bufsize是all4type數列的row數量&lt;br /&gt;n是all4type數列的column數量&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)給予輸出陣列的記憶體空間&lt;br /&gt;plhs[0]= mxCreateDoubleMatrix(mA,nA,mxREAL);&lt;br /&gt;area = mxGetPr(plhs[0]);&lt;br /&gt;&lt;br /&gt;說明:&lt;br /&gt;利用mxCreateDoubleMatrix()建立空間&lt;br /&gt;mA是row數量 nA是column數&lt;br /&gt;plhs[0]代表為回傳的第一個參數,並取出取得矩陣之實數部分&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.11.08 ===&lt;br /&gt;&lt;br /&gt;跟龔老師拿了他們使用輸入輸出的數據&lt;br /&gt;以便於我們做更多數據的比對&lt;br /&gt;每次輸入的a和b數列各160筆,要跑1000次&lt;br /&gt;&lt;br /&gt;(1)和matlab code輸入相同的a,b數列 &lt;br /&gt;比對C code算出的面積數字是否和原本一樣&lt;br /&gt;比對的結果皆正確&lt;br /&gt;&lt;br /&gt;(2)比較兩份code時間 (迴圈1000次,每次160筆data)&lt;br /&gt;matlab迴圈寫法為:&lt;br /&gt;for j = 1:1000  呼叫ROC計算函式  end&lt;br /&gt;&lt;br /&gt;時間結果如下:&lt;br /&gt;Matlab時間為= 483.58 s ≈ 8分鐘&lt;br /&gt;C code時間為= 1.984 s ≈ 約兩秒&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.10.30 ===&lt;br /&gt;&lt;br /&gt;完成 ROC C code改寫&lt;br /&gt;&lt;br /&gt;ROC程式內容如下:&lt;br /&gt;&lt;br /&gt;(1)從輸入的數列中找出沒有重複的uv數列&lt;br /&gt;input: 數列a和b (random ,各200個數值)&lt;br /&gt;找出uv數列:為a和b中沒有重複的數值&lt;br /&gt;&lt;br /&gt;舉例說明:  &lt;br /&gt;a  = {-2,-1,0,3,8 }&lt;br /&gt;b  = {-3,1,3,0,8 }&lt;br /&gt;uv = {-3,-2,-1,0,1,3,8}&lt;br /&gt;&lt;br /&gt;(2)找 hit rate (hr) and false alarms (fa)&lt;br /&gt;fa: a中有幾個大於等於uv數值 / a數列總合&lt;br /&gt;hr: b中有幾個大於等於uv數值 / b數列總合&lt;br /&gt;uv中每個數值都要檢查一次&lt;br /&gt;&lt;br /&gt;舉例說明: uv ={ -3,-2,-1,0,1,3,8 }&lt;br /&gt;a ={ -2,-1,0,3,8 } , b ={ -3,1,3,0,8 }&lt;br /&gt;當uv[0]= -3 , fa[0]=1 and hr[0]=1&lt;br /&gt;當uv[1]= -2 , fa[1]=1 and hr[1]=4/5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)計算ROC曲線下的面積 (參考圖)&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TPtVuy7Y-tI/AAAAAAAAAHY/OnVM_3myZOk/s1600/1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 218px; height: 184px;" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TPtVuy7Y-tI/AAAAAAAAAHY/OnVM_3myZOk/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5547121628470115026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;matlab code :  auc = trapz(fa,hr);&lt;br /&gt;trapezoid function使用梯形公式算曲線下的面積&lt;br /&gt;梯形的高為 fa[i] – fa[i+1]&lt;br /&gt;上底為hr[i],下底為hr[i+1]&lt;br /&gt;Auc = 梯形公式 ((上底+下底)*高)/2&lt;br /&gt;&lt;br /&gt;舉例說明:&lt;br /&gt;trapz([123],[124])&lt;br /&gt;梯形第一塊:  ((1+2)*(2-1))/2 &lt;br /&gt;梯形第二塊:  ((2+4)*(3-2))/2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.10.19 ===&lt;br /&gt;&lt;br /&gt;在分析fMRI數據時,需要花費大量的計算和時間&lt;br /&gt;心理系龔老師希望我們來幫忙減少code的計算時間&lt;br /&gt;龔老師提供了他們主要計算部分的matlab程式碼&lt;br /&gt;其中以"ROC"此部分所花費的時間最多&lt;br /&gt;&lt;br /&gt;因此我們從此部分著手&lt;br /&gt;老師的想法是把ROC此部分改成C code&lt;br /&gt;改完後測時間看是否還要再作平行的方法&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-7396230436383623223?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/7396230436383623223/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=7396230436383623223' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7396230436383623223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7396230436383623223'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/12/roc.html' title='ROC - 雙魚'/><author><name>雙魚</name><uri>http://www.blogger.com/profile/07730948247767273324</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_a6B7Et4nKio/TPtVuy7Y-tI/AAAAAAAAAHY/OnVM_3myZOk/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-8674784517471757757</id><published>2010-12-03T22:30:00.002+08:00</published><updated>2010-12-05T00:10:01.945+08:00</updated><title type='text'>AVS/ H.264  --  雙魚</title><content type='html'>=== 2010.10.08 ===&lt;br /&gt;&lt;br /&gt;要開始進行motion search&lt;br /&gt;用不同大小的block到reference frame中去找出cost最小的部分&lt;br /&gt;這邊AVS是使用UMHexagonS Algorithm來做搜尋&lt;br /&gt;演算法分成五個部分:&lt;br /&gt;&lt;br /&gt;(1)Initial search point prediction&lt;br /&gt;   這個階段要找出一個比較適合的搜尋起始點&lt;br /&gt;   有四種prediction方法可以找出比較適合的點:&lt;br /&gt;&lt;br /&gt;   1.Median Prediction:&lt;br /&gt;     利用上一次算出來mvp去搜尋,找出cost最小的地方&lt;br /&gt;&lt;br /&gt;   2.UpLayer Prediction:&lt;br /&gt;     16x8,8x16: 參考16x16的mv去搜尋&lt;br /&gt;     8x8: 參考16x8的mv去搜尋&lt;br /&gt;     16x16:不作此項&lt;br /&gt;&lt;br /&gt;   3.Corresponding-block Prediction:&lt;br /&gt;     利用前一張frame同位置區塊的mv去搜尋&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a6B7Et4nKio/TPpfVq6YzVI/AAAAAAAAAG4/RMVglrS9AA0/s1600/1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 155px;" src="http://3.bp.blogspot.com/_a6B7Et4nKio/TPpfVq6YzVI/AAAAAAAAAG4/RMVglrS9AA0/s400/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5546850716961262930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   4.Neighboring Ref-frame Prediction:&lt;br /&gt;     利用到前面兩張frame來算出mv(如圖) &lt;br /&gt;     mv_pred = mv*(n-n')/(n-(n+1))&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TPpfbqHGH0I/AAAAAAAAAHA/xdLcG_OAiHk/s1600/2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 163px;" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TPpfbqHGH0I/AAAAAAAAAHA/xdLcG_OAiHk/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546850819825344322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   拿目前搜尋塊左上角座標,搭配上述四種方法提供的mv&lt;br /&gt;   到前一張frame去搜尋找出cost最小的區塊&lt;br /&gt;  &lt;br /&gt;   如果此時有符合early termination的條件&lt;br /&gt;   可直接跳到(4)或(5)進行小範圍搜尋&lt;br /&gt;   如果沒有符合條件,使用(2)去搜尋&lt;br /&gt;&lt;br /&gt;(2)十字搜尋法:&lt;br /&gt;   搜尋範圍-16~16  水平範圍-16~16  垂直範圍-8~8&lt;br /&gt;   (參考圖) 每隔2個pixel當作一個搜尋點,找cost最小的區塊&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TPph2RwGBfI/AAAAAAAAAHI/DJvegt-H1ag/s1600/2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 327px; height: 304px;" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TPph2RwGBfI/AAAAAAAAAHI/DJvegt-H1ag/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546853476166141426" /&gt;&lt;/a&gt;&lt;br /&gt;   如果此時有符合early termination的條件&lt;br /&gt;   可直接跳到(4)或(5)進行小範圍搜尋&lt;br /&gt;   如果沒有符合條件,使用(3)去搜尋&lt;br /&gt;&lt;br /&gt;(3)Uneven Multi-Hexagon-grid search:&lt;br /&gt;   分成兩個部分作搜尋:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TPpjStgFNaI/AAAAAAAAAHQ/Ih-BYlbUgoI/s1600/2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 391px; height: 311px;" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TPpjStgFNaI/AAAAAAAAAHQ/Ih-BYlbUgoI/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546855064163136930" /&gt;&lt;/a&gt;&lt;br /&gt;   1.小方型搜尋: (圖中紅色點區域)&lt;br /&gt;     先在-2~2之間內搜尋25點,找出cost最小的位置&lt;br /&gt;      如果此時有符合early termination的條件&lt;br /&gt;      可直接跳到(4)或(5)進行小範圍搜尋&lt;br /&gt;      如果沒有符合條件,使用多重六角型搜尋&lt;br /&gt;&lt;br /&gt;   2.多重六角型搜尋: (圖中藍色點)&lt;br /&gt;    在六角形上的16個點作搜尋,用early termination去判斷是否要繼續&lt;br /&gt;     如果此時有符合early termination的條件&lt;br /&gt;     可直接跳到(4)或(5)進行小範圍搜尋&lt;br /&gt;     如果沒有符合條件,重複上述步驟來找出cost最小的位置&lt;br /&gt;&lt;br /&gt;(4)六角形搜尋法:&lt;br /&gt;   搜尋六角形上的六點頂點和中心點&lt;br /&gt;   沿著cost最小的點再造出六角型繼續搜尋&lt;br /&gt;   當cost最小的點出現在中心點即可結束搜尋&lt;br /&gt;&lt;br /&gt;(5)小鑽石搜尋法:&lt;br /&gt;   搜尋菱形邊上的8個點和中心點&lt;br /&gt;   沿著cost最小的點再造出菱形繼續搜尋&lt;br /&gt;   當cost最小的點出現在中心點即可結束搜尋&lt;br /&gt;&lt;br /&gt;做完上面流程可找出此次motion search的mincost和最佳mv&lt;br /&gt;此部分code還有錯誤,AVS改寫就進行到這裡 &lt;br /&gt;  &lt;br /&gt; === 2010.09.20 ===&lt;br /&gt;&lt;br /&gt;完成算Motion Vector Predictor的code&lt;br /&gt;&lt;br /&gt;找motion vector(MV)前要先算Motion Vector Predictor(MVP)&lt;br /&gt;利用周圍block的MV去推斷出這次壓縮比較可能的MV&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TPj8NyxXKuI/AAAAAAAAAGw/pZZIs2HBY3M/s1600/1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 252px; height: 156px;" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TPj8NyxXKuI/AAAAAAAAAGw/pZZIs2HBY3M/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546460255004076770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MVP條件選擇如下:&lt;br /&gt;&lt;br /&gt;1.先判斷block A,B,C 是否存在 (如果C不存在,則參考block D)&lt;br /&gt;  如果只有block A存在: 選block A的MV當 mvp&lt;br /&gt;  如果只有block B存在: 選block B的MV當 mvp&lt;br /&gt;  如果只有block C存在: 選block C的MV當 mvp&lt;br /&gt;&lt;br /&gt;2.依照inter prediction的block size會有特殊選擇&lt;br /&gt;  如果是8x16 : 選block A的MV當 mvp ( A不存在就選 C )&lt;br /&gt;  如果是16x8 : 選block B的MV當 mvp ( B不存在就選 A )&lt;br /&gt;&lt;br /&gt;3.block A,B,C都存在且block size不是8x16或16x8&lt;br /&gt;  先算三個block互相相減的差值: D1(A,B),D2(B,C),D3(C,A)&lt;br /&gt;  如果 D1 == median (D1, D2,D3 ),選block C的MV當 mvp&lt;br /&gt;  如果 D2 == median (D1, D2,D3 ),選block A的MV當 mvp&lt;br /&gt;  如果 D3 == median (D1, D2,D3 ),選block B的MV當 mvp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.09.07 ===&lt;br /&gt;&lt;br /&gt;完成 1/4 interpolation的code&lt;br /&gt;&lt;br /&gt;先開一個圖片四倍大的記憶體空間 (4*352)*(4*288)&lt;br /&gt;接著進行1/4 interpolation:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1q4vTORgI/AAAAAAAAAGI/2P4TFVO0Vdg/s1600/6.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507175442346296834" style="WIDTH: 358px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1q4vTORgI/AAAAAAAAAGI/2P4TFVO0Vdg/s400/6.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;-&gt;灰點是原本的pixel,藍點是做完二分之一的pixel&lt;br /&gt;白點是做完四分之一的pixel&lt;br /&gt;(1)二分之一: filter用(-1, 5, 5, -1) &lt;br /&gt;算法: b=(-C+5D+5E-F+4)&gt;&gt;3, j=(-aa+5b+5s-dd+4)&gt;&gt;3&lt;br /&gt;(2)四分之一: filter用(1, 7, 7, 1) &lt;br /&gt;算法: a=(ee+7D+7b+E+64)&gt;&gt;7, e=(D+j+64)&gt;&gt;7&lt;br /&gt;&lt;br /&gt;結束運算後把結果依照相對位置存成16張352*288&lt;br /&gt;圖中每個顏色的點要自己存成一張352*288 &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a6B7Et4nKio/TPj199GF5XI/AAAAAAAAAGo/F_9c6GgTNvE/s1600/1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 337px; height: 196px;" src="http://3.bp.blogspot.com/_a6B7Et4nKio/TPj199GF5XI/AAAAAAAAAGo/F_9c6GgTNvE/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546453385827706226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.08.15 ===&lt;br /&gt;&lt;br /&gt;規劃 inter prediction的流程:&lt;br /&gt;&lt;br /&gt;1. 作四分之一的Interpolation&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1q4vTORgI/AAAAAAAAAGI/2P4TFVO0Vdg/s1600/6.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507175442346296834" style="WIDTH: 358px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1q4vTORgI/AAAAAAAAAGI/2P4TFVO0Vdg/s400/6.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;-&gt;灰點是原本的pixel,藍點是做完二分之一的pixel&lt;br /&gt;白點是做完四分之一的pixel&lt;br /&gt;(1)二分之一: filter用(-1, 5, 5, -1) &lt;br /&gt;算法: b=(-C+5D+5E-F+4)&gt;&gt;3, j=(-aa+5b+5s-dd+4)&gt;&gt;3&lt;br /&gt;(2)四分之一: filter用(1, 7, 7, 1) &lt;br /&gt;算法: a=(ee+7D+7b+E+64)&gt;&gt;7, e=(D+j+64)&gt;&gt;7&lt;br /&gt;&lt;br /&gt;2.找 motion vector&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a6B7Et4nKio/TG1s55J3yeI/AAAAAAAAAGQ/dCuxKMW6Gko/s1600/7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 203px;" src="http://2.bp.blogspot.com/_a6B7Et4nKio/TG1s55J3yeI/AAAAAAAAAGQ/dCuxKMW6Gko/s400/7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5507177661194553826" /&gt;&lt;/a&gt;&lt;br /&gt;原本block位置是(10,4), 到前一張去找到最適合的block位置是(5,9)&lt;br /&gt;motion vector則是(5,-5)&lt;br /&gt;&lt;br /&gt;3.決定最好的inter mode&lt;br /&gt;AVS提供16*16,16*8,8*16,8*8這幾種模式&lt;br /&gt;每種模式都要去找motion vector,接著計算和原本pixel的差值&lt;br /&gt;然後從中決定一種最好的mode&lt;br /&gt;&lt;br /&gt;=== 2010.08.07 ===&lt;br /&gt;&lt;br /&gt;規畫VLC的流程:&lt;br /&gt;&lt;br /&gt;1. 每個8*8 block要經過z字型掃描&lt;br /&gt;2. 找出block中的每組level和run,level是非0數值&lt;br /&gt;run是這個非0值和下個非0值中間有幾個0&lt;br /&gt;3.&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1hQwgpVyI/AAAAAAAAAFg/rCMj1rmUegg/s1600/1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507164859 871614754" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 223px" alt="" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1hQwgpVyI/AAAAAAAAAFg/rCMj1rmUegg/s400/1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(1)用maxAbslevel去找要查的table編號,initial從0開始&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1mtRe7HmI/AAAAAAAAAFo/HAbdimNfc60/s1600/2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507170847317237346" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 194px" alt="" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TG1mtRe7HmI/AAAAAAAAAFo/HAbdimNfc60/s400/2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(2)透過(run,level)在table中找到對應的trans_coefficient&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1m_cugwlI/AAAAAAAAAFw/nGIwSAEFnyU/s1600/3.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507171159573054034" style="WIDTH: 382px; CURSOR: hand; HEIGHT: 311px" alt="" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1m_cugwlI/AAAAAAAAAFw/nGIwSAEFnyU/s400/3.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(3)利用trans_coefficient在golomb表找出相對應的bitstream&lt;br /&gt;AVS有指定每張table要用的order&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1nEuQvh3I/AAAAAAAAAF4/RRxKj2zavLY/s1600/4.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507171250179377010" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 135px" alt="" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1nEuQvh3I/AAAAAAAAAF4/RRxKj2zavLY/s400/4.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(4)若level的絕對值&gt;maxAbslevel,要更新maxAbslevel和table編號&lt;br /&gt;&lt;br /&gt;如果(run,level)在table中找不到對應的trans_coefficient,編碼流程如下:&lt;br /&gt;(1) trans_coefficient = 59+ (run&lt;&lt;1)&gt;0)? 1:0 )&lt;br /&gt;(2) 拿(1)計算的trans_coefficient在golomb表找出bitstream&lt;br /&gt;(3) 找RefAbsLevel數值 :&lt;br /&gt;if run &gt; MaxRun, RefAbsLevel =1 (MaxRun要查表)&lt;br /&gt;Otherwise:從table中找到RefAbsLevel數值&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1nXdvYIRI/AAAAAAAAAGA/Pu3ceVLtebU/s1600/5.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5507171572161978642" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 137px" alt="" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TG1nXdvYIRI/AAAAAAAAAGA/Pu3ceVLtebU/s400/5.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(4) escape_level_diff = abs(level) – RefAbsLevel&lt;br /&gt;(5) 拿(4)計算的escape_level_diff在golomb表找出bitstream&lt;br /&gt;&lt;br /&gt;目前進度:完成上述流程的程式內容&lt;br /&gt;以及和原本code比對最後找到的bitstream的長度和數值&lt;br /&gt;&lt;br /&gt;=== 2010.07.20 ===&lt;br /&gt;&lt;br /&gt;完成intra prediction流程的程式內容&lt;br /&gt;&lt;br /&gt;for (block=0; block&lt;4; diff =" 原本數值-最佳的預測數值;" recy =" new_diff" diff =" 原本數值-最佳的預測數值--(1)" recv =" new_diff"&gt; quant -&gt; inv_quant -&gt; inv_DCT後的new_diff&lt;br /&gt;還原回來的數值等於new_diff 加上 預測出來最佳mode的數值&lt;br /&gt;&lt;br /&gt;luma/chroma predictionn算每種mode的預測值會用到還原回來的數值&lt;br /&gt;接著去比對還原回來的數值是否和原本程式一樣&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.07.05 ===&lt;br /&gt;&lt;br /&gt;畫intra prediction的流程:&lt;br /&gt;&lt;br /&gt;for (block=0; block&lt;4;&gt; quant -&gt; inv_quant -&gt; inv_DCT&lt;br /&gt;因為圖片為4個Y對到一個U一個V,所以一個MB只會對到1個8*8的U和V&lt;br /&gt;所以等四個Luma_Prediction結束後換成Chroma_Prediction()&lt;br /&gt;Chroma_Prediction()裡面包含U,V的prediction&lt;br /&gt;最後就是DCT-&gt; quant -&gt; inv_quant -&gt; inv_DCT&lt;br /&gt;&lt;br /&gt;Luma_Prediction()流程:&lt;br /&gt;(1)算luma prediction中每種mode的預測值&lt;br /&gt;(2)算 mostProbableMode&lt;br /&gt;(3)從5個mode中找出cost最小的mode,mostProbableMode會影響cost&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/TEhrqO4KJhI/AAAAAAAAAFY/8rlzKgL791M/s1600/1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5496761718498010642" style="WIDTH: 344px; CURSOR: hand; HEIGHT: 110px" alt="" src="http://1.bp.blogspot.com/_a6B7Et4nKio/TEhrqO4KJhI/AAAAAAAAAFY/8rlzKgL791M/s400/1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;原本5種mode需要花3個bit去表示,所以每個mode都需要3 bit&lt;br /&gt;若有mostProbableMode來標記,其他4個mode各需要3bit&lt;br /&gt;但mostProbableMode的只要1 bit,就能省下一些bit&lt;br /&gt;&lt;br /&gt;Chroma_Prediction()流程:&lt;br /&gt;(1)算chroma prediction中每種mode的預測值&lt;br /&gt;(3)從4個mode中找出cost最小的mode&lt;br /&gt;&lt;br /&gt;=== 2010.06.22 ===&lt;br /&gt;&lt;br /&gt;完成 quantization 和 inverse quantization函式&lt;br /&gt;&lt;br /&gt;quantization是 把DCT transform後的數值除以一個數&lt;br /&gt;避免用除法,所以先乘上一個倍數,四捨五入後再shift回來,看式子(1)&lt;br /&gt;(1) b = ( a * quantTable(QP) + qp_const) &gt;&gt; 15&lt;br /&gt;b:quantization後的數值 , a:DCT transform後取絕對值的數值&lt;br /&gt;quantTable(QP): 這張表裡有每個QP應該乘上的數值&lt;br /&gt;qp_const: 四捨五入用&lt;br /&gt;&gt;&gt;15: 是把quantTable(QP)乘上的倍數shift回來&lt;br /&gt;&lt;br /&gt;inverse quantization則是把 quantization後的數值乘上一個數,式子(2)&lt;br /&gt;(2) c=( (b*DequantTable(QP))+ 2ShiftTable(QP)–1)&gt;&gt; ShiftTable(QP)&lt;br /&gt;b:quantization後的數值&lt;br /&gt;DequantTable(QP):表中有每個QP應該乘上的數值&lt;br /&gt;2ShiftTable(QP)–1 : 四捨五入用&lt;br /&gt;&gt;&gt; ShiftTable(QP): 把DequantTable(QP)乘上的倍數shift回來&lt;br /&gt;&lt;br /&gt;程式流程: DCT-&gt; quant -&gt; inv_quant -&gt; inv_DCT&lt;br /&gt;開檔讀進DCT前的數值,比對inv_DCT後的數值是否和原本程式數值一樣&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.06.13 ===&lt;br /&gt;&lt;br /&gt;完成 DCT transform 和 inverse DCT 的函式&lt;br /&gt;&lt;br /&gt;DCT transform 流程: X是這次要作transform的8*8矩陣&lt;br /&gt;(1) D =(X)(A) , A是AVS規定要乘的DCT 8*8矩陣&lt;br /&gt;(2) D'=(T)(D) , T是A矩陣的轉置矩陣&lt;br /&gt;(3) 讓D'數值落在 -2^15 ~ 2^15 中&lt;br /&gt;&lt;br /&gt;inverse DCT 流程: X是這次要作inv_transform的8*8矩陣&lt;br /&gt;(1) D =(X)(T) , T是AVS規定的8*8矩陣的轉置矩陣&lt;br /&gt;(2) 讓D數值落在 -2^15 ~ 2^15 中&lt;br /&gt;(3) D'=(A)(D) , A是AVS規定要乘的DCT 8*8矩陣&lt;br /&gt;(4) 讓D'數值落在 -2^15 ~ 2^15 中&lt;br /&gt;&lt;br /&gt;開檔讀進 DCT前 和 inv_DCT前的數值&lt;br /&gt;各經過 DCT transform 和 inverse DCT 計算&lt;br /&gt;去比對 DCT後 和 inv_DCT後 的數值是否和原本程式數值一樣&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.06.04 ===&lt;br /&gt;&lt;br /&gt;從DCT transform開始,一樣從去原本程式找DCT transform&lt;br /&gt;luma DCT在 rdpot.c , chroma DCT 在marcoblock.c&lt;br /&gt;luma chroma的inverse DCT步驟都包含在squant函式中&lt;br /&gt;squant函式位在block.c中&lt;br /&gt;squant函式會呼叫inv_transform函式作inverse transform&lt;br /&gt;&lt;br /&gt;取出 "DCT前, DCT後,inv_DCT前,inv_DCT後" 的數值&lt;br /&gt;這些數值用來比對接下來改寫後的數值是否正確&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.05.28 ===&lt;br /&gt;&lt;br /&gt;這禮拜找intra chroma 8*8的最佳模式&lt;br /&gt;算完每種模式預測的數值,要從中選一種最好的預測數值&lt;br /&gt;去計算(原本圖片數值 - 預測數值)之間的差值總和&lt;br /&gt;差值越小的就是最好的預測模式&lt;br /&gt;&lt;br /&gt;最後拿原本程式取出的 最佳模式預測結果數值&lt;br /&gt;來比對數值是否正確&lt;br /&gt;&lt;br /&gt;intra prediction因為進度不如預期&lt;br /&gt;之前寫的內容就先暫時這樣&lt;br /&gt;決定改成從DCT transform開始寫&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.05.21 ===&lt;br /&gt;&lt;br /&gt;這禮拜先找intra luma 8*8的最佳模式&lt;br /&gt;算完每種模式預測的數值,要從中選一種最好的預測數值&lt;br /&gt;去計算(原本圖片數值 - 預測數值)的絕對值總和&lt;br /&gt;總和越小的就是最好的預測模式&lt;br /&gt;&lt;br /&gt;這邊要先算每個8*8 block的upmode 和 leftmode&lt;br /&gt;如果8*8的y座標等於0 代表此8*8位在frame的最上排&lt;br /&gt;所以此block的upmode等於-1&lt;br /&gt;如果8*8的x座標等於0 代表此8*8位在frame的最左邊排&lt;br /&gt;所以此block的leftmode等於-1&lt;br /&gt;&lt;br /&gt;如果8*8不是位在最上排和最左排&lt;br /&gt;upmode和leftmode要參考鄰近block的mode (參考下圖)&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_a6B7Et4nKio/TA_SK_OPwrI/AAAAAAAAAFQ/fV4I5Wz9fvQ/s1600/1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5480830357744894642" style="WIDTH: 324px; CURSOR: hand; HEIGHT: 273px" alt="" src="http://4.bp.blogspot.com/_a6B7Et4nKio/TA_SK_OPwrI/AAAAAAAAAFQ/fV4I5Wz9fvQ/s400/1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;1.左上橘色塊: upmode = 1 , leftmode = 2&lt;br /&gt;2.右上橘色塊: upmode = 4 , leftmode = 3&lt;br /&gt;3.左下橘色塊: upmode = 3 , leftmode = 3&lt;br /&gt;4.右下橘色塊: upmode = 2 , leftmode = 2&lt;br /&gt;紫色數字是代表前一個步驟橘色塊算出來的bestmode&lt;br /&gt;&lt;br /&gt;最後用upmode和leftmode去找出probable mode&lt;br /&gt;probable mode會影響到計算差值總和&lt;br /&gt;&lt;br /&gt;最後拿原本程式取出的 最佳模式預測結果數值&lt;br /&gt;來比對數值是否正確&lt;br /&gt;&lt;br /&gt;=== 2010.05.14 ===&lt;br /&gt;&lt;br /&gt;這禮拜寫intra chroma 8*8提供的4種模式&lt;br /&gt;4種模式分別是 垂直 水平 DC plane&lt;br /&gt;參考文件提供的數學式和原本程式內容去改寫&lt;br /&gt;&lt;br /&gt;原本程式是開一個陣列 a[2][][]去存U,V&lt;br /&gt;a[0][][]存U , a[1][][]存V&lt;br /&gt;我的程式是用*pre_U *preV分別去存&lt;br /&gt;所以原本程式有些地方要跑迴圈 一次算U一次算V&lt;br /&gt;改寫後可以把迴圈拿掉 一次直接算完U,V&lt;br /&gt;&lt;br /&gt;這邊也是把程式內容的判斷式作整理&lt;br /&gt;有些相同判斷的內容可以合併一起&lt;br /&gt;&lt;br /&gt;最後拿原本程式取出的每種模式預測結果數值&lt;br /&gt;來比對數值是否正確&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.05.07 ===&lt;br /&gt;&lt;br /&gt;從intra luma 8*8提供的5種模式開始寫&lt;br /&gt;5種模式分別是 垂直 水平 DC down_left down_right&lt;br /&gt;參考文件提供的數學式和原本程式內容去改寫&lt;br /&gt;&lt;br /&gt;主要是將程式內容的判斷式作整理&lt;br /&gt;有些相同判斷的內容可以合併一起&lt;br /&gt;&lt;br /&gt;最後拿原本程式取出的每種模式預測結果數值&lt;br /&gt;來比對數值是否正確&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=== 2010.04.30 ===&lt;br /&gt;&lt;br /&gt;定義目前寫程式需要用到的資料結構&lt;br /&gt;例如frame的基本資訊(YUV數值的大小型態和frame寬高 座標位置)&lt;br /&gt;MarcoBlock的資料(YUV數值和座標位置)&lt;br /&gt;intra prediction用來參考的MB資料&lt;br /&gt;&lt;br /&gt;從intra prediction開始, AVS提供8*8大小的prediction&lt;br /&gt;所以先去原本程式中找intra prediction的程式內容&lt;br /&gt;intra luma在block.c, intra chroma在marcoblock.c&lt;br /&gt;&lt;br /&gt;取出 "預測前, 每種模式的預測結果, 最好的預測結果" 的數值&lt;br /&gt;這些數值用來比對接下來改寫後的數值是否正確&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;== 2010.02.28===&lt;br /&gt;&lt;br /&gt;在程式中去找intra prediction幾種比對模式的程式碼&lt;br /&gt;luma有分成16*16和4*4兩種,Chroma提供4種兩個8*8模式&lt;br /&gt;&lt;br /&gt;(1)luma 16*16是以一個16*16大小block去作預測,提供4種模式&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a6B7Et4nKio/S4p2VV3kc_I/AAAAAAAAAE4/yQBiPNxtmrE/s1600-h/a.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5443293208650216434" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 140px" alt="" src="http://2.bp.blogspot.com/_a6B7Et4nKio/S4p2VV3kc_I/AAAAAAAAAE4/yQBiPNxtmrE/s400/a.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(2)luma 4*4是把一個16*16 block再切成4個4*4去作預測,提供9種模式&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_a6B7Et4nKio/S4p2ZIk6nvI/AAAAAAAAAFA/DSaTh9DN71g/s1600-h/b.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5443293273801793266" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 124px" alt="" src="http://3.bp.blogspot.com/_a6B7Et4nKio/S4p2ZIk6nvI/AAAAAAAAAFA/DSaTh9DN71g/s400/b.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(3)Chroma提供4種兩個8*8模式,分別是DC Mode、Horizontal Mode、&lt;br /&gt;Vertical Mode、和 Plane Mode , 其中DC Mode會把8*8再切成4*4 block&lt;br /&gt;依照每個4*4 block上側和左側資訊而有不同的數學式子去進行預測&lt;br /&gt;&lt;br /&gt;這邊有從網路上找資料,資料pdf中有每一種預測模式的數學式子&lt;br /&gt;從式子去推導每一點像素的式子數字,接著再和程式碼的寫法相對照&lt;br /&gt;參考的pdf連結: http://0rz.com/LnhA&lt;br /&gt;&lt;br /&gt;這學期理想的進度甘特圖&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a6B7Et4nKio/S4p8mz22msI/AAAAAAAAAFI/sxomVYBEiog/s1600-h/a.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5443300105827818178" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 124px" alt="" src="http://2.bp.blogspot.com/_a6B7Et4nKio/S4p8mz22msI/AAAAAAAAAFI/sxomVYBEiog/s400/a.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;希望一個月可以完成一個元件的改寫,先從intra prediction開始&lt;br /&gt;下禮拜會看AVS中intra prediction的文件內容&lt;br /&gt;&lt;br /&gt;== 2010.02.01===&lt;br /&gt;&lt;br /&gt;對quatization後的Y數值來壓縮和解壓縮&lt;br /&gt;利用上次產生出來的codeword table來練習&lt;br /&gt;&lt;br /&gt;(1)去找每個數值對應的codeword&lt;br /&gt;ex:有三個數值5,13,-5, 5的codeword是101&lt;br /&gt;13的codeword是0101 ,-5的codeword是1111&lt;br /&gt;&lt;br /&gt;(2)codeword累積到8個以1個byte寫入新的檔案&lt;br /&gt;設一個變數unsigned char c去記錄要寫入檔案的數值&lt;br /&gt;a陣列記錄要壓縮數值所對應的codeword&lt;br /&gt;當a[i]=1 , c = c先往左shift一個 再和00000001 作or&lt;br /&gt;當a[i]=0 , c = c往左shift一個&lt;br /&gt;如果c未滿8個 後面也沒有其他數值要壓縮&lt;br /&gt;c=c往左shift讓剩下位置補0到滿8個&lt;br /&gt;&lt;br /&gt;ex: 要壓數值5,13,-5 , codeword如(1)&lt;br /&gt;第一次a陣列中是101, 判斷完a陣列中每個位置後 c=00000101&lt;br /&gt;第二次a陣列中是0101, 判斷完a陣列中每個位置後 c=01010101&lt;br /&gt;第三次a陣列中是1111, 判斷完a[0]位置後 c=10101011 已經達到8個&lt;br /&gt;這時候就要把c寫入檔案 , 寫檔後讓c=0 再繼續判斷a陣列中剩下的位置&lt;br /&gt;判斷完剩下的位置 c=00000111 , 因為後面沒有數值要壓縮所以補0&lt;br /&gt;c = 11100000 , 最後再把此值寫入檔案中&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3)把(2)寫入的檔案讀出 , 把1個byte拆成8個bit&lt;br /&gt;讀出1個unsigned char c 後 ,下面的動作要作8次&lt;br /&gt;先 c= c和10000000作and , 再讓c往左shift一位&lt;br /&gt;把解出來的bit放在buf 陣列中&lt;br /&gt;&lt;br /&gt;ex: 把(2)產生的檔案數值讀出做完拆解判斷後&lt;br /&gt;buf中會是: 10101011 11100000&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4)到table中找codeword對應的數值&lt;br /&gt;table會先依照codeword大小排序 , 從小到大排序&lt;br /&gt;buf會一個一個位置去找現在停在哪個codeword中的哪bit&lt;br /&gt;如果此codeword下一個bit是'\0' , 代表找到一個對應的數值&lt;br /&gt;&lt;br /&gt;ex: 假設table只有三種codeword , 設定如(1)&lt;br /&gt;codeword排序後是: 0101 , 101 , 1111&lt;br /&gt;buf是: 10101011 11100000&lt;br /&gt;&lt;br /&gt;當buf[0]=1 , 會停在 codeword 101 中的第0個bit&lt;br /&gt;當buf[1]=0 , 會停在 codeword 101 中的第1個bit&lt;br /&gt;當buf[2]=1 , 會停在 codeword 101 中的第2個bit&lt;br /&gt;codeword 101 第三個bit是 '\0' , 所以就找到一個對應數值5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;== 2010.01.22===&lt;br /&gt;&lt;br /&gt;建立 huffman tree來產生對應的codeword&lt;br /&gt;拿上禮拜作完quatization後的Y數值來練習&lt;br /&gt;&lt;br /&gt;(1)去計算Y數值中每一種數值出現的機率&lt;br /&gt;假設4種節點機率分別為0.15 , 0.2 , 0.25 , 0.4 (圖中紫色點)&lt;br /&gt;&lt;br /&gt;(2)開始建立 huffman tree&lt;br /&gt;S為所有節點的集合 , 從S中找出機率最小的兩個 : t1 t2&lt;br /&gt;用t1 t2來產生一新節點N, N 是 t1 和 t2 的 parent節點&lt;br /&gt;而且N的機率為 t1 + t2 , 接著把 t1 t2 從S中刪掉, 把新節點 N 加入S中&lt;br /&gt;&lt;br /&gt;圖中用4種節點來說明步驟 , S= {0.15,0.2,0.25,0.4}&lt;br /&gt;先拿0.15 和 0.2 來組合 , 此樹節點機率為0.35 (圖中藍色點)&lt;br /&gt;把 0.15 和 0.2 從S中刪掉 , 把藍色點的樹0.35加入S中&lt;br /&gt;接著拿0.25 和 藍色點的樹 來組合 , 此樹節點機率為0.6 (圖中咖啡點)&lt;br /&gt;把0.25 和 藍色點的樹從S中刪掉, 把咖啡點的樹0.6加入S中&lt;br /&gt;最後拿0.4和 咖啡點的樹 來組合 , 最後root的機率為1&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_a6B7Et4nKio/S1nFcsaHD3I/AAAAAAAAAEw/tfVGMBDmTh0/s1600-h/a.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5429587922519527282" style="WIDTH: 262px; CURSOR: hand; HEIGHT: 206px" alt="" src="http://1.bp.blogspot.com/_a6B7Et4nKio/S1nFcsaHD3I/AAAAAAAAAEw/tfVGMBDmTh0/s400/a.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(3)去找每種數值對應的codeword&lt;br /&gt;左邊樹分支填 0, 右邊樹分支填 1&lt;br /&gt;每個分支的 0 或 1 是圖上的黃底綠色字&lt;br /&gt;每種數值的codeword就是從root到該數值節點的 0 和 1 組合&lt;br /&gt;&lt;br /&gt;從圖上標記可以看到:&lt;br /&gt;數值0.4的codeword是 0&lt;br /&gt;數值 0.25的codeword是 10&lt;br /&gt;數值 0.15的codeword是 110&lt;br /&gt;數值 0.2 的codeword是 111&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;== 2010.01.15===&lt;br /&gt;&lt;br /&gt;完成 DCT-&gt; quatization -&gt; IDCT 的練習&lt;br /&gt;一樣是用txt檔案中的YUV數值&lt;br /&gt;分別對YUV去作DCT-&gt; quatization -&gt; IDCT&lt;br /&gt;&lt;br /&gt;YUV以4:2:0的方式儲存 , 4個Y共用一個U和V&lt;br /&gt;所以 Y 範圍是352*288 , U和V則是 176 *144&lt;br /&gt;先對Y作處理 , 接著就是U和V , 每次都以8*8為單位&lt;br /&gt;流程如下:&lt;br /&gt;(1)用下列的公式去產生DCT 8*8矩陣的數值&lt;br /&gt;Aij = Ci*(cos((2*j+1)*i*pi)/2*N) ,&lt;br /&gt;when i=0 , Ci= (1/N)^1/2&lt;br /&gt;when i&gt;0 , Ci= (2/N)^1/2&lt;br /&gt;&lt;br /&gt;因為DCT是8*8 , 所以N=8&lt;br /&gt;Aij代表的是矩陣中第 i行第j列的數值&lt;br /&gt;DCT陣列的數值是double的形態儲存&lt;br /&gt;&lt;br /&gt;(2)利用 D=(A)(X)(T)來作DCT&lt;br /&gt;A是步驟(1)產生的DCT矩陣&lt;br /&gt;T是A矩陣的轉置矩陣&lt;br /&gt;X是圖片切出來的8*8方塊&lt;br /&gt;D是AXT三者作矩陣運算後的8*8矩陣&lt;br /&gt;D也是用double的形態儲存&lt;br /&gt;&lt;br /&gt;(3)去網路找 YUV的 quatization table&lt;br /&gt;quatization table也是8*8的矩陣&lt;br /&gt;把經過DCT後的數值除以quatization table上的數值&lt;br /&gt;除以quatization後的數值先做四捨五入&lt;br /&gt;接著以 int的型式儲存起來&lt;br /&gt;&lt;br /&gt;(4)把步驟(3)儲存的數值再乘上quatization table的數值&lt;br /&gt;再以double的形態把乘完quatization的數值儲存起來&lt;br /&gt;&lt;br /&gt;這時候會發現數值和一開始經過DCT後的數值有稍微的不同&lt;br /&gt;ex: 經過DCT後是527.89 , 除以quatization 16 再四捨五入後&lt;br /&gt;會以33的數值存起來 , 再乘回quatization 16 會變成528&lt;br /&gt;雖然會有些微的不同 但是誤差都不會太大&lt;br /&gt;&lt;br /&gt;(5)利用 X=(T)(D)(A) 來作IDCT&lt;br /&gt;A是步驟(1)產生的DCT矩陣&lt;br /&gt;T是A矩陣的轉置矩陣&lt;br /&gt;D是步驟(4)儲存的8*8矩陣&lt;br /&gt;X是TDA三者作矩陣運算得到的8*8矩陣&lt;br /&gt;&lt;br /&gt;要去判斷X中的每一點的數值&lt;br /&gt;如果數值&gt;255, 要讓它等於255&lt;br /&gt;如果數值&lt;0 30="="=""&gt;RGB 的公式去計算&lt;br /&gt;如果轉換後的數值&gt;255, 要讓它等於255&lt;br /&gt;如果轉換後的數值&lt;0 ,要讓它等於0&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_a6B7Et4nKio/SztPOJeANNI/AAAAAAAAAEo/IItWnMyt53o/s1600-h/a.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5421013680949048530" style="WIDTH: 287px; CURSOR: hand; HEIGHT: 191px" alt="" src="http://2.bp.blogspot.com/_a6B7Et4nKio/SztPOJeANNI/AAAAAAAAAEo/IItWnMyt53o/s400/a.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這邊是練習對MB 和 frame的位置概念&lt;br /&gt;參考圖片 , 整張圖是352*288, MB是16*16 (圖中紅色方塊)&lt;br /&gt;txt檔中是把每個MB中16的點 由左至右 由上到下寫入&lt;br /&gt;一個MB寫完在換下一個 , MB也是由左至右 由上到下&lt;br /&gt;frame是一個點一個點讀取 由左至右 由上到下 (圖中紫色方塊)&lt;br /&gt;&lt;br /&gt;所以讀出txt檔每一個數值, 都要放回它在圖片的原本位置&lt;br /&gt;步驟2是把圖片一個點一個點的讀入,然後儲存起來&lt;br /&gt;最後再比較這兩個種數值是否有一致&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;== 2009.12.10===&lt;br /&gt;&lt;br /&gt;目前已經把上次提的數值抓出&lt;br /&gt;除了bitrate, 其他數值都以binary型式寫入檔案&lt;br /&gt;&lt;br /&gt;1. 每個16*16 (MB) 的數值&lt;br /&gt;圖片大小352*288 , 每16*16切成一塊&lt;br /&gt;把16*16裡每點的pixel數值寫入檔案&lt;br /&gt;&lt;br /&gt;2. 每個MB作完intra prediction的different值&lt;br /&gt;intra prediction 分成 4*4和 16*16 兩種&lt;br /&gt;(1) 4*4有9種mode , 每一種mode都會算出一個different值&lt;br /&gt;先用一個陣列暫存每種mode算出來的different值&lt;br /&gt;接著計算每種mode的cost大小, 找出一個最好的mode&lt;br /&gt;這邊也會有個變數去記錄哪個mode是cost最小的&lt;br /&gt;最後把此種mode的different值存進陣列(a4)&lt;br /&gt;以4*4 去算different值 , 但最後要的是16*16&lt;br /&gt;所以每次算完的4*4 要按著順序存進陣列(a4)&lt;br /&gt;&lt;br /&gt;(2)16*16則有4種mode , 作法同上&lt;br /&gt;差別在於 這邊是用16*16去算different值&lt;br /&gt;只要把最好mode的different值存進陣列(a16)即可&lt;br /&gt;&lt;br /&gt;作完上述兩點 , 每個MB會有 4*4 和 16*16算完的最佳解&lt;br /&gt;會從中選一個來當作這個MB使用的different值&lt;br /&gt;所以最後選出的different值才是要寫入檔案的&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 每個MB作完 DCT+ quantization 後的數值&lt;br /&gt;程式作完 DCT+ quantization的值存在 nMBQuant_Y變數裡&lt;br /&gt;而且大小也是宣告成 16*16&lt;br /&gt;只要將 此變數中 256個數值 寫入檔案即可&lt;br /&gt;有記錄 Frame_I DCT+ quantization 後的數值&lt;br /&gt;以及 Frame_P DCT+ quantization 後的數值&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 得到每個MB需要的bits數量&lt;br /&gt;此數值存在nRDBitRate變數裡&lt;br /&gt;只要將此變數的值寫入檔案即可&lt;br /&gt;一樣要記錄 Frame_I 和 Frame_P的BitRate&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;== 2009.11.18 ===&lt;br /&gt;&lt;br /&gt;已經跟小新學長拿了程式&lt;br /&gt;為了達成了解基本的H.264運作流程&lt;br /&gt;計畫先取出下列幾個數值:&lt;br /&gt;1.抓出MB pixel值&lt;br /&gt;2.抓出MB pixel值 做過 Prediction(inter or intra)&lt;br /&gt;3.抓出MB 4x4 DCT值&lt;br /&gt;4.抓出MB 4x4 DCT值做過 quantization&lt;br /&gt;5.得到MB壓縮所需要的bits數量&lt;br /&gt;&lt;br /&gt;把這五個項目的數值取出來,分別存成一個新檔&lt;br /&gt;這些檔案裡面的數值是後續步驟會使用到的&lt;br /&gt;存檔的類型沒有限制 , 我想說把每項的數據存成txt檔&lt;br /&gt;就從第一項開始作起 , 現在剛看程式 大略知道第一項要的數值在哪&lt;br /&gt;這邊會再問一下學長 , 希望下禮拜可以抓出第一項的數值&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-8674784517471757757?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/8674784517471757757/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=8674784517471757757' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8674784517471757757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/8674784517471757757'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/06/avs.html' title='AVS/ H.264  --  雙魚'/><author><name>雙魚</name><uri>http://www.blogger.com/profile/07730948247767273324</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_a6B7Et4nKio/TPpfVq6YzVI/AAAAAAAAAG4/RMVglrS9AA0/s72-c/1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6392282821131917974</id><published>2010-12-01T07:57:00.008+08:00</published><updated>2010-12-01T09:14:19.454+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multicore'/><title type='text'>SCREAM Processor-Cluster Platform Simulator - 威佐</title><content type='html'>-------- 2010 . 12. 01 ----------&lt;br /&gt;&lt;br /&gt;目前模擬器已經開始使用 &amp; 測試，&lt;br /&gt;雖然不大穩定，但可以邊使用邊 debug。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;昨天仕偉學長寫了一個 bubble sort 的程式，&lt;br /&gt;連線遇到了一點小問題，不過我用了些方法先解決(之後會有更好的作法)，所以程式有順利上傳執行。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;接著就是在平台上加些功能，目前會先加的包括，&lt;br /&gt;1.傳輸時 broadcast 的功能。&lt;br /&gt;2.使用者端可以自行撰寫一支程式，接收平台傳來的資料，以便做應用。&lt;br /&gt;3.Report，回報傳輸時間，以及每個component在core上執行時間等資訊。&lt;br /&gt;因為使用者的需求不同，所以如果使用有什麼功能需要加，希望大家告訴我，我可以補上。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;另外可能會遇到的問題就是使用者 resource 的釋放問題，&lt;br /&gt;之前宜豊學長有提出，但我還沒找到適當的 solution。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;下一步會開始進行的是容錯機制的設計。&lt;br /&gt;如果順利的話，希望可以在寒假時將模擬器 porting 到板子上。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;接著是開發者與前四位下載使用者的合影留念&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jeKSlnJKM20/TPWTq6Jf1cI/AAAAAAAAAAU/XyfHR6LR04Q/s1600/4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://2.bp.blogspot.com/_jeKSlnJKM20/TPWTq6Jf1cI/AAAAAAAAAAU/XyfHR6LR04Q/s320/4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5545500881549514178" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-6392282821131917974?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/6392282821131917974/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=6392282821131917974' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6392282821131917974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/6392282821131917974'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/12/scream-processor-cluster-platform.html' title='SCREAM Processor-Cluster Platform Simulator - 威佐'/><author><name>雨人</name><uri>http://www.blogger.com/profile/09296459963163649481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jeKSlnJKM20/TPWTq6Jf1cI/AAAAAAAAAAU/XyfHR6LR04Q/s72-c/4.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-5012709518846584051</id><published>2010-10-13T17:27:00.000+08:00</published><updated>2010-10-13T17:28:40.449+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Courses'/><title type='text'>[course] aSLIM applications</title><content type='html'>&lt;p&gt;20100930 投影片請&lt;a href="http://showmin.csie.ncku.edu.tw/stuff/aSLIM-app-20100929.zip"&gt;按此下載&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;20101006 投影片請&lt;a href="http://ludwig.csie.ncku.edu.tw/members/87showmin.Wang/Course/aSLIM-app-20101006.zip"&gt;按此下載&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;20101006 aSLIM投影片請&lt;a href="http://ludwig.csie.ncku.edu.tw/members/87showmin.Wang/Course/aSLIM-design-20101006.zip"&gt;按此下載&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;20101013 投影片請&lt;a href="http://ludwig.csie.ncku.edu.tw/members/87showmin.Wang/Course/aSLIM-app-20101013.zip"&gt;按此下載&lt;/a&gt;。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-5012709518846584051?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/5012709518846584051/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=5012709518846584051' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/5012709518846584051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/5012709518846584051'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/09/course-aslim-applications.html' title='[course] aSLIM applications'/><author><name>87showmin</name><uri>http://www.blogger.com/profile/06876333129934038881</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ht6WE9mWO6c/SmsRMR-rNgI/AAAAAAAAA5Q/-cNqb-IgvXE/S220/P1010762.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-3969933015594763247</id><published>2010-09-06T14:57:00.005+08:00</published><updated>2010-09-06T15:20:18.920+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='HTC'/><title type='text'>android introduction &amp; htc cracking</title><content type='html'>----------- 2010 09 08 -----------&lt;br /&gt;android 介紹   link &lt;a href="http://ludwig.csie.ncku.edu.tw/members/weiyuenfu/20100908-android_intorduction-saigong.zip"&gt;在此&lt;/a&gt;&lt;br /&gt;這部分是簡單介紹 QEMU&lt;br /&gt;以及 android 一些基礎入門&lt;br /&gt;了解android應用程式的種類, 以及process lifecycle&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;htc 部分 我認為在課堂上再把link 跟大家說比較適合&lt;br /&gt;這部分主要是說如何一步步去 刷機.....&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-3969933015594763247?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/3969933015594763247/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=3969933015594763247' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3969933015594763247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/3969933015594763247'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/09/android-introduction-htc-cracking.html' title='android introduction &amp; htc cracking'/><author><name>威元</name><uri>http://www.blogger.com/profile/13384217527967775591</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_XDfqVE0dcnE/SRM9NEJF4bI/AAAAAAAAAAM/WWxjAkXOvyc/S220/%E9%BB%91%E7%99%BD.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-2486962236057109383</id><published>2010-08-27T09:34:00.001+08:00</published><updated>2010-09-02T16:26:19.557+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tool Chain'/><category scheme='http://www.blogger.com/atom/ns#' term='SLIM'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ESL Design Flow'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenESL'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='ESL'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='SCREAMLab. 活動預告與紀實'/><category scheme='http://www.blogger.com/atom/ns#' term='Courses'/><title type='text'>2010 SCREAM Lab Summer Training Courses</title><content type='html'>&lt;p&gt;今年規畫的比較晚，大概是因為我生了一場病，之後也比較疏懶一點，不過這傳統還是不希望斷掉。今年的訓練課程偏重實際，但是多增加一點練習，請講師多費心，下學期的多核心課程裡，我希望是這些課程裡部分的延續。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;9/6 AM: Verilog 講師: 哲榮&lt;/p&gt;  &lt;p&gt;9/6 PM: Verilog LAB and ModelSim 講師: 哲榮&lt;/p&gt;  &lt;p&gt;9/7 AM: SMIMS FPGA SDK and FPGA Lab 講師: 巴菲特&lt;/p&gt;  &lt;p&gt;9/7 PM: SCREAM Lab Multicore Platform/Emulator Programming Front End 講師: 威佐&lt;/p&gt;  &lt;p&gt;9/8 AM: Android/QEMU/Cracking HTC Desire&amp;#160; 講師: 塞公; SLIM/aSLIM programming 講師: 易聰&lt;/p&gt;  &lt;p&gt;9/8 PM: SLIM/aSLIM Lab 講師: 塞公&lt;/p&gt;  &lt;p&gt;9/9 AM: SMIMS Android/QEMU/FPGA 講師:君宇&lt;/p&gt;  &lt;p&gt;9/9 PM: SMIMS Android/QEMU/FPGA Lab 講師:格銘&lt;/p&gt;  &lt;p&gt;9/10 AM: SystemC/OpenESL/Eclipse 講師: 威佐&lt;/p&gt;  &lt;p&gt;9/10 PM: SystemC/OpenESL/Eclipse Lab 講師: ruru&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;請Lab的講師出Lab所需的練習題目並提供解答，請Senior學長協助Junior學弟製作課程投影片。&lt;/p&gt;  &lt;p&gt;請在9/5以前上傳投影片。投影片請各自開主題，並註明年分，作者，以及分類。並在串裡附上摘要。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-2486962236057109383?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/2486962236057109383/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=2486962236057109383' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/2486962236057109383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/2486962236057109383'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/08/2010-scream-lab-summer-training-courses.html' title='2010 SCREAM Lab Summer Training Courses'/><author><name>SCREAMLab</name><uri>http://www.blogger.com/profile/05590168398461567054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_H1JqYnMe9ow/SQm74AxigRI/AAAAAAAAAAM/8oHey4ZZfPk/S220/Snoopy001.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-1320855903394828455</id><published>2010-08-21T13:06:00.002+08:00</published><updated>2010-08-21T13:22:29.464+08:00</updated><title type='text'>GCC Bug</title><content type='html'>今天遇到一個Bug, GCC有最佳化, 在x86上執行.&lt;br /&gt;double f(double z)&lt;br /&gt;{&lt;br /&gt;return z;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void foo(double fraction)&lt;br /&gt;{&lt;br /&gt;double z = fraction * 20.0;&lt;br /&gt;int t1 = z;&lt;br /&gt;int t2 = f(z);&lt;br /&gt;printf("t1=%d, t2=%d\n", t1, t2);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;foo(6.0/20.0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;結果 t1 是5, t2是6&lt;br /&gt;&lt;br /&gt;詳細的原因我沒去追, 不過compile的時後多加個flag就解決了&lt;br /&gt;&lt;a href="http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Optimize-Options.html"&gt;-ffloat-store&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-1320855903394828455?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/1320855903394828455/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=1320855903394828455' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1320855903394828455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/1320855903394828455'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/08/gcc-bug.html' title='GCC Bug'/><author><name>Aaa</name><uri>http://www.blogger.com/profile/15129936047226551193</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-7323216084772045737</id><published>2010-08-17T11:48:00.001+08:00</published><updated>2010-08-17T11:50:08.293+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCREAMLab. 活動預告與紀實'/><title type='text'>lab旅遊-宜蘭行程</title><content type='html'>第一天：&lt;br /&gt;&lt;br /&gt;坐車到礁溪-五琪峰瀑布(步行30~40分)－跑馬古道-礁溪買鴨賞(巴菲特)－川湯春天養生館(溫泉魚 spa 滑水道 2小時)&lt;br /&gt;-正常鮮小籠湯包(宜蘭)-宜蘭逛東門夜市-看夜景(橘子咖灰)－到羅東民宿check in－休息[住羅東]&lt;br /&gt;&lt;br /&gt;橘子咖啡&lt;br /&gt;03-9220171&lt;br /&gt;地址：宜蘭縣員山鄉枕山一村19號3樓&lt;br /&gt;&lt;br /&gt;第二天：&lt;br /&gt;&lt;br /&gt;開車到南澳火車站(9點集合)-(9.30)開始溯溪-(中間午餐)-4點結束&lt;br /&gt;-南方澳吃海產-羅東逛羅東夜市-羅東運動公園-休息&lt;br /&gt;&lt;br /&gt;第三天：&lt;br /&gt;&lt;br /&gt;外澳衝浪－樂屋日本料理-芋冰-附近的街道?買名產(諾貝爾奶凍捲)－宜蘭還車回家－坐車回家&lt;br /&gt;&lt;br /&gt;聯發芋冰老店&lt;br /&gt;地址： 宜蘭縣頭城鎮青雲路三段190號&lt;br /&gt;&lt;br /&gt;樂屋日本料理&lt;br /&gt;03-9777525&lt;br /&gt;&lt;br /&gt;旅遊每人初估:&lt;br /&gt;1.車錢: 350*2 +  150*2      +     950  = 1950&lt;br /&gt; (台南-台北)  噶瑪蘭號(台北-宜蘭)   宜蘭租車    油錢&lt;br /&gt;     ((2500+2200)*2+1000)/11&lt;br /&gt;2.住宿: (950*10+1300)/11 = 990&lt;br /&gt;3.玩樂: 220     +      500        +    1600    = 2320&lt;br /&gt;       川湯           衝浪            溯溪&lt;br /&gt;4.保險合菜:   40     +     500       =    540&lt;br /&gt;            保險           合菜(海產)&lt;br /&gt;            &lt;br /&gt;            合計    1950+990+2320+540 = 5800&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-7323216084772045737?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/7323216084772045737/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=7323216084772045737' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7323216084772045737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7323216084772045737'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2010/08/lab.html' title='lab旅遊-宜蘭行程'/><author><name>ruru</name><uri>http://www.blogger.com/profile/10779341061188685088</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_FeztuNYwl_s/Sv5pYpoYgOI/AAAAAAAAFkA/tL0dWolKFPc/S220/ppt0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-7068218459228271419</id><published>2010-07-28T02:00:00.004+08:00</published><updated>2010-10-05T11:46:12.835+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>Polyphonic Computer Music Authoring Tool - 仕偉</title><content type='html'>-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/10/5&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;目前AuthoringTool主要功能說明：&lt;br /&gt;&lt;br /&gt;1.讀入wave檔可用程式抓出f0.&lt;br /&gt;2.讀入wave檔可畫出spectrum.&lt;br /&gt;3.使用者可以畫出f0,音量可由java或cuda合成聲音.&lt;br /&gt;4.可由讀入的spectrum,由使用者畫出大概基頻,程式會自動找出對應的spectrum能量並修正頻率.&lt;br /&gt;5.data可存為xml檔方便存取.&lt;br /&gt;6.合成音樂時可調整音高,音量,合成partial比例.如用cuda合成時以上可為real-time.&lt;br /&gt;&lt;br /&gt;連結網址:&lt;a href="http://cmslab.csie.ncku.edu.tw/index.php/research/asp"&gt;http://cmslab.csie.ncku.edu.tw/index.php/research/asp&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/8/19&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;完成抓取spectrum的功能,不過抓到的數值要轉換成dB,&lt;br /&gt;轉換的公式要再調整.&lt;br /&gt;介面變更許多,待確定再一次貼圖.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/7/28&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;主畫面:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/TE8ftPOtpPI/AAAAAAAACg0/Vm-ThKn8X8M/s1600/figure11.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 324px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/TE8ftPOtpPI/AAAAAAAACg0/Vm-ThKn8X8M/s400/figure11.png" alt="" id="BLOGGER_PHOTO_ID_5498648532085482738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;已將檔案結構換成Vector.&lt;br /&gt;已完成移植:&lt;br /&gt;spectrum&lt;br /&gt;wav&lt;br /&gt;midi&lt;br /&gt;新增pitch&lt;br /&gt;修改pitch&lt;br /&gt;刪除pitch&lt;br /&gt;java聲音合成&lt;br /&gt;選擇partial&lt;br /&gt;選擇group&lt;br /&gt;pitch table&lt;br /&gt;help-about&lt;br /&gt;&lt;br /&gt;about :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TE8hzgTFSQI/AAAAAAAAChM/AwWZ2NpBqHE/s1600/about.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 162px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TE8hzgTFSQI/AAAAAAAAChM/AwWZ2NpBqHE/s400/about.png" alt="" id="BLOGGER_PHOTO_ID_5498650838769682690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;新增兩功能的GUI,尚未實作內容:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/TE8f26DfVdI/AAAAAAAACg8/axaJ2Gp7PKo/s1600/figure12.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 212px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/TE8f26DfVdI/AAAAAAAACg8/axaJ2Gp7PKo/s400/figure12.png" alt="" id="BLOGGER_PHOTO_ID_5498648698199954898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/TE8f9SzsGfI/AAAAAAAAChE/R194mW3zMIo/s1600/figure13.png"&gt;&lt;img style="cursor: pointer; width: 219px; height: 224px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/TE8f9SzsGfI/AAAAAAAAChE/R194mW3zMIo/s400/figure13.png" alt="" id="BLOGGER_PHOTO_ID_5498648807923784178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/7/2&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;為了改善畫圖的效率，捨棄原本的畫圖方式，改用新的方法：&lt;br /&gt;&lt;br /&gt;舊的方法：&lt;br /&gt;在panel中用paintcomponent，由於paintcomponent是對整個panel繪圖，因此只要修改到panel的內容，整張panel就會重繪.&lt;br /&gt;&lt;br /&gt;新的方法 :&lt;br /&gt;在panel中建一個label，將已存的資料畫在bufferedimage放入label中當背景，上面架一層玻璃(GlassPane)當畫布。&lt;br /&gt;1. 如果要畫新的pitch會畫在玻璃上，確定畫完再更新bufferedimage-&gt;放入label中當背景。&lt;br /&gt;2. 刪除pitch時會在玻璃上畫背景顏色，等確定後再刪除資料-&gt;更新bufferedimage-&gt;放入label中當背景.&lt;br /&gt;此方法優點是每次在新增或刪除pitch時畫面只會重畫GlassPane的部分，不會影響到背景label的圖形，因此效率會大幅改善，以下為圖例：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/TC1wNCjB18I/AAAAAAAACgU/yYFlcIuw0QM/s1600/glasspane.png"&gt;&lt;img style="cursor: pointer; width: 386px; height: 318px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/TC1wNCjB18I/AAAAAAAACgU/yYFlcIuw0QM/s400/glasspane.png" alt="" id="BLOGGER_PHOTO_ID_5489166890158905282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/6/18&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;新增demo影片&lt;br /&gt;&lt;br /&gt;&lt;object width="445" height="364"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/5nP6TJyFDlM&amp;amp;hl=zh_TW&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube-nocookie.com/v/5nP6TJyFDlM&amp;amp;hl=zh_TW&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/5/27&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;1.讀檔可由xml讀入已編輯好的檔案.&lt;br /&gt;&lt;br /&gt;2.在讀檔,合成,修改pitch,新增顯示進度條.&lt;br /&gt;&lt;br /&gt;3.可指定要合成的時間片段,按"SlelectRange",滑鼠點第一下為開始時間,&lt;br /&gt;第二下結束時間,第三下取消選取.&lt;br /&gt;&lt;br /&gt;4.未選擇時間片段則預設合成全部.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/5/25&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;1.修改wav spectrum,使明暗更明顯.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/S_uRk6K0qaI/AAAAAAAACdU/I6ZNxUDNGb4/s1600/test.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 301px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/S_uRk6K0qaI/AAAAAAAACdU/I6ZNxUDNGb4/s400/test.png" alt="" id="BLOGGER_PHOTO_ID_5475129835274938786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.可對單一partial或 partial group編輯,會跳出視窗.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S_uSUU219SI/AAAAAAAACdc/T-dFAzQl6ms/s1600/edit1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 375px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S_uSUU219SI/AAAAAAAACdc/T-dFAzQl6ms/s400/edit1.png" alt="" id="BLOGGER_PHOTO_ID_5475130649892746530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.視窗內可編輯音高,按"drawVolume"可用滑鼠畫出指定音量,單位是db,&lt;br /&gt;按下"Synthesis"就可合成此段pitch並播放.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S_uS6AiIRXI/AAAAAAAACdk/hwMWl2V2DhY/s1600/edit.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 374px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S_uS6AiIRXI/AAAAAAAACdk/hwMWl2V2DhY/s400/edit.png" alt="" id="BLOGGER_PHOTO_ID_5475131297272186226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/5/20&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold; color: rgb(153, 0, 0);"&gt;語音合成與研究&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. &lt;span style="color: rgb(51, 51, 255);"&gt;了解語音合成過程&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;目前語音合成&lt;br /&gt;--用LPC model vocal tract&lt;br /&gt;--程式中的model vocal tract部分希望改成sine&lt;br /&gt;&lt;br /&gt;2. &lt;span style="color: rgb(51, 51, 255);"&gt;如何用HMM輔助合成&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;showmin的合成&lt;br /&gt;--音色庫先建好&lt;br /&gt;--LPC+sine是用來Model Harmonics&lt;br /&gt;--HMM只是來輔助合成的&lt;br /&gt;&lt;br /&gt;3. &lt;span style="color: rgb(51, 51, 255);"&gt;目標&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;了解語音合成的程式碼,&lt;br /&gt;將showmin之LPC model sine的方法修改或套用至語音合成,&lt;br /&gt;再用HMM輔助合成,並整合到authingtool.&lt;br /&gt;希望能用CUDA加速.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/5/19&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;matlab with hmm example&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zwe0405.blogspot.com/2010/05/hmm-matlab-example.html"&gt;http://zwe0405.blogspot.com/2010/05/hmm-matlab-example.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;matlab with hmm 函數說明&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zwe0405.blogspot.com/2010/05/hidden-markov-models-with-matlab.html"&gt;http://zwe0405.blogspot.com/2010/05/hidden-markov-models-with-matlab.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/5/14&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;增加了顯示wav檔的orginal spectrum.&lt;br /&gt;&lt;br /&gt;做法:&lt;br /&gt;程式讀入wav檔-&gt;分析格式取出data部分-&gt;data bytes轉成數字-&gt;&lt;br /&gt;將數字標準化後經FFT計算得frequency,amp.&lt;br /&gt;&lt;br /&gt;亮度變化用java的函式gradientpaint(x1,y1,color1,x2,y2,color2),&lt;br /&gt;意思是從(x1,y1)的顏色color1漸層至(x2,y2)座標的color2,&lt;br /&gt;再搭配畫線函式畫出.&lt;br /&gt;&lt;br /&gt;因amp大小不同須調整gradient兩座標的距離來改變亮度.&lt;br /&gt;&lt;br /&gt;FFT window:8192, 取樣頻率用44100Hz算的話,&lt;br /&gt;每隔441根bin計算一次,使得時間剛好相差0.01 second.&lt;br /&gt;&lt;br /&gt;截圖如下:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S-w94YRgLrI/AAAAAAAACSo/PKvKA28ZQrg/s1600/newsp1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S-w94YRgLrI/AAAAAAAACSo/PKvKA28ZQrg/s400/newsp1.png" alt="" id="BLOGGER_PHOTO_ID_5470815686146141874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/S-w-ASxd7bI/AAAAAAAACSw/a6PLRKQ6XTg/s1600/newsp2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/S-w-ASxd7bI/AAAAAAAACSw/a6PLRKQ6XTg/s400/newsp2.png" alt="" id="BLOGGER_PHOTO_ID_5470815822108552626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S-w-HGr7eTI/AAAAAAAACS4/gTx2fim1vW8/s1600/newsp4.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 298px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S-w-HGr7eTI/AAAAAAAACS4/gTx2fim1vW8/s400/newsp4.png" alt="" id="BLOGGER_PHOTO_ID_5470815939123181874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S-w-SZ1XYNI/AAAAAAAACTA/SraTAyyx6ck/s1600/newsp3.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S-w-SZ1XYNI/AAAAAAAACTA/SraTAyyx6ck/s400/newsp3.png" alt="" id="BLOGGER_PHOTO_ID_5470816133241594066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/4/27&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;在小聽的筆電上跑authoringtool會有error,&lt;br /&gt;經過多次試驗總算找出原因.&lt;br /&gt;結果居然是visual studio 2005與visual studio 2008不相容的關係.&lt;br /&gt;我是用visual studio 2005編譯dll檔,在有裝visual studio 2008的環境&lt;br /&gt;下會error.&lt;br /&gt;&lt;br /&gt;解決辦法:&lt;br /&gt;1.將visual studio 2005移除掉重新裝visual studio 2008.&lt;br /&gt;2.裝完後跑authoringtool果真error,於是重新編譯dll.&lt;br /&gt;3.在編譯dll時多了錯誤,原來裡面有段程式碼free了已經free過的變數,&lt;br /&gt;於是把這段程式碼拿掉,重新編譯dll.&lt;br /&gt;4.執行authoringtool,可以work了.&lt;br /&gt;&lt;br /&gt;在visual studio 2005下那段程式碼是ok的,&lt;br /&gt;visual studio 2008下卻不work,真令人感到奇怪.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/4/22&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;Features :&lt;br /&gt;1. When open wav file the program will show progressbar which always on top.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S8_PeCtAh8I/AAAAAAAACRw/1XGGSuuuBXY/s1600/progressbar1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 305px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S8_PeCtAh8I/AAAAAAAACRw/1XGGSuuuBXY/s400/progressbar1.png" alt="" id="BLOGGER_PHOTO_ID_5462812988052375490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S8_Porp7fdI/AAAAAAAACR4/f54LcINterg/s1600/progressbar2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S8_Porp7fdI/AAAAAAAACR4/f54LcINterg/s400/progressbar2.png" alt="" id="BLOGGER_PHOTO_ID_5462813170844007890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Can select Partial or Partial Group.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S8_Pzl9v6zI/AAAAAAAACSA/KbQk1rlwq2c/s1600/grouppartial.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 183px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S8_Pzl9v6zI/AAAAAAAACSA/KbQk1rlwq2c/s400/grouppartial.png" alt="" id="BLOGGER_PHOTO_ID_5462813358295083826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/4/15&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;Features :&lt;br /&gt;1. Highlight partial. ( Just move mouse then highlight automatically. )&lt;br /&gt;2. Mouse tooltip shows Pitch and Pitch picture. ( Last week done. )&lt;br /&gt;3. Mouse dragged on specific field can zoom-In or zoom-Out.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S8XmrYuDMfI/AAAAAAAACRY/vckPWHsaylc/s1600/hightlight.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S8XmrYuDMfI/AAAAAAAACRY/vckPWHsaylc/s400/hightlight.bmp" alt="" id="BLOGGER_PHOTO_ID_5460023756300956146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S8Xm1pz4M3I/AAAAAAAACRg/_-VjbuurrFs/s1600/zoom.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 305px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S8Xm1pz4M3I/AAAAAAAACRg/_-VjbuurrFs/s400/zoom.bmp" alt="" id="BLOGGER_PHOTO_ID_5460023932687496050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/4/14&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;Bwv 1007&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S8VSfvPtNFI/AAAAAAAACQ4/_Adp43bG134/s1600/bwv1007.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 62px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S8VSfvPtNFI/AAAAAAAACQ4/_Adp43bG134/s400/bwv1007.png" alt="" id="BLOGGER_PHOTO_ID_5459860828468360274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bwv 992&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S8VSphsw7MI/AAAAAAAACRA/5RlRhDAbCpM/s1600/bwv992.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 62px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S8VSphsw7MI/AAAAAAAACRA/5RlRhDAbCpM/s400/bwv992.png" alt="" id="BLOGGER_PHOTO_ID_5459860996630834370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bwv 846&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S8VUYUJmvNI/AAAAAAAACRQ/AVEA4Gvay_A/s1600/bwv846.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 62px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S8VUYUJmvNI/AAAAAAAACRQ/AVEA4Gvay_A/s400/bwv846.png" alt="" id="BLOGGER_PHOTO_ID_5459862899959184594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;小步舞曲&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S8VSzMJM-xI/AAAAAAAACRI/VUVuFJhts_M/s1600/bach.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 104px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S8VSzMJM-xI/AAAAAAAACRI/VUVuFJhts_M/s400/bach.png" alt="" id="BLOGGER_PHOTO_ID_5459861162643225362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mozart KV.545&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/S8Ugr-tCo7I/AAAAAAAACQw/r6ux92jF9Rc/s1600/kv545.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 62px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/S8Ugr-tCo7I/AAAAAAAACQw/r6ux92jF9Rc/s400/kv545.png" alt="" id="BLOGGER_PHOTO_ID_5459806063194973106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在8度音也是有很多錯誤, Total錯誤0.29, 8度音錯誤0.19, 非8度音錯誤0.097.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/4/7&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;1.新增點與點之間的連線.&lt;br /&gt;2.修正xml顯示格式,可存成xml檔案.&lt;br /&gt;3.解決將partial從中間刪除之後分為兩段partial的問題.&lt;br /&gt;4.解決畫harmonic的連線問題.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/S7waTNCu7KI/AAAAAAAACQo/ngzGLla2XJI/s1600/test2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/S7waTNCu7KI/AAAAAAAACQo/ngzGLla2XJI/s400/test2.png" alt="" id="BLOGGER_PHOTO_ID_5457265765687159970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/3/29&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;新增畫partial的方法,工具列圖示如下：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S7BfGc9CfYI/AAAAAAAACQY/b-gINstccYg/s1600/drawbar.png"&gt;&lt;img style="cursor: pointer; width: 172px; height: 39px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S7BfGc9CfYI/AAAAAAAACQY/b-gINstccYg/s400/drawbar.png" alt="" id="BLOGGER_PHOTO_ID_5453963713201732994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;圖示由左至右分別為&lt;br /&gt;1.畫f0&lt;br /&gt;2.畫泛音&lt;br /&gt;3.畫出整個partial結構&lt;br /&gt;4.擦掉partial&lt;br /&gt;5.擦掉整個partial結構&lt;br /&gt;&lt;br /&gt;畫出整個partial結構就是只要畫出基頻, 其基頻產生的泛音就會自動產生;&lt;br /&gt;目前泛音的算法是取基頻的2倍頻,3倍頻直到8倍頻.&lt;br /&gt;&lt;br /&gt;擦掉整個partial結構就是只要擦掉某一partial,其泛音結構也會一併去掉.&lt;br /&gt;&lt;br /&gt;以下是1,2,3方法的截圖：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S7BhPHPYbkI/AAAAAAAACQg/5QGEj3GyG5I/s1600/test1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 289px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S7BhPHPYbkI/AAAAAAAACQg/5QGEj3GyG5I/s400/test1.png" alt="" id="BLOGGER_PHOTO_ID_5453966061015166530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/3/2&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;實驗Bach - Prelude 1, BVW 846第1,2小節.&lt;br /&gt;&lt;br /&gt;結果：基頻找錯 8%, 多找音 2%, 少找音 5.5%.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zBQqDeIcI/AAAAAAAACPQ/iRMPipVYLlY/s1600-h/errorrate3.png"&gt;&lt;img style="cursor: pointer; width: 324px; height: 155px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zBQqDeIcI/AAAAAAAACPQ/iRMPipVYLlY/s400/errorrate3.png" alt="" id="BLOGGER_PHOTO_ID_5443938541495001538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;註1.基頻找錯:共三個錯誤.兩個錯誤是應為基頻卻標示成泛音,&lt;br /&gt;一個是同一trajectory在某段標示是基頻某段又標成泛音.&lt;br /&gt;&lt;br /&gt;原樂譜：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zAahReCKI/AAAAAAAACO8/vaxnMehl2eY/s1600-h/new1-2staff.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 113px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zAahReCKI/AAAAAAAACO8/vaxnMehl2eY/s400/new1-2staff.png" alt="" id="BLOGGER_PHOTO_ID_5443937611424860322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;對譜圖：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zApZvvmLI/AAAAAAAACPE/YYDjMGwVC00/s1600-h/new1-2%E5%B0%8D%E8%AD%9C2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 247px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S4zApZvvmLI/AAAAAAAACPE/YYDjMGwVC00/s400/new1-2%E5%B0%8D%E8%AD%9C2.png" alt="" id="BLOGGER_PHOTO_ID_5443937867102394546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;對譜圖說明：綠色是少找音,黃色是基頻找錯,重藍色是多找音.&lt;br /&gt;&lt;br /&gt;====================================&lt;br /&gt;&lt;br /&gt;實驗Bach Minuet NO.1:小步舞曲找parital tracking,&lt;br /&gt;音源是由人工方式看譜貼音組成的wav檔.&lt;br /&gt;&lt;br /&gt;結果：沒有發現錯誤情形&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/S4x22Fc-oPI/AAAAAAAACOc/u3sImRKGcEQ/s1600-h/errorrate2.png"&gt;&lt;img style="cursor: pointer; width: 387px; height: 149px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/S4x22Fc-oPI/AAAAAAAACOc/u3sImRKGcEQ/s400/errorrate2.png" alt="" id="BLOGGER_PHOTO_ID_5443856721132822770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;原樂譜：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S4x3CvWT87I/AAAAAAAACOk/9frN9q8pqKg/s1600-h/mark_Minuet01.GIF"&gt;&lt;img style="cursor: pointer; width: 400px; height: 115px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S4x3CvWT87I/AAAAAAAACOk/9frN9q8pqKg/s400/mark_Minuet01.GIF" alt="" id="BLOGGER_PHOTO_ID_5443856938537579442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;對譜圖：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S4x3Nt--ZII/AAAAAAAACOs/68o62tpxEuI/s1600-h/bach1_matlab.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 246px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S4x3Nt--ZII/AAAAAAAACOs/68o62tpxEuI/s400/bach1_matlab.png" alt="" id="BLOGGER_PHOTO_ID_5443857127149823106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/3/1&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;修改音高的功能實作完成.&lt;br /&gt;使用者可以用橡皮擦將不要的音擦掉,&lt;br /&gt;也可以用筆劃出想要的音高,如圖:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/S4vAxtGn0kI/AAAAAAAACN4/wHXxzyz6gF8/s1600-h/screamlab0301.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/S4vAxtGn0kI/AAAAAAAACN4/wHXxzyz6gF8/s400/screamlab0301.bmp" alt="" id="BLOGGER_PHOTO_ID_5443656534760870466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;還需要修改一下xml部分始能完整的存寫檔.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2010/2/25&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;將巴哈無伴奏BWV 1007的用HMM分析並人工對譜看錯誤率.&lt;br /&gt;&lt;br /&gt;結果：多找音的情形較多,錯誤率達15.6%,其他情形錯誤率都在6%以下.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X8X1fL_XI/AAAAAAAACNQ/Gm4G4W0oOBE/s1600-h/errorrate.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 77px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X8X1fL_XI/AAAAAAAACNQ/Gm4G4W0oOBE/s400/errorrate.png" alt="" id="BLOGGER_PHOTO_ID_5442033211172191602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;註1.基頻找錯：應為基頻但顯示為泛音.&lt;br /&gt;註2.多找音：找到不在樂譜上所標記的音高.&lt;br /&gt;註3.少找音：樂譜上有標記音高但對譜結果無顯示.&lt;br /&gt;&lt;br /&gt;附錄:對譜時的圖。&lt;br /&gt;&lt;br /&gt;原樂譜1,2小節：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X9XokA3KI/AAAAAAAACNY/h7SQc7BYFwU/s1600-h/0_10.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 126px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X9XokA3KI/AAAAAAAACNY/h7SQc7BYFwU/s400/0_10.png" alt="" id="BLOGGER_PHOTO_ID_5442034307214400674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;partial tracking結果並標示音高：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S4X-JokqfyI/AAAAAAAACNg/lFG99mjwAd4/s1600-h/1-2%E5%B0%8D%E8%AD%9C.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 186px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S4X-JokqfyI/AAAAAAAACNg/lFG99mjwAd4/s400/1-2%E5%B0%8D%E8%AD%9C.png" alt="" id="BLOGGER_PHOTO_ID_5442035166210588450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;標示出錯誤,綠色為多找音,黃色為少找音,這兩小節沒有基頻找錯：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X-oiNoaWI/AAAAAAAACNo/UuqiCNzA3iY/s1600-h/1-2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 212px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/S4X-oiNoaWI/AAAAAAAACNo/UuqiCNzA3iY/s400/1-2.png" alt="" id="BLOGGER_PHOTO_ID_5442035697079314786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;加入pitch detection的格線,隨時間或頻率範圍不同,&lt;br /&gt;顯示的細密程度也不同.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/S1R_91euhII/AAAAAAAAB8c/f0LvWVdTCQ4/s1600-h/line.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 244px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/S1R_91euhII/AAAAAAAAB8c/f0LvWVdTCQ4/s320/line.jpg" alt="" id="BLOGGER_PHOTO_ID_5428104151192994946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/12/21&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;將wav波形,pitch detection,五線譜3個panel嵌入主視窗,&lt;br /&gt;各個panel可拉中間分隔線調大小.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/Sy-ByV2QANI/AAAAAAAABug/sCKXWIOEsL0/s1600-h/threeinone.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 244px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/Sy-ByV2QANI/AAAAAAAABug/sCKXWIOEsL0/s320/threeinone.bmp" alt="" id="BLOGGER_PHOTO_ID_5417691578608124114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/12/09&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;程式說明 :&lt;br /&gt;&lt;br /&gt;wav檔只須讀入1次,之後調整大小,顯示waveform等都不須再次讀取檔案.&lt;br /&gt;&lt;br /&gt;之後還要做的 :&lt;br /&gt;&lt;br /&gt;xml格式加入&lt;br /&gt;pitch detection的時間軸,頻率軸,放大縮小倍率&lt;br /&gt;wav波形的時間軸,頻率軸&lt;br /&gt;wav頻譜顯示&lt;br /&gt;HMM包成dll&lt;br /&gt;修改五線譜顯示&lt;br /&gt;debug midi parser&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/12/07&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;將pitch detection與五線譜合併視窗,加入可看Wave波形,&lt;br /&gt;pitch detection可調整可視時間範圍,頻率.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SxxmgixoXwI/AAAAAAAABtY/kctY0WVP900/s1600-h/waveform1.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 244px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SxxmgixoXwI/AAAAAAAABtY/kctY0WVP900/s320/waveform1.bmp" alt="" id="BLOGGER_PHOTO_ID_5412313561469312770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SxxmsN1MYwI/AAAAAAAABtg/sKB8Ys63Ru8/s1600-h/waveform2.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 243px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SxxmsN1MYwI/AAAAAAAABtg/sKB8Ys63Ru8/s320/waveform2.bmp" alt="" id="BLOGGER_PHOTO_ID_5412313762005541634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;尚未完成:pitch detection的時間軸,頻率軸,放大縮小倍率;wav波形的時間軸,頻率軸;wav頻譜顯示;HMM包成dll.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/11/20&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;加入wave 的 pitch detection.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/SwajY9zU5OI/AAAAAAAABoI/zSQW33i4f1g/s1600/wav.bmp"&gt;&lt;img style="cursor: pointer; width: 371px; height: 237px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/SwajY9zU5OI/AAAAAAAABoI/zSQW33i4f1g/s320/wav.bmp" alt="" id="BLOGGER_PHOTO_ID_5406188052006888674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/10/22&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;修改繪製音符細節.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/St9I3Nhe6AI/AAAAAAAABi8/IN4yfBjm2vE/s1600-h/midi2.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 305px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/St9I3Nhe6AI/AAAAAAAABi8/IN4yfBjm2vE/s400/midi2.bmp" alt="" id="BLOGGER_PHOTO_ID_5395110991973246978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/10/19&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;已在程式中畫出樂譜,由midi讀檔自動畫出.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/SttSyllQZNI/AAAAAAAABiU/-DP1BzBsClA/s1600-h/midi.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 340px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/SttSyllQZNI/AAAAAAAABiU/-DP1BzBsClA/s400/midi.bmp" alt="" id="BLOGGER_PHOTO_ID_5393996007741613266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;如何將midi資料畫成樂譜：由delta time與pitch來畫出。&lt;br /&gt;&lt;br /&gt;以下為與五線譜的對應關係。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SttTXVB28WI/AAAAAAAABic/KJ0UKo7Lz8k/s1600-h/%E5%B0%8D%E6%87%89%E5%9C%96.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 281px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SttTXVB28WI/AAAAAAAABic/KJ0UKo7Lz8k/s400/%E5%B0%8D%E6%87%89%E5%9C%96.jpg" alt="" id="BLOGGER_PHOTO_ID_5393996638953337186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;接下來要做：將五線譜畫的更完善,xml,pitch detection包近來,會儘快完成.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/09/04&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;現在程式加入midi播放功能,並可分析出Track數目,&lt;br /&gt;&lt;br /&gt;但要從Track中提取資料畫譜,目前還找不到可用程式碼.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;有找到關於midi以16進位開啟的資料分析的ppt,&lt;br /&gt;&lt;br /&gt;裡面有這樣的解說&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/SqCgJqS_9RI/AAAAAAAABRg/hXjl1syIJ-E/s1600-h/midi1.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 302px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/SqCgJqS_9RI/AAAAAAAABRg/hXjl1syIJ-E/s400/midi1.bmp" alt="" id="BLOGGER_PHOTO_ID_5377474042913617170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/SqCgSisp3NI/AAAAAAAABRo/6FxZYrsEQY4/s1600-h/midi2.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 301px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/SqCgSisp3NI/AAAAAAAABRo/6FxZYrsEQY4/s400/midi2.bmp" alt="" id="BLOGGER_PHOTO_ID_5377474195492560082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;我只是舉出其中的兩張投影片,&lt;a href="http://faculty.stut.edu.tw/%7Etang/multi-media/midi.ppt"&gt;全部ppt在此&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;如果真的找不到可用的code話可能要自己利用16進位分析midi再來畫譜,這是最後的方法.&lt;br /&gt;&lt;br /&gt;附上目前程式圖：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8hIvM54kWX0/SqCiYOueW2I/AAAAAAAABRw/GYs_zOJtkqc/s1600-h/midiplayer2.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 324px;" src="http://1.bp.blogspot.com/_8hIvM54kWX0/SqCiYOueW2I/AAAAAAAABRw/GYs_zOJtkqc/s400/midiplayer2.bmp" alt="" id="BLOGGER_PHOTO_ID_5377476492233956194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;點file-&gt;open midi file&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/SqCisoLz4EI/AAAAAAAABR4/ljQIEJRV4Xw/s1600-h/midiplayer3.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 324px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/SqCisoLz4EI/AAAAAAAABR4/ljQIEJRV4Xw/s400/midiplayer3.bmp" alt="" id="BLOGGER_PHOTO_ID_5377476842665271362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;開啟midi音樂檔&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_8hIvM54kWX0/SqCjfMcUdmI/AAAAAAAABSA/yoMFDnIWjV4/s1600-h/midiplayer4.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 265px;" src="http://3.bp.blogspot.com/_8hIvM54kWX0/SqCjfMcUdmI/AAAAAAAABSA/yoMFDnIWjV4/s400/midiplayer4.bmp" alt="" id="BLOGGER_PHOTO_ID_5377477711391651426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;播放時紅圈處顯示此midi檔有9個tracks.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/08/15&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;我新開一個討論串並把舊的文章移到這。&lt;br /&gt;&lt;br /&gt;根據許多軟體的設計我畫了這個草圖：&lt;br /&gt;&lt;br /&gt;功能列下面是工具列，就是有一格一格方塊的。&lt;br /&gt;Wave視窗裡面的軌道要有&lt;span style="visibility: visible;" id="main"&gt;&lt;span style="visibility: visible;" id="topstuff"&gt;frequency， &lt;/span&gt;&lt;/span&gt;&lt;span style="visibility: visible;" id="main"&gt;&lt;span style="visibility: visible;" id="topstuff"&gt;frequency的Harmonics,波形圖,看還需要什麼.&lt;br /&gt;Property可以顯示樂器,及一些詳細資料.&lt;br /&gt;功能要有修改五線譜,修改FF0.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_8hIvM54kWX0/Soauv0A6eHI/AAAAAAAABMQ/C34bTudOD58/s1600-h/DSC02078.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 387px;" src="http://2.bp.blogspot.com/_8hIvM54kWX0/Soauv0A6eHI/AAAAAAAABMQ/C34bTudOD58/s400/DSC02078.JPG" alt="" id="BLOGGER_PHOTO_ID_5370171742125455474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;另外附上其他軟體的介面圖供參考&lt;br /&gt;&lt;br /&gt;學長的二胡軟體&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8hIvM54kWX0/SoawO0gQ-PI/AAAAAAAABMw/blY7V3QEfk4/s1600-h/cool.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 203px;" src="http://4.bp.blogspot.com/_8hIvM54kWX0/SoawO0gQ-PI/AAAAAAAABMw/blY7V3QEfk4/s400/cool.bmp" alt="" id="BLOGGER_PHOTO_ID_5370173374344526066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2009/07/11&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;不免俗的，先來說一下故事。&lt;br /&gt;&lt;br /&gt;由於維城、文森及冠廷近年來在polyphonic music的研究上有了卓越的成果，Cuda的普及正好可解決合成上計算量過高的問題，因此老師便計畫著如何利用它來呈現大家的研究成果。此外，電機系有個同學願意幫我們完成電腦動畫，使其可在畫面上呈現提琴演奏的樣子，還有師大音樂系同學的加入，他們願意幫我們修正分析完錯誤的部份結果，並標記提琴的弓法。最後也最重要的，是冠廷跟小聽加入實作的行列。在天時、地利、人和的條件都滿足的情況下，這個編曲工具的專案便問世了。&lt;br /&gt;&lt;br /&gt;昨天跟冠廷和小聽已討論出大概的系統架構、初步實作之資料格式及功能等等，因此開條Thread來紀錄一下工作事項及進度。目前工作的分配如下：&lt;br /&gt;&lt;br /&gt;冠廷:&lt;br /&gt;&lt;br /&gt;先實作資料格式的I/O，也就是先將文森的結果，按照以下格式紀錄在程式中，輸出的格式暫定為 XML 與 Binary，時間的最小單位是 10ms。註: Track外還會包一層 Group，來代表是同一組 partial group。&lt;br /&gt;&lt;br /&gt;class Track&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;int 樂器id;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;float[] 頻率;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;float[] 能量;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;int 起始單位時間;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;int 持續單位時間;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;Control[] control;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Control&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;int type; //紀錄 control種類, ex: vibrato 就填1&lt;/span&gt;  &lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;int subType; //紀錄 是哪一個子類, ex: vibrato有三種,如果要第二種,就填2&lt;/span&gt;  &lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;string tablePath; //如果type是user define, 會由使用者指定這個路徑&lt;/span&gt;  &lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;int 起始單位時間; //在這個Track的單位時間多少時發生&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;int 持續單位時間;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;小聽:&lt;br /&gt;&lt;br /&gt;使用Java Swing製作GUI，先尋找一下網路上是否已有寫好的函式庫有提供我們所需要的功能。需要的功能細項待補。(我寫的字條放在 Lab …)&lt;br /&gt;&lt;br /&gt;1. 畫waveform的panel (time domain、FFT)&lt;br /&gt;&lt;br /&gt;2. 在波形圖上選取區段，變色效果。&lt;br /&gt;&lt;br /&gt;3. 經由畫筆改變waveform&lt;br /&gt;&lt;br /&gt;4. 可以自由配置視窗的功能&lt;br /&gt;&lt;br /&gt;5. 隨不同視窗，改變工具列。&lt;br /&gt;&lt;br /&gt;6. 屬性頁&lt;br /&gt;&lt;br /&gt;7. midi檔的note number用樂譜形式呈現&lt;br /&gt;&lt;br /&gt;showmin:&lt;br /&gt;&lt;br /&gt;實作擷取一段聲音的 partials 並另存成樂器庫及 OLA additive synthesis。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7044124399939381485-7068218459228271419?l=screamlab-ncku-2008.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://screamlab-ncku-2008.blogspot.com/feeds/7068218459228271419/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7044124399939381485&amp;postID=7068218459228271419' title='48 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7068218459228271419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7044124399939381485/posts/default/7068218459228271419'/><link rel='alternate' type='text/html' href='http://screamlab-ncku-2008.blogspot.com/2009/08/polyphonic-computer-music-authoring.html' title='Polyphonic Computer Music Authoring Tool - 仕偉'/><author><name>Wayne</name><uri>http://www.blogger.com/profile/15482571947842462955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_8hIvM54kWX0/Sf05vNv9xSI/AAAAAAAAAAM/YxCeks-IyqQ/S220/%E5%B0%81%E9%9D%A2%E5%9C%96.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8hIvM54kWX0/TE8ftPOtpPI/AAAAAAAACg0/Vm-ThKn8X8M/s72-c/figure11.png' height='72' width='72'/><thr:total>48</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7044124399939381485.post-6504132679494018543</id><published>2010-07-20T15:28:00.000+08:00</published><updated>2010-07-20T15:29:05.595+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>點字樂譜計劃</title><content type='html'>&lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;&lt;font color="#000080"&gt;&lt;strong&gt;2010/7/15&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#000080" face="微軟正黑體"&gt;這周起，薇慈開始教博丞MusicXML，本來對視障者來說，讀MusicXML是不必要的，雖說規則不複雜，但是檔案會太大，用觸摸器來讀很吃力，不過未來要身為程式設記者的博丞來說，卻是必須的，因為MusicXML才是真正用來記錄樂譜的工具，而不是MIDI與點字樂譜，所以我跟博丞再難也要學。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#000080" face="微軟正黑體"&gt;我們預定再用三星期把MusicXML教完，然後做一次測驗，然後再開始教點字樂譜，同時博丞要專為視障者寫一份MusicXML的教學文件。&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#000080" face="微軟正黑體"&gt;以下是會議記錄:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;【討論事項】&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;博丞媽媽A4紙上寫的Q&amp;amp;A&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;musicXML檔案太大notepad開不起來的問題：基本上太大的musicXML不是要拿來整篇閱讀的，如果是要學習musicXML的格式，拿小的樂曲來看就可以了，其他的就交給轉格式吧。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;輔助學習的方法：一小節為單位，先聽音樂，再導讀&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;【每人待做事項】&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;博丞：學習musicXML、ultraedit 觸摸機是否能正確顯示，改進遊戲規則。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;昇翰：點字樂譜教學文件、自由軟體競賽網站、增加程式功能讓它能無誤轉換巴哈chorales所有的標記&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;薇慈：準備musicXML教學文件與測驗、樂譜導讀(文字)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;櫻芳：從musicXML中拿取資訊，播放一小截的示範教學片段，右手→左手，和絃的話先播個別單音再播和絃。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;接著是昇瀚問博丞一些問題與博丞的解答:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Q1:圖片在點字樂譜上是會直接被忽略嗎?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Ans:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1.目前的技術只能做到被直接忽略圖的部份，也就是遇到圖就拉倒導盲鼠JAWS晴光皆如此。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2.jaws會告訴你有關圖形但無法辨識是啥圖形。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;3.所有screen(螢幕)報讀軟體都無法辨識圖形。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;4.不會顯示成亂碼顯示 grathic 的字。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;5.word在存檔過程中會產生讀到圖形無法處理的狀況。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Q2.符號以及字母有分成半形和全形想問這兩者在數字機上顯示出來是一樣的嗎?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Ans:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1半形和全形所佔的空間不一樣所以兩者在點字機上顯示出來是不一樣的。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2.中文全部是全形英文本來是半形，全形的英文可能是華人發明的為了排版對齊漂亮。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;3.全形佔的空間是半形的2倍。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Q3.點字機一行最多可以顯示多少個中文字呢?如果一行裡面的字數太多的話會發生什麼事情?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;Ans:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1.要看是什麼種類的點字機，以『超點』為例要從大小去討論博丞使用的那台一行有40格(方)，也可以從字注音去討論，超點40格、JAWS 20格、晴光25格。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2.點字靠注音顯示中文字，中文字分聲母、韻母、音調三種各佔一格，故中文字平均每字要3格但也有例外者。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;A沒聲母的字(聲母ㄅ~ㄙ):沒ㄅ~ㄙ的字只有兩格。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;B沒韻母的字:如『師』因點字規定要補上ㄦ韻，所以這種字佔3格。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;C 有2個韻母的字:如『我』點字把2個韻母音造成結合韻所以2個韻母只用一格表示因此這種字算2格。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;補充:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1. 點字機也會有window的概念，如果碰到這種情況要將視窗向右移動，這個通常由螢幕報讀軟體來為你處理，不過我們可以要求點字樂譜一行不要超過點字機的格數。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;2. 英文:在點字顯示的規定中，全形就是半形的字後面加一格空白，數字也是如此規定。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;最後是博丞設計的點字樂譜教學用的小遊戲的規則，不過還有待討論。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1.遊戲說明(instruction)      &lt;br /&gt;2.練習模式(practice mode):       &lt;br /&gt;(1)針對章節練習，章節分段依據為國際視障聯盟點字音樂記譜法委員會主編之新國際點字樂譜教材       &lt;br /&gt;(2)從樂曲中挑選一小節練習，無限制範圍       &lt;br /&gt;(3)完整樂曲練習，無限制範圍       &lt;br /&gt;(4)克服弱點練習，由程式統計出錯率最高的前n種樂譜記號，從裡面隨機挑選練習，且出現機率與出錯率成正向關係       &lt;br /&gt;練習模式讓使用者選擇是否限制時間，以及限制時間長度       &lt;br /&gt;3.生存模式(survival mode)       &lt;br /&gt;讓玩家選擇難度，難度取決於譜的複雜度及答題時間，遊戲方法為程式播出音樂並同步顯示點字樂譜，使用者必須在反映時間內按下正確對應的音方可得分，若連續得分有紅利，歌曲播玩則遊戲結束       &lt;br /&gt;4.挑戰模式(challenging mode)       &lt;br /&gt;使用者選擇難度，程式會配給一個總答題時間，難度越高則總答題時間越短，且重複播放樂曲的次數越少，樂曲越複雜，使用者按鈕指令程式才播放樂曲，時間內答對幾題算幾題分數，單題得分根據南度成正向關係，連續答對有紅利       &lt;br /&gt;5.關卡模式(block mode)       &lt;br /&gt;讓使用者以挑戰模式，但無法命令程式播放樂曲，把樂譜從簡單到難分成n關，在時間內答隊過關，答錯遊戲結束，不過可以有一些答錯機會，得分隨關卡上升而上升       &lt;br /&gt;6.紀錄(records)       &lt;br /&gt;針對每個模式做最佳紀錄，關卡模式中每個關卡也可擁有自己的最佳紀錄，得分與時間有關，就可以列出答題時間與分數&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;font color="#000080" face="微軟正黑體"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;font color="#000080" face="微軟正黑體"&gt;----------------------------------------------------------&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;&lt;font color="#000080"&gt;&lt;strong&gt;2010/6/8&amp;#160; &lt;/strong&gt;&lt;/font&gt;點字樂譜計劃的新起點&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="微軟正黑體"&gt;點字樂譜的計劃從這一次更新起進入一個新的起點。原因有以下幾點:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="微軟正黑體"&gt;1. 薇慈已經將MusicXML的格式標準看完，並且將她對MusicXML的了解寫成一份投影片，我們將在六月底開始請薇慈教給博丞，然
