Commit d4f11b41 authored by Joanne Hugé's avatar Joanne Hugé

Add ors-tx-interpolation script

parent 81eb8423
import scipy.interpolate
import numpy as np
from matplotlib import pyplot as plt
def fit_data(data, d, s):
xs = [x[0] for x in data]
dbm_ys = [x[1] for x in data]
fit_xs_ys(xs, dbm_ys, s + " (dBM)", d)
def fit_xs_ys(xs, ys, s, d):
p = np.poly1d(np.polyfit(xs, ys, deg=d))
max_error = 0
for i in range(len(ys)):
py = p(xs[i])
y = ys[i]
error = abs(py - y)
max_error = error if error > max_error else max_error
f = "lambda x: ({}) * x**2 + ({}) * x + ({})".format(*p.coefficients)
print("{} max error is {}".format(s, max_error))
print(f)
#x = np.linspace(30, 90, 100)
#plt.plot(x, p(x))
#plt.show()
def fit_xs_ys_spline(xs, ys, s):
p = scipy.interpolate.CubicSpline(xs, ys)
max_error = 0
for i in range(len(ys)):
py = p(xs[i])
y = ys[i]
d = abs(py - y)
error = (100 * d) / y
max_error = error if error > max_error else max_error
print("{}: {} (max error: {}%)".format(s, p, max_error))
x = np.linspace(30, 90, 100)
plt.plot(x, p(x))
plt.show()
b42_1w_data = [
(60, 3.2, 1.92),
(70, 13.7, 2.03),
(75, 18.9, 2.21),
(80, 24.8, 2.44),
(81, 26.3, 2.96),
(82, 27.6, 3.85),
(83, 28.3, 4.70),
(84, 29.3, 7.30),
]
b43_1w_data = [
(60, 3, 1.9),
(70, 13, 1.4),
(80, 23, 2.6),
(81, 24, 3.2),
(83, 26, 6.0),
(85, 27, 9.5),
]
b39_1w_data = [
(60, 1.3, 1.53),
(70, 11.3, 1.07),
(80, 20.4, 1.42),
(81, 21.2, 1.45),
(82, 22.1, 1.46),
(83, 23.0, 1.45),
(84, 24.0, 1.45),
(85, 24.9, 1.53),
(86, 25.9, 1.82),
(87, 26.7, 2.39),
(88, 27.5, 3.13),
(89, 28.4, 4.45),
]
b38_1w_data = [
(60, 0, 1.81),
(65, 5.0, 1.37),
(70, 10.5, 1.30),
(73, 13.5, 1.27),
(76, 16.1, 1.30),
(78, 18.2, 1.34),
(80, 20.2, 1.38),
(81, 21.1, 1.42),
(82, 21.9, 1.42),
(83, 22.6, 1.44),
(84, 23.3, 1.45),
(85, 24.2, 1.50),
(86, 25.3, 1.48),
(87, 26.2, 1.59),
(88, 27.0, 1.89),
(89, 28.1, 3.00),
]
b43_500mw_data = [
(60, 2.5, 1.77),
(70, 13.7, 1.82),
(73, 16.6, 1.97),
(74, 17.6, 2.07),
(75, 18.5, 2.51),
(76, 19.4, 3.77),
(77, 20.2, 6.17),
(78, 20.9, 8.81),
(79, 21.4, 10.6),
]
b38_500mw_data = [
(60, 6.3, 1.29),
(65, 11.6, 1.18),
(70, 16.6, 1.23),
(73, 19.6, 1.21),
(75, 21.6, 1.23),
(76, 22.5, 1.40),
(77, 23.4, 1.97),
(78, 24.3, 3.21),
(79, 25.0, 5.16),
(80, 25.7, 7.87),
(81, 26.2, 9.58),
]
fit_data(b42_1w_data, 2, "B42 2x1W")
fit_data(b43_1w_data, 2, "B43 2x1W")
fit_data(b39_1w_data, 2, "B39 2x1W")
fit_data(b38_1w_data, 2, "B38 2x1W")
fit_data(b43_500mw_data, 2, "B43 2x0.5W")
fit_data(b38_500mw_data, 2, "B38 2x0.5W")
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment