NSAID 小註解

如果直接 Google “NSAID", 將會得到一大串 nonsteroidal anti-inflammatory drug (非類固醇抗發炎藥物) [1] 的搜尋結果, 不過我想要整理的是 Non-Secure Access ID.

根據 [2], 在 ARM 的 trusted media protection platform 當中, 有個 TZASC (Trusted Zone Address Space Controller) 400 把 SOC 的本體和 DDR 隔開來, DDR memory controller (DMC) 接在它和 DDR memory 之間. 因此, 那些 IP 可以存取哪一塊記憶體就會受到管制.

TEEnNSAID

至於圖中那些不同顏色的 IP, 代表處在不同等級的保護. 在 TEE 的字典裡, 最不安全的是 rich domain 例如 APP 們; 再來是 protected domain, 例如 virtual machine. 比較安全的是 trusted domain, 像是 TEE 的 TA (trusted Application); 最安全的是 secure domain, 例如獨立的硬體. 

那些黃色的 IP, 屬於 protected world. 例如 audio, video, HDMI (稱為 master) 有時候可能不需要嚴格保護, 所以他們有個 non-secure 的 access ID, 告訴 TZC 說我要合法存取我自己的那塊記憶體. 至於不合法的存取, 在 TZC 會被過濾掉 – 針對 ID 過濾, 或是只能讀或寫.

另外, 圖中的 GPU 是白色, 這只是舉例. GPU 也可以支援 protected world. ARM 有部分 GPU 可以從外部電路將它切到 protect mode, 另外有一些新型號 GPU 的 protect mode 是內建的.

[REF]

  1. 非類固醇消炎止痛藥- 維基百科,自由的百科全書 – Wikipedia
  2. http://www.iaik.tugraz.at/content/about_iaik/events/ETISS_INTRUST_2013/ETISS/slides/GPTEE_Public.pdf

Far Field Pickup 硬體小整理

此處的 FFP (Far Field Pickup) 專指一段距離以外的人聲的輸入, 通常 5 米之外可以算是 “far". 遠處的ˊ聲音除了變小聲之外, 還會有雜音和回音 (reverberation – 有反射, 反響, 混響…等翻譯) 的問題. 

雜音可能來自平常容易被忽略掉的冷氣機, 隔壁座位的鍵盤敲擊聲或是遠處其他人的交談, 因為主要聲音來源 (人聲) 變小聲了, 這些背景聲就相對成了嚴重干擾. 回音的來源主要則是是牆壁和家具的反射. 如果有影音設備正在播放語者的輸入, 例如用電視打 Skype 時, 回授的聲音 (人聲經由: 麥克風 -> 喇叭 -> 麥克風) 可能變得比發話的聲音更大.

既然有這麼多干擾存在, 第一步當然是選個好的硬體來收音. 在正常環境下, 近距離對著一個好的麥克風講話, 此時的聲壓 (SPL- Sound pressure level) 可以高達 95 dB. 但是到了 far field, SPL 就會下降約 50 dB, 只剩 44 dB [1]. 44 dB 扣掉噪音28 dB, 還剩下 16 dB SNR 可以做語音輸入. 

FF-Microphone

如果換一支原本就只有 55 dB SNR 的麥克風來做 far field pickup 的話, 遠端的音量再扣掉 50 SPL, SNR 就只剩下 ˋˋ44 (S) – 39 (N) = 5 (dB). 這樣要拿來做語音輸入就沒辦法了. 

badFFMicrophone

想到高 SNR, 大家直覺會想到用更高 bit 數的 ADC. 古書有云, SNR = 20log10(2bit). 以 18 bit ADC 為例, 按照公式, 理論 SNR 應該有 20log10(218) = 108 dB. 但考慮到 ADC 的 internal noise, 在 ref [1] 裡面只當它是 96 dB dynamic range (DR). 

根據 ref [2]:

DR = 20 log10(FS/rms noise

18 bit 只是 full scale (FS), 必須考量到實際電路不能理想地反映數學, 以致產生了一定程度的 noise (以 root mean square 計算). 在 ref [3] 裡面提到, 一個 input-referred noise 隨便就可以掉 2.7 bit, 而量化誤差頂多是影響半個 bit 而已.

以 AD7985 這顆 ADC [4] 為例,  它有 16 bit, 數學算出 SNR 是 96 dB, 但實際 SNR (@ 20KHz – 與頻率響應有關) 是 88.5 dB , dynamic range (不特定頻率) 是 89 dB. 因此這三個值的ˋ意義是不同的, 在 far field pickup 的考量中, dynamic range 相對比較重要, 因此 ref [1] 裡面提到的 dB 是指 dynamic range.

當我們的 ADC 有已知的 dynamic range, 那麼還有沒有辦法把再提升呢? 例如能放大一點嗎? 其實這就是 boost 的概念. 在 Windows 作業系統裡面就有 microphone boost, 可以從最小聲的 0dB, 調到最大聲的 +30dB. 

microphoneBoost

然而 “調大聲一點" 也會把噪音調大, 倒是對於抑制內部的噪音有一定效果. 看一下 ref [1] 的這張圖. 圖中的 106 dB 和 96 dB 都是指 dynamic range. 我們可以看到: boost 到一定的程度後, input referred noise 也不會再降低了. 而整個麥克風輸入的 noise floor 是麥克風和 ADC (藍色或是橘色) noise 的加總.

NoiseFloorwithADC

對 106 dB ADC 來說, boost 到 30 dB 才飽和, 而 96 dB ADC boost 到 24 dB 後也就沒有什麼效果了. 另一方面, 不管 boost 多少, 106 dB ADC 的噪音總會比 96 dB ADC 來得小.

實際上, 我們不會把 microphone boost 到極限. 原因在於人聲從 5 公尺外傳過來後, 可能只剩 44~75 dB, 而裝置上的喇叭卻可能直接以 95 dB 灌進麥克風 (例如 Amazon 的 Echo, Google 的 Home 的機構). 所以我們會選擇 SNR 更好的麥克風, dynamic range 更大的 ADC, 並搭配剛剛好的 boost, 以避免破音 – 天花板不變的狀況下, boost 愈多, ADC 的 saturation point (破音點) 愈低.

上述的硬體選擇固然可以降低噪音的干擾, 但是要進一步消除動態 (non-stationary) 的噪音, 還需要 acoustic echo canceling 和  beamforming. 這兩個部分都牽涉很多軟體的演算法. 在這篇短文中就跳過不提了.

[REF]

  1. http://www.edn.com/Pdf/ViewPdf?contentItemId=4438627
  2. http://www.analog.com/en/analog-dialogue/articles/oversampled-adc-pga-dynamic-range.html
  3. http://www.analog.com/en/analog-dialogue/articles/adc-input-noise.html
  4. http://www.analog.com/media/en/technical-documentation/data-sheets/AD7985.pdf

EME 小整理

這裡的 EME 是指 Encrypted Media Extensions, 顧名思義, 它解決加密的媒體 – 主要是視訊的播放的問題, 而且它是一個 extension, 用來擴充 web browser (瀏覽器) 的功能.  這樣一來就可以在 browser 上播有版權、加密過的電影, 而且無須綁定加解密的演算法.

話說, 我們不是用 Adobe Flash plugin 看了好多年的片子了嗎? 為何最近大家都紛紛棄 Flash 而去呢? 一般的看法 [2] 是微軟長久以來把持著桌機的平台和 IE 瀏覽器, 但並未好好支援網頁視訊這個產業, 所以早期的 Youtube 網站才會需要 Adobe Flash Player (其實是 plugin) 來彌補這個技術缺口. 當我們逐漸使用更多的 mobile device, 就應該使用更好的瀏覽器, 自然也就不需要 Adobe 了. 當然, Adobe 得罪 Steve Jobs 那件事應該也是關鍵的一擊.

根據 W3C 的規範, 播放網頁視訊 (HTML5 video) 需要瀏覽器支援 Media Source Extensions (MSE) [3] 技術. 應用程式 (app) 透過 Java script 把影片的 bit stream 送給平台上的解碼器 (decoder, 或者更廣泛的 media codec) 解碼. 再用播放器把解碼後的影片播出來. 

如果片源有 DRM (Digital rights management ) 加密, 就該 EME 上場了. 在 [4] 裡面有相當完整的描述. 正常來說, Media key 不會跟著片源一起送下來, 而是放在網路上的某個伺服器  (license key server). App 可以經由 CDM  (Content Decryption Module) 介面取回 key 來解密片源. 若是 key 會持續變動, 生命週期  (life time) 只在某一段期間  (session) 內, app 就要反覆透過 CDM 去跟 server 要不同的 key ID, 用於新的 session.

CDM 有時候不只涵蓋解密, 也可以順便解碼. 因此 [4] 說到, CDM 可以定義在 browser, OS, HW decoder, firmware decoder, 或是一個獨立的 module. 此外, 這篇文章還提到 common Encryption, clear key, 和 DASH. 有興趣的人可以讀一下 [4] 這篇.

 

[REF]

  1. https://en.wikipedia.org/wiki/Encrypted_Media_Extensions
  2. https://www.cnet.com/news/firefox-tiptoes-toward-a-world-without-adobe-flash/
  3. https://en.wikipedia.org/wiki/Media_Source_Extensions
  4. http://www.html5rocks.com/en/tutorials/eme/basics/
  5. Media/EME – MozillaWiki – Wiki – Mozilla

 

POSIX signal 小整理

做 SOC 軟體的人常常會收到 bug 的 log, 其中一個常見的類型就是 signal XXX, code YYY, fault address ZZZ. 例如:

Fatal signal 11 (SIGSEGV), code 2, fault addr 0x12345678 in tid 12345 (MyTask)

這個 log 是標準 C library 裡面的 signal.h 所定義的 [1].  參考 ref [2], 裡面有較完整的 code No. 說明, 而 ref [3] 有完整的 POSIX signal 定義和歷史沿革; Ref [4] 是把 Unix signal 做成一張表.

取常用的部分, 重新整理如下. 這些都是 core error, 所以會終止程序, 並且產生 core dump.

Signal

No.

Code

No.

Reason

SIGILL

4

ILL_ILLOPC

1

Illegal opcode.

ILL_ILLOPN

2

Illegal operand.

ILL_ILLADR

3

Illegal addressing mode.

ILL_ILLTRP

4

Illegal trap.

ILL_PRVOPC

5

Privileged opcode.

ILL_PRVREG

6

Privileged register.

ILL_COPROC

7

Coprocessor error.

ILL_BADSTK

8

Internal stack error.

SIGFPE

8

FPE_INTDIV

1

Integer divide by zero.

FPE_INTOVF

2

Integer overflow.

FPE_FLTDIV

3

Floating-point divide by zero.

FPE_FLTOVF

4

Floating-point overflow.

FPE_FLTUND

5

Floating-point underflow.

FPE_FLTRES

6

Floating-point inexact result.

FPE_FLTINV

7

Invalid floating-point operation.

FPE_FLTSUB

8

Subscript out of range.

SIGSEGV

11

SEGV_MAPERR

1

Address not mapped to object.

SEGV_ACCERR

2

Invalid permissions for mapped object.

SIGBUS

10

BUS_ADRALN

1

Invalid address alignment.

BUS_ADRERR

2

Nonexistent physical address.

BUS_OBJERR

3

Object-specific hardware error.

SIGTRAP

5

TRAP_BRKPT

1

Process breakpoint.

TRAP_TRACE

2

Process trace trap.

[REF]

  1. https://zh.wikipedia.org/wiki/Signal.h
  2. http://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
  3. http://man7.org/linux/man-pages/man7/signal.7.html
  4. http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm

UPS 快買快裝記

上週六早上, 我一早起來 “拔草測風向", 收 email 看需不需要去加班? ….嗯, 好像一切都在控制之中, 還不錯! 正在得意之際, 9:10 am 那時忽然就停電了! 怎麼回事? 過了一會兒電就來了, 原來是跳電.

雖然只是小小的跳電, 我知道我的部落格主機掛了!  因為以前重灌怕了, 我已經在電腦採用 RAID 1 的設定. 即便如此, 每次不正常關機或是當機, 電腦一定會先說 BCD (Boot Configuration Data) error 開不起來. 這時候讓電腦有電, RAID 狀態就會從 normal 切到 verify, 它自救一段時間之後, 自然而然就恢復正常了. 不過若加上 check disk 這個步驟, 沒有半天的時間搞不定.

以前就曾想要買不斷電系統 (UPS = Uninterruptible Power Supply), 感覺這樣對電腦硬碟比較有保障. 但是畢竟幾年才會發生一次大颱風大地震, 對於突然停電的顧慮, 很容易地就被沖淡了. 這次有點不一樣, 完全不是什麼地震颱風, 充其量是下了一陣暴雨, 說不定只是有人偷接電….不過, 政府選前說不缺電, 選後說 “不保證不缺電", 萬一日後真的缺電了, 會不會變得常常跳電呢? 那是不是應該先買 UPS 概念股呢?

以前飛瑞做 UPS 很有名, 看一下股價適不適合吧!? 不查還好, 一查才發現它早就被併購下市了. 也罷! 我還是自己買一台 UPS 練功吧! 既然飛瑞被買了, 那家比較厲害呢? Google 的結果發現 APC 是世界第一大品牌, 那就是你了!

連飛瑞下市都不知道, 表示我的 database 已經完全不行了! 我發現在有多種規格, 主要是離線式 (off-line), 在線式 (on-line), 在線互動式 (line interleave)…等等選擇! 很快掃描完網路資訊後, 我認為這篇寫得最好 [1]. 雖然它 Google 排名不是很前面, 不過很專業地把我教懂了. “在線互動式" 聽起來很厲害, 但是在線式才是最好的選擇. 由於後者的成本較高, 退而求其次就是買在線互動式.

用簡單幾句話說明, 離線就是指 UPS 的電池平常離線, 外部斷電時才趕快切到電池供電, 在線就是電路永遠經過電池, 互動式就是用電路決定是否經過電池. 這個網站有圖可以看 [2].

再來要決定容量. 我在 1500VA, 1000VA, 700VA 三台當中瞄來瞄去, 不知道我的裝備到底需要幾瓦? 當初我可以買了號稱 900W 的電源供應器, 外加兩個磁碟櫃, 700W 好像不夠捏??? 不過, 等我買了中庸的 1000VA 回家, 它所附的軟體告訴我, 開部落格頂的狀況下頂多只要 120 W…哈!

APC-Watts-768x567

PC 怎麼讀到 UPS 的功耗呢? 主要是靠這根 USB 轉乙太網路的線. USB 端接到電腦, 乙太網路端接到 UPS, 再安裝廠商附的光碟片, 就可以用軟體設定各種使用情境.

bridge-port-1-768x557

以我的需求而言, 主要是希望若上班時間遇到停電, 電腦能夠被正常關機. 電池多大對我其實不重要. 馬上關機都可以, 其他都不用救了. 下圖顯示, 它可以在設定電池剩下幾分鐘電力的時候關機, 最多可選 8 分鐘, 最少是 5 分鐘. 我選多一點以免關不完…

power-off-plan-1-768x571

個人比較重視軟體, 其他硬體開箱事宜, 請看別人的開箱文就好 [3]. 周日凌晨兩點下定, 周一中午 UPS 到貨, 晚上 9 下班, 吃飽飯就趕快把它裝起來, 還順手就寫了這篇記錄, 所以名為"快買快裝". 原本用週日買是希望用到聯邦理財白金卡的 2% 回饋金, but 自從我用這張卡分 6 期繳所得稅之後, 也不算佔它多大便宜, 但現在它在線上購物時就一定刷不過了, 只能在店面用, 形同管制. 所以我還是沒用到它的 2% 回饋…

[REF]

1.  UPS 不斷電系統的基本介紹與採購建議教學

2. http://www.joysong.com.tw/03_11.asp

3. 不斷電系統 APC Back-UPS Pro 1000 體驗測試與介紹 (BR1000G開箱文)