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

 

我讀 «證券分析» 第六版 – 損益表 2

在 32 和 33 章, 分別討論存貨和關聯子公司的問題.

所謂的存貨包括原料、半成品、與成品. 在本書的 32 章, 基本上只討論原料的部分. 我想這是因為當時的工業公司產品比較單純的關係. 例如美國橡膠公司和固特異輪胎公司的原料都是橡膠而已. 1925~1927 年橡膠跌價的影響, 兩家的財報處理方式卻完全不同.

美國橡膠公司在 1927 年集中打消盈餘, EPS 1.26. 但 1925 和 1926 年都是大賺, 分別為 14.92 和 10.54. 反觀固特異公司, 三年的 EPS 是 9.45, 3.79, 9.02, 表現比前者穩定許多. 如果我們在 1926 年就判斷美國橡膠是好公司, 固特異是爛公司, 到 1927 年一定會覺得傻眼 (我們新聞台最愛用的名詞之一, 其他包括 “無法接受", “頭低得不能再低"…等等).

那麼, 如果公司受到上游物料跌 (漲) 價的影響後, 應該立刻調整存貨價值嗎? 還是用掉多少原料調整多少? 要反映在業內收入? 還是反映在業外損失? P. 496~497 就在討論這個問題. 書上的結論不見得與近代的法規相符, 但可以參考下面幾個做法:

  1. 在年度終了的時候, 將存貨以 “成本與市價孰低" 的原則入帳.
  2. 以後進先出 (LIFO) 的方式記帳, 進貨買多少錢, 存貨就值多少錢.
  3. 正常庫存量法: 以極低的價錢入帳, 因此未來絕不會跌價.

至於要記錄在業內還是業外? 作者傾向列在業外, 而且無論盈虧都要有一致性. 不能存貨漲價算業內收入, 存貨跌價算業外損失. 這個道理雖然簡單, 但 1930 年代不這樣做的公司非常多, 所以書上的例子才會舉不完.

此外, 閒置的資產 – 例如空著的廠房若完全沒用到, 只會不斷折舊並侵蝕營利. 若將他們賣掉, 豈不是現金和財報兩頭賺?! 1928 年的 New York Transit Company 就是這樣做. 它們的閒置管道線每年都折舊, 導致公司帳面上虧損, 發不出股息. 結果公司把這些管道線賣掉後, 每股可配 72 美元股息, 相當於 1926 和 1927 年平均股價的兩倍.

遞延費用 (例如法律費用, 搬遷費用, 開發費用…等等) 要算在哪一年也是一個課題. 若這個數目不大, 可以不用太認真. 但是影響巨大時, 分析師必須判斷公司的記帳方式會不會造成收益的高估或低估, 例如把以後要支付的費用一次打消 (假設是員工認股權), 該年的收益可能是低估. 但往後幾年的收益實際上是高估, 股價也會因此假象而上漲.

33 章主要講如何用誤導財報, 以及用子公司來做帳.

1929~1930 年期間, Park and Tilford 公司實際上是虧損的, 淨值也在下降. 但他們在資產負債表編造出愈來愈高的商譽來平衡資產的減少. 那麼商譽為何會愈來愈高呢? 他們解釋是因為幫子公司做了許多廣告, 所以子公司愈來愈有價值了…

扯的例子還很多, 像是聯合雪茄公司連鎖店所租的店面上漲了, 這租金的增加應該會侵蝕獲利. 但該公司把租來的資產上漲直接列入 “利潤". 所以房租愈漲, 公司財報愈好看. 作者認為 “假設擁有租賃物的人能從租賃物上獲取資產增值, 這類增值是高度無形的, 那麼將無形資產以高於實際成本的價值標示在資產負債表上的這種做法就違反了會計準則.

P. 508 說到, 就算讓聯合雪茄公司把 (租來的) 房價上漲當作無形資產, 頂多列在資本公積的貸方. 並且公司應該每年以盈利去沖銷這些價值, 直到租約到期要折價完畢. 因為租約一到, 什麼黃金店面價值也歸零了.

許多家煙草公司們共同擁有聯合雪茄公司和那些店面的股權, 因此上述的房租會繳給其中一家美國煙草公司. 在它 1926 年的財報中, 列有房租收入 2.5 M USD, 聯合雪茄現金股息 2.95 M USD, 股票股息 5.34 M USD. 不過聯合雪茄公司股息, 以面值來算只有 1.84 M USD. 換言之, 美國煙草公司是以 “市價" 來計算收入. 高估了聯合雪茄的股價之後, 美國煙草的股價也會被高估, 形成連環虛增.

為了破解這些亂象, 作者提出用公司繳稅的數據來推估真正的獲利, 而不是看財報上的獲利,  更呼籲上市公司的財報非常有必要由註冊會計師進行獨立審計 (p. 505). 可見 100 年前美國股市還相當不健全.

講完聯合雪茄, 接下來 33 章講子公司合併報表的作假. 最近某家也是聯字輩的 IC 設計公司就是被懷疑用關聯子公司作帳. 所以這個章節算是應景. 在過去, 對於 “少數股東權益" 的子公司的財報不用稽核, 所以持股不過半的子公司反而很容易拿來作帳. 

持股比例是否很高並不重要, 重要的是金額的大小. 例如當時杜邦公司持有福特汽車 23% 的股份, 福特賺不賺錢? 對杜邦公司很重要. 它在 1929 年的 EPS 靠福特就能從 6.99 元變成 9.06 元. 到了 1931 年, 杜邦 EPS 只有 0.46 元, 主要是福特害它虧了 1.35 元, 差點轉盈為虧.

作帳的例子可以舉 1925 年的 “西太平鐵路有限公司". 當年度該公司的股息都是靠子公司 “西太平洋鐵路公司" 配給母公司的股息. 這樣看起來好像沒什麼不對? 不過子公司當年只賺了 2.45 M USD, 卻能配給母公司 4.45 MUSD 的股息, 是不是有點怪? 原來是母公司 “捐獻" 子公司 1.5 M USD, 再加上子公司貼老本才湊出這麼多股息可發. 表示實際上這公司已經不太行了.

那麼子公司虧損的話呢? 如果這是暫時的現象, 可以視為業外損失. 但有時子公司的損失也是作帳來的. 1934~1937 年純度麵包公司只有一年虧錢, 其他三年賺錢. 看財報得知, 虧損主要是子公司 (庫什曼之子) 所導致. 那麼把這家子公司賣掉或是結束掉, 公司是否就轉好了? 事實上, 這家子公司每年要提交大量的服務費給母公司, 這才是它虧錢的原因. 這家子公司其實是隱藏虧損用的.

另一個例子是利哈伊公司擁有礦山和鐵路. 其中礦山是虧損的, 而鐵路出租是賺錢的. 如果把礦山賣了, 鐵路就租不出去, 公司虧損會更大. 因此留著虧損的礦山還是有用. 這表示子公司就算不拿來作帳, 也沒辦法用帳面上的數字來衡量其價值.

最後一個例子. 巴恩斯代爾有煤油和生產兩個部門. 其中煤油虧錢但生產部門賺錢. 1938 年, 母公司把煤油部門獨立成一家公司, 因此財報變得漂亮. 但 1939 年證交所要求它更改財報. 主要是部門 spin off 造成公司淨值的下降. 所以切割虧錢部門的利益實際少掉 1/3 以上.

單純的子公司就有許多陷阱在裡面. 關聯子公司 (互為上下游關係等等) 的狀況更為複雜. 如果一家公司沒有關聯子公司, 財報的透明度無疑是比較好的.

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開箱文)