Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
ΠΠΈΡΠ½Π΅Π²ΡΠΊΠΈΠΉ Π. Π., ΠΠΎΡΡΠ½ΠΎΠΉ Π‘. Π., Π¨Π°Ρ Π½ΠΎΠ²ΠΈΡ Π‘. Π. ΠΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΡ WiMAX. ΠΡΡΡ ΠΊ 4G — Π.: Π’Π΅Ρ Π½ΠΎΡΡΠ΅ΡΠ°, 2010. Π’Π°Π½Π΅Π½Π±Π°ΡΠΌ Π. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ 5-Π΅ ΠΈΠ·Π΄. Π‘ΠΠ±.: ΠΠΈΡΠ΅Ρ, 2012. EPC Radio-Frequency Identity Protocols Generation-2 UHF RFID/ Ed. By EPCglobal Inc, 2015. Self. collision_prob = 0 if tx_slots == 0 else float (self.ncollisions) / tx_slots. Def sim_nrounds (nrounds, tparams, ntags=5, prob_rn16=0.7… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- 1. EPC Radio-Frequency Identity Protocols Generation-2 UHF RFID/ Ed. By EPCglobal Inc, 2015
- 2. Vishnevsky V.M., Larionov A.A., Ivanov R.E. Analysis and Simulation of UHF RFID Vehicle Identification System / Communications in Computer and Information Science (CCIS). Distributed Computer and Communication Networks. Heidelberg: Springer International Publishing AG, 2016. Volume 678
- 3. ΠΠΈΠ½Π½ΠΈΡ Π°Π½ΠΎΠ² Π . Π. (ΠΎΠ±ΡΠ°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ) ΠΠΏΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎΡΠΈΠΊΡΠ°ΡΠΈΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ» Π΄ΠΎΡΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π Π΅ΡΠΏΡΠ±Π»ΠΈΠΊΠΈ Π’Π°ΡΠ°ΡΡΡΠ°Π½). — ΠΠ°Π·Π°Π½Ρ: ΠΠ£ «ΠΠ¦ ΠΠΠ», 2009
- 4. Π. Π. ΠΠΈΡΠ½Π΅Π²ΡΠΊΠΈΠΉ, Π . Π. ΠΠΈΠ½Π½ΠΈΡ Π°Π½ΠΎΠ². ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π° Π°Π²ΡΠΎΠ΄ΠΎΡΠΎΠ³Π°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ RFID-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ Π½ΠΎΠ²Π΅ΠΉΡΠΈΡ Π±Π΅ΡΠΏΡΠΎΠ²ΠΎΠ΄Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ². ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠΈ. 2012. № 1
- 5. ΠΠΈΡΠ½Π΅Π²ΡΠΊΠΈΠΉ Π. Π., ΠΠΎΡΡΠ½ΠΎΠΉ Π‘. Π., Π¨Π°Ρ Π½ΠΎΠ²ΠΈΡ Π‘. Π. ΠΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΡ WiMAX. ΠΡΡΡ ΠΊ 4G — Π.: Π’Π΅Ρ Π½ΠΎΡΡΠ΅ΡΠ°, 2010
- 6. ΠΠΈΡΠ½Π΅Π²ΡΠΊΠΈΠΉ Π. Π., ΠΠΈΠ½Π½ΠΈΡ Π°Π½ΠΎΠ² Π . Π. ΠΠ°ΡΠ΅Π½Ρ № 99 207 ΠΎΡ 10.11.2010 «ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΉ ΠΠΠ Π½Π° Π±Π°Π·Π΅ ΡΠΈΡΠΎΠΊΠΎΠΏΠΎΠ»ΠΎΡΠ½ΡΡ Π±Π΅ΡΠΏΡΠΎΠ²ΠΎΠ΄Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ ΠΈ RFID-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ».
- 7. ΠΠΈΡΠ½Π΅Π²ΡΠΊΠΈΠΉ Π. Π. Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠ΅ΠΉ. — Π.: Π’Π΅Ρ Π½ΠΎΡΡΠ΅ΡΠ°, 2003
- 8. Π’Π°Π½Π΅Π½Π±Π°ΡΠΌ Π. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ 5-Π΅ ΠΈΠ·Π΄. Π‘ΠΠ±.: ΠΠΈΡΠ΅Ρ, 2012
- 9. Π ΠΎΠΌΠ°Π½ΠΎΠ² Π. Π., ΠΡΠ°ΡΠ½ΠΎΠ² Π‘. Π. Π’Π΅ΠΎΡΠΈΡ ΡΠ»Π΅ΠΊΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΈ. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΈΠ³Π½Π°Π»Ρ, ΠΏΠΎΠΌΠ΅Ρ ΠΈ, ΠΈΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π£Π»ΡΡΠ½ΠΎΠ²ΡΠΊ: 2008
- 10. ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ «ΠΠ°ΡΠ°ΠΠ°ΡΡ». «RFID — ΡΠ°Π΄ΠΈΠΎΡΠ°ΡΡΠΎΡΠ½Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ». URL: http://www.datakrat.ru/technology/7942.html (Π΄Π°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ 08.04.2017)
- 11. «RFID. Π§ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅?». ΠΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ RFID — ΠΌΠ΅ΡΠΎΠΊ. URL: http://www.avislab.com/blog/rfid_ru/ (Π΄Π°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ 20.04.2017)
- 12. «ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ RFID». Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ RFID-ΡΠΈΡΡΠ΅ΠΌ. URL: http://megaobuchalka.ru/6/22 860.html (Π΄Π°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ 08.04.2017)
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
import random.
import numpy as np.
from matplotlib import pyplot as plt.
import pandas as pd.
from pandas import DataFrame.
%matplotlib notebook.
class RfidSimulator (object):
def __init__(self, Tquery, Tqrep, Trn16, Tack, Tresp, T1, T2, T3, Q=4):
self.Tquery = Tquery.
self.Tqrep = Tqrep.
self.Trn16 = Trn16.
self.Tack = Tack.
self.Tresp = Tresp.
self.T1 = T1.
self.T2 = T2.
self.T3 = T3.
self.Q = Q.
self.sim_time = 0.
self.nreads = [].
self.ncollisions = 0.
self.nempty_slots = 0.
self.t_read = [].
self.reading_prob = 0.
self.collision_prob = 0.
self.mean_t_read = 0.
def refresh (self):
self.sim_time = 0.
self.nreads = [].
self.ncollisions = 0.
self.nempty_slots = 0.
self.t_read = [].
self.reading_prob = 0.
self.collision_prob = 0.
self.mean_t_read = 0.
def run (self, ntags, nrounds, prob_rn16=0.7, prob_resp=0.7,.
verbose=False):
self.nreads = [0] * ntags.
self.t_read = [0] * ntags.
for i_round in range (nrounds):
reader_slot = 0.
while reader_slot < 2 ** self. Q:
if reader_slot == 0:
self.sim_time += self.Tquery.
tag_slots = [].
for i in range (0, ntags):
tag_slots.append (random.randrange (0, 2 ** self. Q, 1)).
else:
self.sim_time += self.Tqrep.
replying_tags = [].
for i in range (0, len (tag_slots)):
if tag_slots[i] == 0:
replying_tags.append (i).
if verbose:
print («Slot #{}: tag slots: {}, replying tags: {} «.format (.
reader_slot, tag_slots, replying_tags)).
n_resp_tags = len (replying_tags).
test_prob_rn16 = random. uniform (0, 1).
test_prob_resp = random. uniform (0, 1).
if n_resp_tags == 0:
self.sim_time += self. T3.
self.nempty_slots += 1.
elif n_resp_tags == 1:
if test_prob_rn16 < prob_rn16:
self.sim_time += (self.Tack + self. T1 +.
self.Tresp + self. T2).
if test_prob_resp < prob_resp:
for i in replying_tags:
# first time read.
if self. nreads[i] == 0:
self.t_read[i] = self. sim_time.
self.nreads[i] += 1.
else:
self.sim_time += self. T1 + self. T2.
self.ncollisions += 1.
reader_slot += 1.
for i in range (0, len (tag_slots)):
tag_slots[i] -= 1.
if verbose:
p_str = «test_prob_rn16: {}, test_prob_resp: {} nreads: {}» .
print (p_str.format (test_prob_rn16, test_prob_resp,.
self.nreads)).
read_tags = len ([1 for x in self. nreads if x ≠ 0]).
self.reading_prob = float (read_tags) / ntags.
tx_slots = nrounds * 2 ** self. Q — self. nempty_slots.
self.collision_prob = 0 if tx_slots == 0 else float (self.ncollisions) / tx_slots.
for i, tr in enumerate (self.t_read):
if tr == 0:
self.t_read[i] = self. sim_time.
self.mean_t_read = sum (self.t_read) / ntags.
return self. reading_prob, self. collision_prob, self. mean_t_read.
params = [{'Tquery': 209.38, 'Tqrep': 59.38, 'Trn16': 89.84, 'Tack': 150.00,.
'Tresp': 527.34, 'T1': 44.97, 'T2': 78.12, 'T3': 112.31},.
{'Tquery': 406.25, 'Tqrep': 106.25, 'Trn16': 179.69, 'Tack': 287.50,.
'Tresp': 527.34, 'T1': 85.59, 'T2': 156, 'T3': 193.75},.
{'Tquery': 603.13, 'Tqrep': 153.13, 'Trn16': 269.53, 'Tack': 425.00,.
'Tresp': 1582.03, 'T1': 123.86, 'T2': 234.36, 'T3': 310.71},.
{'Tquery': 800.00, 'Tqrep': 200.00, 'Trn16': 359.38, 'Tack': 562.50,.
'Tresp': 2109.38, 'T1': 164.50, 'T2': 312.50, 'T3': 479.45}].
def sim_t_params (ntags, nrounds):
for ps in params:
simulator = RfidSimulator (**ps).
simulator.run (ntags=ntags, nrounds=nrounds).
print_str = ('nreads={} ncollisions={:<3} P_reading={:<7.3} ' +.
'P_collision={:<6.3} mean_t_read={:<5} us').
print (print_str.format (simulator.nreads, simulator. ncollisions,.
simulator.reading_prob, simulator. collision_prob,.
int (simulator.mean_t_read))).
def sim_ntags (ntags, tparams, nrounds=6, prob_rn16=0.7, prob_resp=0.7, n=200):
reading_probs = np. zeros (ntags.shape).
collision_probs = np. zeros (ntags.shape).
mean_treads = np. zeros (ntags.shape).
simulator = RfidSimulator (**tparams).
for i, nt in enumerate (ntags):
rps = np. zeros (n).
cps = np. zeros (n).
trs = np. zeros (n).
for j in range (n):
simulator.refresh ().
rp, cp, tr = simulator. run (nt, nrounds, prob_rn16, prob_resp).
rps[j] = rp.
cps[j] = cp.
trs[j] = tr.
reading_probs[i] = rps. mean ().
collision_probs[i] = cps. mean ().
mean_treads[i] = trs. mean ().
return reading_probs, collision_probs, mean_treads.
def sim_nrounds (nrounds, tparams, ntags=5, prob_rn16=0.7, prob_resp=0.7, n=200):
reading_probs = np. zeros (nrounds.shape).
collision_probs = np. zeros (nrounds.shape).
mean_treads = np. zeros (nrounds.shape).
simulator = RfidSimulator (**tparams).
for i, nr in enumerate (nrounds):
rps = np. zeros (n).
cps = np. zeros (n).
trs = np. zeros (n).
for j in range (n):
simulator.refresh ().
rp, cp, tr = simulator. run (ntags, nr, prob_rn16, prob_resp).
rps[j] = rp.
cps[j] = cp.
trs[j] = tr.
reading_probs[i] = rps. mean ().
collision_probs[i] = cps. mean ().
mean_treads[i] = trs. mean ().
return reading_probs, collision_probs, mean_treads.
def sim_prob (probs, tparams, nrounds=6, ntags=5, n=200):
reading_probs = np. zeros (probs.shape).
collision_probs = np. zeros (probs.shape).
mean_treads = np. zeros (probs.shape).
simulator = RfidSimulator (**tparams).
for i, prob in enumerate (probs):
rps = np. zeros (n).
cps = np. zeros (n).
trs = np. zeros (n).
for j in range (n):
simulator.refresh ().
rp, cp, tr = simulator. run (ntags, nrounds, prob, prob).
rps[j] = rp.
cps[j] = cp.
trs[j] = tr.
reading_probs[i] = rps. mean ().
collision_probs[i] = cps. mean ().
mean_treads[i] = trs. mean ().
return reading_probs, collision_probs, mean_treads.
def show_plots (x, r_probs, c_probs, mean_trs, figno):
plt.figure (figno, figsize=(8,3)).
ax1 = subplot2grid ((1,3), (0,0)).
ax2 = subplot2grid ((1,3), (0,1)).
ax3 = subplot2grid ((1,3), (0,2)).
ax1.plot (x, r_probs, 'g').
ax2.plot (x, c_probs, 'b').
ax3.plot (x, mean_trs, 'r').
ax1.set_title ('reading probability').
ax2.set_title ('collision probability').
ax3.set_title ('mean first read time, us').
ax1.set_yticks (np.arange (0, 1.1, 0.1)).
ax2.set_yticks (np.arange (0, 1, 0.1)).
subplots_adjust (wspace=.4, hspace=0.0).
tight_layout ().
plt.savefig ('{}.png'.format (figno)).