| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- from matplotlib import pyplot as plt
- from scipy.interpolate import make_interp_spline, BSpline, interp1d
- import numpy as np
- import json
- paper_data = json.loads("""{"version":[4,2],"axesColl":[{"name":"XY","type":"XYAxes","isLogX":false,"isLogY":true,"noRotation":true,"calibrationPoints":[{"px":183.06264501160092,"py":531.0904872389791,"dx":"20","dy":"0.000001","dz":null},{"px":608.352668213457,"py":531.0904872389791,"dx":"80","dy":"0.000001","dz":null},{"px":112.76102088167053,"py":531.0904872389791,"dx":"20","dy":"0.000001","dz":null},{"px":112.76102088167053,"py":31.322505800464036,"dx":"80","dy":"0.1","dz":null}]}],"datasetColl":[{"name":"Default Dataset","axesName":"XY","metadataKeys":[],"colorRGB":[254,217,118,255],"data":[{"x":164.96519721577724,"y":130.16241299303942,"value":[17.446808510638295,0.010259874802734815]},{"x":172.62180974477957,"y":248.491879350348,"value":[18.527004909983635,0.0006718898031722845]},{"x":176.10208816705335,"y":380.7424593967517,"value":[19.01800327332242,0.00003192848214274901]},{"x":188.63109048723896,"y":530.3944315545243,"value":[20.78559738134206,0.0000010161639610601113]},{"x":192.11136890951275,"y":325.75406032482596,"value":[21.27659574468085,0.00011332286579223083]},{"x":195.59164733178653,"y":221.34570765661252,"value":[21.76759410801964,0.0012556997097643925]},{"x":199.76798143851508,"y":146.17169373549882,"value":[22.356792144026187,0.0070953680878704005]}],"autoDetectionData":null},{"name":"Dataset 1","axesName":"XY","metadataKeys":[],"colorRGB":[254,178,76,255],"data":[{"x":235.9628770301624,"y":87.7030162412993,"value":[27.46317512274959,0.027285577346776058]},{"x":240.8352668213457,"y":123.20185614849187,"value":[28.150572831423894,0.012044255069435664]},{"x":243.61948955916472,"y":165.661252900232,"value":[28.54337152209493,0.004528859607187854]},{"x":247.0997679814385,"y":212.99303944315542,"value":[29.03436988543372,0.0015221282750388066]},{"x":250.5800464037123,"y":350.11600928074245,"value":[29.52536824877251,0.00006465244570225917]},{"x":253.3642691415313,"y":369.6055684454756,"value":[29.918166939443537,0.00004126661876040165]},{"x":258.2366589327146,"y":366.8213457076566,"value":[30.60556464811784,0.00004400013804131006]},{"x":261.02088167053364,"y":222.73781902552201,"value":[30.99836333878887,0.0012160689990983098]},{"x":264.5011600928074,"y":164.96519721577724,"value":[31.48936170212766,0.00460206391752514]},{"x":268.67749419953594,"y":116.93735498839906,"value":[32.07855973813421,0.013914065357235975]},{"x":272.1577726218097,"y":79.35034802784222,"value":[32.569558101473,0.033074905136419]}],"autoDetectionData":null},{"name":"Dataset 2","axesName":"XY","metadataKeys":[],"colorRGB":[253,141,60,255],"data":[{"x":307.6566125290023,"y":128.77030162412993,"value":[37.57774140752864,0.010594235871127245]},{"x":310.44083526682135,"y":169.83758700696055,"value":[37.97054009819968,0.004113449104141486]},{"x":313.9211136890951,"y":225.52204176334106,"value":[38.46153846153846,0.001140520416663651]},{"x":317.40139211136886,"y":288.86310904872386,"value":[38.95253682487725,0.0002650930419414064]},{"x":321.57772621809744,"y":350.11600928074245,"value":[39.5417348608838,0.00006465244570225917]},{"x":325.75406032482596,"y":324.36194895591643,"value":[40.13093289689034,0.00011701596684932005]},{"x":328.538283062645,"y":297.21577726218095,"value":[40.52373158756138,0.00021869198627027497]},{"x":332.0185614849188,"y":210.2088167053364,"value":[41.01472995090017,0.0016229547326653054]},{"x":335.4988399071926,"y":144.77958236658932,"value":[41.50572831423896,0.0073266004274566]},{"x":338.97911832946636,"y":98.8399071925754,"value":[41.99672667757775,0.02111118127049228]},{"x":342.45939675174014,"y":67.51740139211137,"value":[42.48772504091654,0.043439319017497674]}],"autoDetectionData":null},{"name":"Dataset 3","axesName":"XY","metadataKeys":[],"colorRGB":[252,78,42,255],"data":[{"x":377.26218097447793,"y":187.9350348027842,"value":[47.39770867430442,0.0027111130800950107]},{"x":383.52668213457076,"y":207.42459396751738,"value":[48.281505728314244,0.0017304599799340562]},{"x":388.399071925754,"y":222.04176334106728,"value":[48.96890343698854,0.0012357254910461397]},{"x":393.96751740139206,"y":222.73781902552201,"value":[49.754500818330605,0.0012160689990983098]},{"x":398.83990719257537,"y":208.12064965197214,"value":[50.44189852700491,0.0017029338239163312]},{"x":404.4083526682134,"y":172.62180974477957,"value":[51.227495908346974,0.003857900077757763]},{"x":409.97679814385145,"y":125.98607888631089,"value":[52.01309328968903,0.011296002792918453]}],"autoDetectionData":null},{"name":"Dataset 4","axesName":"XY","metadataKeys":[],"colorRGB":[227,26,28,255],"data":[{"x":448.9559164733178,"y":70.99767981438515,"value":[57.51227495908347,0.04009258575986748]},{"x":454.5243619489559,"y":87.7030162412993,"value":[58.29787234042554,0.027285577346776058]},{"x":459.39675174013917,"y":108.58468677494199,"value":[58.98527004909984,0.016866287486010993]},{"x":464.2691415313225,"y":122.50580046403711,"value":[59.67266775777415,0.01223893793937604]},{"x":469.8375870069605,"y":116.2412993039443,"value":[60.45826513911621,0.014138971767858145]},{"x":475.40603248259856,"y":89.79118329466357,"value":[61.243862520458265,0.026004097321066073]},{"x":480.9744779582366,"y":54.98839907192575,"value":[62.02945990180032,0.05797372388859533]}],"autoDetectionData":null},{"name":"Dataset 5","axesName":"XY","metadataKeys":[],"colorRGB":[189,0,38,255],"data":[{"x":520.6496519721577,"y":31.322505800464036,"value":[67.62684124386251,0.10000000000000005]},{"x":529.0023201856148,"y":48.72389791183294,"value":[68.80523731587562,0.06697385421828862]},{"x":537.3549883990719,"y":62.64501160092807,"value":[69.98363338788872,0.048599245448549835]},{"x":546.4037122969837,"y":53.59628770301624,"value":[71.26022913256956,0.05986304092518446]}],"autoDetectionData":null}],"measurementColl":[]}""")
- our_data = [
- [(20, 0.0, 0.0), (17.5, 0.0019996666666666774, 0.0006459444444444298), (18.5, 4.500000000000004e-05, 1.4666666666665089e-05), (19.5, 0.0, 0.0), (20.5, 1.766666666666668e-05, 3.722222222221812e-06), (21.5, 0.001215333333333309, 0.0003669444444444324), (22.5, 0.024483333333333746, 0.008243111111111125)],
- # [(30, 0.00020266666666666686, 9.211111111111048e-05), (28.5, 0.0009119999999999813, 0.0002625555555555436), (29.1, 0.00028366666666666693, 0.00010261111111110751), (29.7, 0.00017200000000000014, 7.92777777777772e-05), (30.3, 0.0002683333333333336, 0.00011772222222222091), (30.9, 0.0009733333333333148, 0.00036055555555554713), (31.5, 0.0038960000000000257, 0.00134655555555546)],
- # [(30, 0.0009303333333333145, 0.00033683333333332164), (27.5, 0.030142666666667022, 0.012443611111111115), (28.5, 0.005819333333333381, 0.0022292222222222127), (29.5, 0.001168666666666642, 0.00042133333333332055), (30.5, 0.0010659999999999789, 0.0003790555555555448), (31.5, 0.004766000000000052, 0.0016758333333333263), (32.5, 0.04049600000000058, 0.014672666666666627)],
- # [(30, 0.0012416666666666414, 0.0003967777777777664), (27.5, 0.061959666666666746, 0.02551511111111119), (28.5, 0.010885333333333493, 0.004524833333333336), (29.5, 0.0013946666666666485, 0.00047194444444443164), (30.5, 0.002190666666666671, 0.0007409444444444332), (31.5, 0.019989333333333643, 0.0077212222222222205), (32.5, 0.13108833333333297, 0.05318188888888876)],
- [(30, 3.333333333333336e-07, 5.555555555554944e-08), (27.5, 0.0002596666666666669, 0.00010177777777776975), (28.5, 1.9666666666666683e-05, 6.388888888888222e-06), (29.5, 0.0, 0.0), (30.5, 1.0333333333333342e-05, 3.6666666666663e-06), (31.5, 0.0006993333333333203, 0.00025477777777776806), (32.5, 0.014572000000000208, 0.004864444444444429)],
- [(40, 8.700000000000008e-05, 3.6888888888885305e-05), (38.0, 0.01736333333333361, 0.006314388888888878), (38.8, 0.0012479999999999779, 0.00042011111111109936), (39.6, 0.00010633333333333343, 4.661111111110661e-05), (40.4, 0.00016566666666666683, 6.577777777777206e-05), (41.2, 0.009089333333333458, 0.002625777777777761), (42.0, 0.08047033333333323, 0.027301055555555592)],
- # [(40, 0.0024396666666666716, 0.001061722222222211), (37.5, 0.012072000000000173, 0.004003444444444444), (38.5, 0.003976333333333365, 0.0014394444444444361), (39.5, 0.002181000000000006, 0.0009212222222222075), (40.5, 0.0034046666666666865, 0.0014784999999999933), (41.5, 0.008851333333333473, 0.0036609444444444333), (42.5, 0.02695766666666708, 0.010942000000000009)],
- # [(50, 2.4333333333333353e-05, 1.0666666666665603e-05), (47.5, 0.0001973333333333335, 5.04999999999954e-05), (48.5, 1.733333333333335e-05, 5.999999999999376e-06), (49.5, 1.6000000000000013e-05, 6.833333333332618e-06), (50.5, 3.533333333333336e-05, 1.5388888888887232e-05), (51.5, 0.0002616666666666669, 0.00010138888888888238), (52.5, 0.004791333333333368, 0.0014748888888888826)],
- [(50, 3.6000000000000035e-05, 1.433333333333183e-05), (47.5, 0.0005059999999999932, 0.0001362777777777679), (48.5, 3.26666666666667e-05, 1.361111111110965e-05), (49.5, 2.400000000000002e-05, 8.83333333333236e-06), (50.5, 6.500000000000006e-05, 2.7666666666663655e-05), (51.5, 0.0002986666666666669, 0.00012816666666665632), (52.5, 0.00231233333333334, 0.0008724999999999869)],
- # [(60, 0.0007896666666666543, 0.00022361111111109862), (57.0, 0.6245279999999994, 0.19915005555555576), (58.2, 0.22514400000000115, 0.07012477777777788), (59.4, 0.0037403333333333707, 0.0011121666666666565), (60.6, 0.004800666666666712, 0.001453666666666661), (61.8, 0.2104766666666668, 0.06371105555555566), (63.0, 0.546564666666665, 0.16710033333333296)],
- # [(60, 0.0007853333333333196, 0.00022072222222220976), (57.0, 0.6249653333333324, 0.19926566666666615), (58.2, 0.22497133333333386, 0.07001033333333327), (59.4, 0.0037686666666666953, 0.0011059444444444367), (60.6, 0.004749000000000047, 0.001450833333333326), (61.8, 0.21057733333333403, 0.06388516666666648), (63.0, 0.5471006666666671, 0.1671350555555553)],
- # [(60, 0.00015633333333333347, 3.761111111110734e-05), (57.5, 0.00628366666666673, 0.001582166666666664), (58.5, 0.00022666666666666687, 5.2388888888883635e-05), (59.5, 0.00011966666666666678, 2.93888888888858e-05), (60.5, 0.0002093333333333335, 4.99999999999949e-05), (61.5, 0.0005886666666666567, 0.00014088888888887758), (62.5, 0.005155666666666716, 0.0013153333333333274)],
- [(60, 0.0001636666666666668, 3.9888888888884904e-05), (57.5, 0.006324666666666731, 0.0015830555555555498), (58.5, 0.00023066666666666686, 5.272222222221675e-05), (59.5, 0.00013300000000000012, 3.3999999999996625e-05), (60.5, 0.00020700000000000018, 4.988888888888387e-05), (61.5, 0.0005886666666666572, 0.0001453888888888775), (62.5, 0.005146000000000049, 0.0013228888888888845)],
- # [(70, 0.0003466666666666661, 0.0001083888888888818), (66.5, 0.5017439999999996, 0.18414205555555577), (67.9, 0.391389999999999, 0.14318650000000024), (69.3, 0.009216000000000144, 0.0032334444444444377), (70.7, 0.031277333333333775, 0.010467333333333335), (72.1, 0.7720623333333315, 0.2894073888888886), (73.5, 0.9273500000000003, 0.3777551666666666)],
- [(70, 0.00036533333333333144, 0.00011194444444443689), (67.5, 0.46240266666666857, 0.170000722222222), (68.5, 0.20908533333333415, 0.07540388888888899), (69.5, 0.0016009999999999954, 0.0005524999999999874), (70.5, 0.008598333333333425, 0.002848999999999998), (71.5, 0.48364633333333346, 0.17310361111111097), (72.5, 0.8597466666666661, 0.32964572222222116)],
- # [(80, 0.0005719999999999917, 0.00015333333333332212), (76.0, 0.7385533333333346, 0.2198887777777779), (77.6, 0.5258973333333314, 0.151330777777778), (79.2, 0.017585333333333605, 0.004493666666666677), (80.8, 0.0196263333333336, 0.005534722222222217), (82.4, 0.44000133333333347, 0.13655688888888873), (84.0, 0.6969320000000019, 0.23914611111111148)],
- [(80, 0.0006079999999999903, 0.00016127777777776608), (77.5, 0.551423333333331, 0.15904883333333353), (78.5, 0.20666266666666708, 0.05689427777777778), (79.5, 0.0022790000000000076, 0.0005879444444444302), (80.5, 0.004366000000000043, 0.0011961111111111016), (81.5, 0.17643699999999987, 0.05266427777777783), (82.5, 0.4631110000000016, 0.1443057777777779)],
- # [(90, 0.0021776666666666737, 0.00073283333333332), (85.5, 0.9689666666666698, 0.45916894444444506), (87.3, 0.9534763333333368, 0.4063464999999993), (89.1, 0.7088313333333333, 0.24736038888888914), (90.9, 0.7495620000000002, 0.2611058888888885), (92.7, 0.9510436666666703, 0.41914472222222215), (94.5, 0.9669760000000015, 0.4603561666666666)],
- [(90, 0.0021943333333333454, 0.000741388888888877), (87.5, 0.9494890000000026, 0.3966157222222211), (88.5, 0.9062203333333297, 0.33686000000000055), (89.5, 0.23542466666666775, 0.07671672222222212), (90.5, 0.2694579999999992, 0.08975111111111124), (91.5, 0.9070009999999976, 0.3481464999999999), (92.5, 0.9475020000000038, 0.409159944444444)],
- [(100, 0.01126500000000015, 0.003576222222222221), (95.0, 0.7552149999999974, 0.24928255555555529), (97.0, 0.6405026666666661, 0.19940950000000052), (99.0, 0.09827433333333369, 0.029739944444444427), (101.0, 0.11106333333333403, 0.03412099999999992), (103.0, 0.5554399999999997, 0.1807915000000003), (105.0, 0.6790920000000008, 0.22385516666666705)],
- ]
- def get_smooth(x, y):
- x2 = np.linspace(x.min(), x.max())
- spl = interp1d(x, np.log10(y), kind="quadratic")
- y2 = 10 ** (spl(x2))
- return x2, y2
- if __name__ == '__main__':
- # Distance, SER, BER
- # ber_50km = np.array([
- # (45, 7.986933e-02, 2.754300e-02),
- # (47.5, 9.053333e-04, 2.929444e-04),
- # (50, 5.850000e-04, 1.647222e-04),
- # (52.5, 1.925133e-02, 6.471000e-03),
- # (55, 3.991080e-01, 1.410016e-01),
- # ]).T
- # ber_50km = np.array(sorted([(50.0, 0.0005829999999999917, 0.0001633333333333235), (47.5, 0.0008786666666666502, 0.0002817222222222107), (48.5, 0.0002686666666666669, 7.594444444443886e-05), (49.5, 0.0003976666666666636, 0.00010727777777777011), (50.5, 0.0009003333333333153, 0.0002642222222222107), (51.5, 0.0035226666666666974, 0.0011344444444444364), (52.5, 0.019282000000000243, 0.006489499999999976)], key=lambda x: x[0])).T
- plt.figure(figsize=(5.76, 3.6))
- plt.axline((0, 4e-3), (1, 4e-3), ls='--', color='gray')
- plt.text(95, 10 ** -2.9, 'HD-FEC\nthreshold', color='gray')
- paper_label = True
- for series in paper_data['datasetColl']:
- values = np.array([data['value'] for data in series['data']]).T
- plt.plot(*get_smooth(values[0], values[1]), '-g', **({'label': 'Previous results'} if paper_label else {}))
- plt.plot(values[0], values[1], 'xg')
- paper_label = False
- data = np.transpose(np.array(our_data), (0, 2, 1))
- paper_label = True
- for values in data:
- values[1][np.argwhere(values[1] == 0)] = 1e-8
- plt.plot(*get_smooth(values[0], values[1]), 'b-', **({'label': 'Our results'} if paper_label else {}))
- plt.plot(values[0], values[1], 'xb')
- paper_label = False
- #
- # data_50 = np.array(sorted(ber_50km, key=lambda x: x[0])).T
- # plt.plot(data_50[0], data_50[2], '^b')
- # plt.plot(*get_smooth(data_50[0], data_50[2]), '-b', label="Our results")
- #
- # data_60 = np.array(sorted(ber_60km, key=lambda x: x[0])).T
- # plt.plot(data_60[0], data_60[2], '^b')
- # plt.plot(*get_smooth(data_60[0], data_60[2]), '-b')
- #
- # data_70 = np.array(sorted(ber_70km, key=lambda x: x[0])).T
- # plt.plot(data_70[0], data_70[2], '^b')
- # plt.plot(*get_smooth(data_70[0], data_70[2]), '-b')
- #
- # data_80 = np.array(sorted(ber_80km, key=lambda x: x[0])).T
- # plt.plot(data_80[0], data_80[2], '^b')
- # plt.plot(*get_smooth(data_80[0], data_80[2]), '-b')
- #
- plt.xlabel('Fibre Distance (km)')
- plt.ylabel('BER')
- plt.yscale('log')
- plt.title('Trained neural network transmission performance')
- plt.ylim(1e-6, 0.1)
- plt.xlim(10, 110)
- plt.grid()
- plt.xticks([i*10 for i in range(2, 11)])
- plt.legend(loc="lower right")
- plt.savefig('/home/min/devel/4ycp/final_report/ber_km.pdf', format='pdf')
- plt.show()
- #
|