跳轉到內容

模擬與數字轉換/固定字長效應

來自華夏公益教科書,開放書籍,開放世界

實際字長

[編輯 | 編輯原始碼]

眾所周知,計算機系統通常是 16 位、32 位或 64 位。這意味著這些計算機可以輕鬆處理這些長度的資料。然而,較小的硬體和嵌入式計算機可以具有 4 位或 8 位的字長!如果我們有一個解析度為 12 位的轉換器,並將它連線到嵌入式控制器的 8 位輸入匯流排,那麼我們就會遇到一個嚴重的問題!我們的訊號的全部 4 位必須被截斷。

此外,轉換器通常是預先包裝的,具有固定數量的不可協商的解析度位。這意味著如果你需要一個解析度為 13 位的轉換器,你將不得不使用一個只有 12 位的轉換器,或者一個 16 位的轉換器!

以下列出了幾種常見的 ADC 轉換器解析度長度。

  • 4
  • 8
  • 12
  • 16
  • 24
  • 32

假設我們有一個 12 位轉換器,我們需要將資料輸出到一個 8 位匯流排。我們可以忽略底部的 4 位,或者頂部的 4 位,或者我們可以忽略兩者的一些組合。如果我們忽略來自字底部的位,我們實際上是在向下舍入訊號,並且訊號將缺乏細節。

舍入誤差是指在計算中使用的數字近似值與其精確(正確)值之間的差異。在某些型別的計算中,舍入誤差可能會被放大,因為任何初始誤差都將被傳遞到一個或多箇中間步驟中。

溫哥華證券交易所(McCullough 和 Vinod 1999)設計的一個短暫的指數提供了舍入誤差的一個極端的例子。該指數在 1982 年成立時被賦予了 1000.000 的值。在經歷了 22 個月的重新計算指數並在每次市場價值變化時將其截斷到小數點後三位後,該指數變成了 524.881,儘管其“真實”值應該是 1009.811。

還可能發生其他型別的舍入誤差。一個臭名昭著的例子是 1996 年 6 月 4 日發射的阿麗亞娜火箭的命運(歐洲航天局 1996)。在飛行第 37 秒時,慣性參考系統試圖將一個 64 位浮點數轉換為一個 16 位數,但反而觸發了一個溢位錯誤,該錯誤被制導系統解釋為飛行資料,導致火箭偏離航線並被摧毀。

海灣戰爭期間使用的愛國者導彈防禦系統也因舍入誤差而失效(Skeel 1992,美國政府問責局 1992)。該系統使用一個整型定時器暫存器,該暫存器以 0.1 秒的間隔遞增。但是,整數透過乘以 0.1 的二進位制近似值 0.00011001100110011001100_2=(209715)/(2097152) 轉換為十進位制數。

因此,在 100 小時(3.6×10^6 個滴答)之後,積累了 (1/(10)-(209715)/(2097152))(3600·100·10)=(5625)/(16384) 大約 0.3433 秒的誤差。

這種差異導致愛國者系統不斷地自我迴圈,而不是正確地瞄準目標。結果,一枚伊拉克飛毛腿導彈沒有被瞄準,被允許在軍營中爆炸,造成 28 人死亡。

簡單地忽略字的兩端的一些位被稱為截斷,但是當我們從字的 LSB 側截斷位時,我們將這種操作稱為“舍入”。當我們從機器字的頂部截斷位時,我們可能會丟失大量資料。例如,如果我們有位模式 101001,並且我們截斷兩個 MSB 位,我們就會得到位模式 1001。讓我們將它轉換為十進位制。

  • 101001(二進位制)= 41(十進位制)
  • 1001(二進位制)= 9(十進位制)

9 和 41 之間存在很大差異。正如我們所看到的,我們所有最高的值看起來都是低值,輸出將毫無意義。另一種選擇稱為飽和。飽和類似於舍入,除了我們向上舍入。我們截斷頂部的位,如果它們不為零,那麼我們將數字的其餘部分向上舍入到最大值。例如,如果我們有與上面相同的位模式(101001),並且我們截斷兩個 MSB 位,然後我們進行飽和,我們將得到值 1111。現在,我們可以將此值定義為溢位條件,並且不會累積不必要的誤差。

頻譜效應

[編輯 | 編輯原始碼]
華夏公益教科書