def test_creation(): x = Fxp(1.0, True, 256, 248) y = Fxp(-0.1, True, 128, 96) assert x() == 1.0 assert y() == -0.1 decimal.getcontext().prec = int(np.ceil(math.log10(2**248))) h_decimal = Decimal(1) / Decimal(3) h = Fxp(h_decimal, True, 256, 248) assert h.astype(float) == float(h_decimal) h = Fxp(h_decimal) assert h.astype(float) == float(h_decimal) w_vals = [0.1, 0.2, 0.3, 0.4, 0.5] w = Fxp(w_vals, True, 256, 248) assert (w() == np.array(w_vals)).all()
def test_temp(): x = Fxp(0.5, True, 8, 7) assert x.astype(float) == 0.5
n = np.linspace(0, Nsim - 1, Nsim) t = n / fs A = 5.0 signal = A * np.sin(2 * np.pi * f * t) # plt.figure() # plt.plot(t, signal) # plt.show() # %% signal_q = Fxp(signal, n_word=8, n_frac=1) plt.figure(figsize=(12, 8)) plt.plot(t, signal, color='C0') plt.plot(t, signal_q.astype(float), color='C1') plt.show() # %% plt.figure(figsize=(12, 10)) plt.plot(t, signal, color='C0') roungings = ['floor', 'ceil', 'around', 'fix', 'trunc'] signals = [] for r in roungings: signal_q = Fxp(n_word=8, n_frac=1) signal_q.props['rounding'] = r signal_q.set_val(signal) signals.append(signal_q) plt.plot(t, signal_q.astype(float), label=r) plt.legend()
#%% print('\n--- fxp_like ---') x_ref = Fxp(signed=True, n_word=8, n_frac=4) x1 = fxp_like(x_ref, val=[0.125, 0.25, 0.5, 0.625, 0.75]) y = x1 + x1 print('{} + {} = {}'.format(x1, x1, y)) #%% print('\n--- COMPLEX NUMBERS ---') x = Fxp(0.125 + 1j * 0.25, signed=True, n_word=16, n_frac=14) print(x.info()) print(x) print(x.astype(complex)) print(x.real) print(x.imag) x = Fxp([0.125 + 1j * 0.25, 1.0 - 1j * 1.0], signed=True, n_word=16, n_frac=14) print(x.info()) print(x) print(x.real) print(x.imag) x = Fxp([0.125 + 1j * 0.25, 1.0 - 1j * 1.0], signed=True) print(x.info()) #%% print('\n--- WRAP OVERFLOW ---') x = Fxp(signed=True, n_word=6, n_frac=2)