2008年11月25日 星期二

MDTC estimation - 鈞

====== 2008/12/09 =======

於調整測試kiwi的程式碼時,發現傳入kiwi程式中的MDCT係數都與ISO Ref encoder產生的不相同,一直以為這是之前kiwi告知的系統問題。kiwi曾告知由於其預先產生的MDCT的係數表格太大,因此於VC++的debug mode中會無法完整step trace到真正的那行程式碼。結果剛剛才發現一個要命的小錯誤,原來在ISO Ref encoder的MDCT cofficients是double的指標,而kiwi程式碼所宣告的MDCT cofficients是float指標,難怪一直無法對上。附上重新跑過的vilon_mono.wav的執行結果。

http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081209/violin_mono_Compared.pdf
http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081209/20081209.ppt
http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081209/20081209.rar


====== 2008/12/02 =======
這星期首先釐清需處理的raw data block部分,因為AAC的header為固定長度,以ADTS為例共56 bits,而raw data block組成部分為
id_syn_element(3 bits) + element_instance_tag(4 bits) + global_gain(8 bits) + ics_inf(11~29 bits)
+ section_data + scalefactor_data + pulse(1 bit)+tns(1 bit)+gain_control(1 bit) + spectral_data
+fill element+byte_aligment(AAC version)
因此,假設其特效pulse,tns,gain_control沒開啟,基本上影響 bitrate 的部分為紅色部分。在此,謝謝維城學長的解答有關fill element的部分。亦即於constant bitrate下,是由fill element將剩餘的bitrate補足。

而section_data 是儲存Huffman codebook用於此frame的最佳組合,使spectral_data產生最少的 Huffman code(最少3組,最多49組)。ISO_Ref Code 由 de_scalefactor =common_scalefactor - scalefactor + SF_OFFSET 配合靜音曲線來找出最佳的 scalefactor,ISO_Ref Code於量化的內圈藉由增加scalefactor來提升單一的scalefactor band 的quantization bit數並降低NMR,而於量化的外圈藉由增加common_scalefactor來增加整體的scalefactor進而降低整個frame的全部bit數,以達到原先設定的 bitrate 要求。

因此,以單聲道128kbits的bitrate來看,每個frame可分到128000*1024/44100=2972,扣除固定消耗的 bit數為 56(ADTS)+3+4+8+11+3=85 到 56(ADTS)+3+4+8+29+3=103,故每聲道最多分到 2972-103=2869 bits。附件為加入簡易的 MDCT estimation 的 bit數在不同bitrate下比較。

http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081202/violin_mono.jpg



====== 2008/11/25 =======
計畫總趕不上變化。
原預計將試著AAC轉成以Matlab實作,到了最後於ADTS header要填入整個frame的encoded bit數(以byte為單位)時,對於需加入fill_element方式,ISO Ref encoder與FAAC的做法又不相同.昨天以MSN請教‵「維城」學長,他也沒確定答案.



====== 2008/11/18 =======
工作報告(20081118)
1. 上星期提到ISO AAC Ref encoder於rate contrl計算的bit數與寫出至raw_data_block的資料的差異。這原因是ISO AAC Ref encoder rate control有計入加入header所需的大約bit數(102 bits),但於輸出時,並未加入任何header 資訊,卻只寫出raw_data_block部分,所以會有差異。另外, ISO AAC Ref encoder於計算scalefactor data區段的bit數時,由於皆呼叫同一個function,但於rate control階段並未還原scale factor,所以計算出來的bit數與輸出時,所計算的值有誤差,已更正。2. 這星期嘗試將ISO AAC Ref encoder改寫至MATLAB,以更進一步了解其code的寫法,目前已改寫至error contrl階段,需再加入rate-control與輸出部分。希望藉此更加對於輸出的bit數的掌控,以利後續於MDCT cofficients estimation的比較。
http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081118/20081118.ppt


====== 2008/11/11 =======
工作報告(20081111)
今天的日子不錯,是1111。
昨日下午在實驗室聽到一個有趣的對話。
學弟:我不懂C語言,怎麼辦?
學長:去找你的C語言老師啊!
學弟: ....--------
以下是進度報告:
老師:沒圖沒真相,請貼圖!
研究生:但這星期沒圖 ,怎麼辦 ^^_
老師:...--------
廢話一堆,還是沒圖,不過先測一下上星期的圖. Figure-PE
本週進度是解讀 ISO AAC encoder reference code至量化與編碼。經與 FAAD v2.5交叉比對,ISO AAC encoder 其量化後數值與FAAD是一致,但是其編碼效率是於128 bitrate時,每個frame都編至最高的2972bits,但寫入其raw data block時,卻超過約10多個bits.再與FAAC v1.26比較時,其每個frame才使用1992 bits來編,顯然效率要好很多。再深入查其MDCT cofficient量化後的數值發現有差異。舉例來說MDCT Cofficient=58324.051時,ISO AAC encoder將其編為 quant=166,scafactor=64,而FAAC則編成quant=6,scafactor=150,因而FAAC編的效率高很多。所以需繼續看code來找出答案。
http://ludwig.csie.ncku.edu.tw/members/titmis/AudioMeeting/20081111/20081111.ppt

5 則留言:

匿名 提到...

這是我們這個研究需要注意的嗎? 是不是去其中一種code來改與測數據就好. 除非你要成為真正的AAC專家.

我在想這件事應該早早弄完, 你來加入daphne與DNA這邊會對你的另一篇論文的早日完成比較有幫助. 我是在想, 同樣方式應該套在我們的芳碼也會work. 但是一般擬至少需要兩篇論文再加一些conferences的

好想永遠這樣 提到...

針對fill_element,我訊問同事的了解,大致是在constant bit rate下,做zero padding或稱stuffing,在reference C code裏,decoder端是一個簡單的counter,我想在variable bit rate的情況下,可能就沒有這個element了。

SCREAMLab 提到...

大鈞:

你可以更新一下你的blog文章如我說的規則嗎? 單是進度報告四字很難辨別的.

TITMIS-鈞 提到...

老師:

很抱歉,沒及時更正。因為一直找不到可以修改標題的地方。

TITMIS-鈞 提到...

自問自答。

一直以為電腦已自動登入,但是非如此,所以一直找不到可更改舊文章的地方 :>