Wednesday, November 6, 2013

dB (Decibel)

 

簡單來說這是能量的比值表示法[1]。

關鍵詞會鎖定在gain/attenuation

amplitude跟power差一個次方。

常見3dB(2), 6dB(4), 20dB(100)

 

我們都知道C語言math.h[8]當中會有log(), log2(), log10()函式可以使用,

而這些函式是如何設計實現呢?

或換言之,在嵌入式系統中,我們該如何在有限的資源裡轉換dB值呢?

這都是一門技術。

這裡先簡單帶過之後有時間再做詳細介紹。

主要是透過Taylor expansion[4]和logarithm rule[3],透過一些誤差犧牲而換取有效的得到轉換值所產生的。

自然函數能利用Taylor expansion來呈現,若要轉換基底就透過一些對數規則[3]做轉換。

透過觀察[4]我們能知道Taylor expansion對於自然對數的呈現,若N級數很大的情況下在-1 ~ 1之間較為精準,若級數較小時-0.5 ~ 0.5較為精確。

 

Reference

[1]http://en.wikipedia.org/wiki/Decibel

http://en.wikipedia.org/wiki/Logarithm

[3]http://www.rapidtables.com/math/algebra/Logarithm.htm

[4]http://en.wikipedia.org/wiki/Taylor_series

http://en.wikipedia.org/wiki/Common_logarithm

[6]http://mathworld.wolfram.com/NaturalLogarithm.html

http://en.wikipedia.org/wiki/Natural_logarithm_of_2

[8]http://www.codecogs.com/library/computing/c/math.h/log.php

http://stackoverflow.com/questions/15967240/fastest-implementation-of-log2int-and-log2float

http://stackoverflow.com/questions/9411823/fast-log2float-x-implementation-c

No comments:

Post a Comment

Register Transfer Level Design with Verilog (1) [ebook]

設計程式之所以有趣不外乎是它的千變萬化,同樣的結果卻有不同的寫法。 但這些不同寫法當中也並沒有分誰對誰錯,也沒有制定標準來規範何事該用何解。 這也就是我們設計者的珍貴!! [1] Primitive Instantiations 在Verilog中最基本的邏輯...