簡體   English   中英

將浮點數轉換為定點數

[英]Convert floating point to fixed point

我想將浮點 sin 值轉換為定點值。

import numpy as np

Fs = 8000
f = 5
sample = 8000
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)

如何輕松地將此y浮點樣本轉換為定點樣本?

每個元素應該是 16 位和 1 位整數部分,15 位應該是小數部分,以便我可以將這些樣本傳遞給 DAC 芯片。

要將樣本從float轉換為Q1.15 ,請將樣本乘以2 ** 15 但是,如評論中所述,您不能在Q1.15表示1.0 ,因為 LSB 表示符號。 因此,您應該將值限制在[-1, MAX_Q1_15]范圍內,其中MAX_Q1_15 = 1.0 - (2 ** -15) 這可以通過一些有用的 numpy 函數來完成。

y_clamped = np.clip(y, -1.0, float.fromhex("0x0.fffe"))
y_fixed = np.multiply(y_clamped, 32768).astype(np.int16)

盡管您可能擔心這種表示不能准確表示1.0的值,但它足以進行計算。 例如,如果您要平方1.0

fmul_16x16 = lambda x, y: x * y >> 15
fmul_16x16(32767, 32767) # Result --> 32766

這是非常接近的,有 1 位錯誤。

希望它有幫助。

您可以使用fxpmath將浮點值轉換為小數定點。 它支持 Numpy 數組作為輸入,因此:

from fxpmath import Fxp

# your example code here

y_fxp = Fxp(y, signed=True, n_word=16, n_frac=15)

# plotting code here

eQ16.15

小數的 15 位為您提供了非常低的幅度分辨率值,因此我繪制 Q5.4 以誇張的方式顯示轉換:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM