2008-09-28 array Raw Data 及 Pass1 檔案格式      黎煥欣

 

NTU array 新的 DAQ 程式是一次可以處理四個 RACK 16 CORR 板送回來的資料. 因為處理能量的關係, 所以稍減了速度. 變成一秒鐘約送出五筆資料. (實際上為 0.2048 秒送一次). 這裡就是描述這些資料如何存放在硬碟中.

 

因為整個系統都是在 WinXP + PC 的環境下執行程式, 所以檔案內除了文字為 ASCII 表示外, 其它需要以一個以上位元組表示的的數字都是用 LSB (least sign byte ) First, 即低位元組在前的表示方式.

 

在系統裡有一個以硬體產生的觸發信號, 會讓所有的 CORR 板都經由 USB 將信號傳回. 在大部份的情況下, 一秒 5 次的取樣, 都會正常的在一筆記錄(RECORD) 中把這一瞬間的資料放至硬碟內. 而形成 raw data file, 因為是以 binary 型式存放, 所以副檔名用 .bin, 檔名都是由程根據電腦的日期時間來命名, 2008-09-07 _12h.bin 即為 2008 9 7 12 時至 13 時所取得的資料.. 而每一 1/5 秒的資料, 長度為 8432 bytes, 我們稱之為 Record. 是檔案裡最大的單位. 整個檔案就是由很多個 Record 組成. 下圖

 

 

Record 則由兩部份組成: Header data.

 

, Header 的組成, 下圖所示 , 它有 128 bytes

 

 

前面的部份是用一堆以 ASCII 本文型式記錄的資料, 包含日期, 時間, 距午夜秒數及 DAQ 程式分別以十進位及十六進位表示的 time tag. 它應該要與 CORR 板送來的一致. 最後則是 16 CORR 板子在這一次送資料時, 送了多少 bytes 的資料過來. 就正確的來說, 應該是 264 bytes. 但在系統 I/O 忙祿時, 有可能會沒送. 因為 USB 保證傳輸的特性. 應該會在下幾次傳送時將資料補滿,  這時就要用一些判斷方式來來搞清楚. 下面是用 pspad 軟體 (或任何直接觀看檔案內部 16 進位碼的程式都可以) 看的 Record header 的內容

 

 

可以很清楚的看到這個 Record 產生的日期時間及 time tag, 一堆保留空間及最後的 16 個板子傳送的位元數. 這時系統裡只接了 8 塊板子. 所以就這 8 塊都送出了 264 bytes 的資料, 其它都是 0, 沒送資料或根本不存在.

 

,資料部份

資料因為是多個 RACK , 多個 FPGA 內多個單元產生的, 所以本質上就會有階層的結構. 在一個 RECORD , 最上層的結構就是 BAND/RACK 架為單位的結構, 每一個 BAND/RACK 包含 4 BOARD(FPGA) 大抵如下圖

 

 

而每一個 FPGA 板所傳出的資料結構都一樣, 所以實際上整個 RECORD 內有 16個一樣的組成, 不過是每四個組成就是一個 BAND 就是了. 而每一個 FPGA BOARD 內的組成如下圖:

 

 

每一個 BOARD 分配了 512 bytes 的空間, 為了讓萬一這次沒有傳送到資料的板子下次補傳還有空間. 後面的 248 bytes 就做為這個用途. 先説正常的 264 位元組的情況. 前面有 AA 55 為前置碼, 表示一個 PACKET 的起頭. 接著是 2 位元組 unsign int16 time tag. 它應該要跟 file header 內的 time tag 要一致. 接著是 256 位元組的觀測資料, 最後是四個位元組的 CRC32 檢查碼. 下圖是一個典型的 one board binary 資料, 可以看到起始碼 AA 55 及時間碼.

 

 

而它與下一個 board 之間的空間就是做為補傳資料用的

 

, 256 位元觀測資料及

如上圖所示, 256 位元組的資料包含了四個頻段的資料, 每一個頻段為 64 位元組. 因為硬體配置的關係. 4 個頻段的處理頻率高低為 4, 1, 3, 2. 這會有些混亂, 程式處理資料時要注意.

 

, 64 位元組的頻段資料

        在一個頻段內 (frequency channel) , 16 對資料. 分別對應在這個頻段內各個 baseline pair 的實部值與虛部值. 這時所傳出的值是 FPGA 內累加器在這一瞬間的值. 真正的干涉強度則是兩次取樣的差值. 這個值將由後處理程式產生. 結構如下圖

 

 

, 完整處理原始的 RAW DATA 其實需要注意的事情很多. 而且有些麻煩. 所以要做第一次的資料清理. 並將內含資料轉換為差值, 代表真正的干涉強度. 在簡單處理的 Pass1Proc 程式處理後 (先將少數錯誤忽略的簡單版本). 產生的 .pass1 , 它還是二進位檔. 結構跟 RAW DATA 很像. 但移除了大部份的內部結構 header, 讓後面的資料檢查程式及處理程式比較容易存取. 最後一個 Record 減為 4352 bytes , 後面就是描述這新的 pass1 資料結構:

 

header中預留的空間比較大, 變為 177 bytes. 預留將來有各種處理的記錄

下圖是一個典型的 pass1 record header, raw data 相較幾乎一樣, 就是變成 256 位元組就是了. .

 

 

 

, Pass1 內部資料結構

 

       Pass1 檔的內容就是要將原始資料變成比較容易處理的型態. 最重要的就是把差值做出來, 同時將 Header 的保留空間加大, 以便未來的處理使用. 檔案的基本結就如下圖 所示就是

 

 

        下圖, 比原始的 RAW DATA 要簡單許多. 同時差值也做好了.

 

 

典型的檔案內容如下圖, 每一個方框框住的是一個 64 位元組的 frequency channel 的資料. 4 64 位元組即為一個 256 位元組的 FPGA 板資料,

 

 

4 FPGA 板資料就構成了一個 Band 的資料. 就是一個 Band 對應的 frequency channel 組成. 如下圖

這些資料都是連續的. 中間並沒有再夾雜 header 及除錯碼. 讓後續程式更方便使用.

 

frequency channel 內部的資料結構則與 RAW DATA 相同, 惟一的差別是內容為差分的 sign int16.

下圖

 

希望這些資料對存取 NTU ARRAY 觀測資料有所用處.

 

若覺得字太小看不清楚, 可以 E-mail 給我, 我再寄 Word 檔......

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 huanhsin 的頭像
    huanhsin

    黎煥欣的工作部落格

    huanhsin 發表在 痞客邦 留言(0) 人氣()