IMA4 小筆記

客戶的要求如土石流一樣地來, 既然不能遷村, 就要做好防災的準備, 免得不小心就滅村了. 這次的需求是 IMA4, priority 大概第 40 順位.

這個 IMA4 是什麼東西呢? 它是 Apple Quick Time 所支援的 ADPCM 格式. 一般是 1~2 聲道, 左聲道 block 放完才放右聲道 block, 然後反覆左右, 左右 的 blocks 直到檔尾. 每個 block 由 64 個 nibble 所組成, 1 nibble 也就是 1/2 bytes or 4 bits.

為何要選 nibble 為單位呢? 據說是為了要避免 endian 的問題, 只要把 data 以 4 bits 為單位組裝起來, 就可以依據平台來解釋它是 big endian 或是  little endian. Apple 號稱這個設計有 cross-platform 的功效.

[離題一下] 話說 nibble 很像另外一個單字 nipple (奶頭), 有位前同事就把這兩者搞混了, 也誤導了我一陣子.  不過人非聖賢, 孰能無過. 身為一個工程師, 程式沒錯就很偷笑了, 偶爾打印一些 FETAL ERROR, 或是程式裡面命名一些 Globle 變數也是難免的. 反正看久就習慣了, 見怪不怪真可以說是中華文化根深蒂固的一個部分.  哈哈!

name bits structure note
preamble 16 ppppppp piiiiiii

p 代表 9 bits signed predictor,
其中後 6 bits 預設為 0

i 代表 7 bits initial step index.

block 32×8 n1n0 n3n2 …. 左聲道, nibble 0 在 nibble 1 的後面,
但是要先解, 依此類推.
block 32×8 n1n0 n3n2 …. 右聲道, 單聲道就沒有這部分,
換下一個左聲道的 block.

 欲了解 IMA4 的全貌, 最好參考 Apple 的網頁.

http://developer.apple.com/mac/library/technotes/tn/tn1081.html

 

Ring Effect 與 block effect 小檔案

一般在網路上查詢 ring effect, 都會出現日環蝕的那個 ring effeect. 以至於查不到 video processing 裡面的 ring effect. Ring effect 的定義是甚麼呢? 這是由於量化的時候, 高頻 DCT 係數流失, 導致物體的失真, 特別是在物體的邊界. 至於為何叫做 ring effect, 就是指這種失真經常以 ring 或是 hole 的方式出現. 一個實心物體的邊界, 的確會有日環蝕一樣的一圈又一圈的假邊界.

Block effect 的原因則是因為相鄰的 block 可能因為 Q 值不同, 導致以 block size 為單位出現塊狀的 noise. 當然這只會出現在 Q 值 (quantization step size) 很大的時候.

關於  de-ring 的方法, 可以參考這篇論文: http://www.waset.org/ijamcs/v2/v2-1-5.pdf. 在這篇論文裡面, 提到 ring effect 的原因不只是 compression 這一種, 另外也包括了 enhancement,  它也會造成 ring effect. 前者的DCT ring effect 的邊界比較像是有散光的人看到的邊界, 它叫做 outter ring. 後者的 enhancement ring effect 在嚴重的時候, 可能會是一圈又一圈, 類似光環.

無論是 block effect 或是 DCT ring effect, 解碼後處理時都可以使用 low pass filter (LPF) 來改善. 但 enhancement 就和 low pass filter 的目的相反, 只要不做 enhancement 就好了. 或是在做 quantization 時保持邊界 (用 edge detection) 有較小的 Q 值也可以減輕 ring effect.

2011/05/30

原先那篇 de-ring 的論文似乎不見了, 但 wiki 已經有了 ring effect 的說明.

另外, 有人會用蚊子噪聲 (Mosquito noise) 來表達 ring effect. 主要原因是, ring 不完整時, 會顯示成類似 "飛蚊症" 的效果. 

[ref]

1.  http://en.wikipedia.org/wiki/Ringing_artifacts#JPEG