Prima un po 'di background del problema. Ho un trasmettitore e un ricevitore, a proposito, il trasmettitore esiste già e devo sviluppare il ricevitore.
Il trasmettitore trasmette costantemente alcuni dati e lo fa trasmettendo una volta ogni minuto. Trasmette solo una volta per canale ed è saltellante in uno schema pseudo-casuale su 50 canali diversi (ch0 ~ ch49). Quindi, trasmette in un canale diverso ogni minuto. La durata di ogni trasmissione è di circa un paio di millisecondi e anche il passaggio tra i canali del ricevitore è di un paio di millisecondi. Si può tranquillamente presumere che sia la durata della trasmissione sia il tempo di commutazione del canale siano istantanei.
Una volta terminato con tutti i 50 canali, ripete la sequenza nuovamente nello stesso ordine. Quindi l'ordine dei canali è casuale (sconosciuto) ma la sequenza è sempre la stessa.
Un meccanismo di hopping RX automatico standard non può essere implementato perché il trasmettitore non sta trasmettendo alcun preambolo e, a causa di ciò, il ricevitore non può sincronizzarsi con il trasmettitore usando un preambolo trasmesso, quindi questa non è una soluzione .
Ovviamente, il ricevitore non può ricevere dati se non è sintonizzato sul canale corretto.
Quindi l'algoritmo che ho bisogno di sviluppare deve essere in grado di identificare l'ordine dei canali che il trasmettitore sta usando per saltare in modo che il ricevitore e il trasmettitore possano essere sincronizzati.
Ho pensato a una possibile soluzione, ma non so se sia la più efficiente.
Quello che faccio è sintonizzare il ricevitore su ogni canale in una sequenza ordinata, da ch0 a ch49 e registrare il tempo in minuti ogni volta che ricevo i dati, quindi eseguo l'operazione MODULO a tutti i minuti registrati per ottenere la sequenza corretta. Ad esempio, ho il seguente esempio:
Ordered
Pattern
used
for Recorded
channel Time
discovery (Minutes)
0 0
1 33
2 34
3 51
4 78
5 114
6 132
7 181
8 197
9 211
10 217
11 221
12 222
13 265
14 291
15 320
16 323
17 346
18 358
19 380
20 409
21 452
22 494
23 535
24 553
25 556
26 566
27 587
28 605
29 645
30 679
31 724
32 727
33 739
34 769
35 813
36 838
37 854
38 899
39 925
40 926
41 962
42 1007
43 1036
44 1040
45 1048
46 1068
47 1093
48 1142
49 1160
In questo esempio, comincio da ch0 così quando ricevo i dati su ch0 avvio la sequenza "discovery" . Nella tabella sopra si può vedere che una volta che ricevo i dati su ch0, allora salgo su ch1 e aspetto finché non ricevo dati su questo canale.
Essendo su ch1 ricevo dati 33 minuti dopo che è avvenuta la ricezione su ch0 , quindi la ricezione su ch2 è 34 minuti dopo che la ricezione è avvenuta su ch0 , la ricezione su ch3 è 51 minuti dopo la ricezione avvenuta su ch0 e così via. Infine, la ricezione su ch49 è 1160 minuti dopo la ricezione su ch0 .
Infine, quando ho i tempi per tutti i canali, ottengo l'ordine corretto ottenendo il MODULO di Recorded_Time_Minutes MOD 50 .
Dopo aver eseguito questa operazione su ogni Recorded_Time_Minutes nella tabella, ho la sequenza corretta.
Ordered
Pattern
used
for Recorded
channel Time
discovery (Minutes) Time MOD 50
0 0 0
1 33 33
2 34 34
3 51 1
4 78 28
5 114 14
6 132 32
7 181 31
8 197 47
9 211 11
10 217 17
11 221 21
12 222 22
13 265 15
14 291 41
15 320 20
16 323 23
17 346 46
18 358 8
19 380 30
20 409 9
21 452 2
22 494 44
23 535 35
24 553 3
25 556 6
26 566 16
27 587 37
28 605 5
29 645 45
30 679 29
31 724 24
32 727 27
33 739 39
34 769 19
35 813 13
36 838 38
37 854 4
38 899 49
39 925 25
40 926 26
41 962 12
42 1007 7
43 1036 36
44 1040 40
45 1048 48
46 1068 18
47 1093 43
48 1142 42
49 1160 10
Quindi da quell'ultimo elenco, ho ora l'ordine corretto dei canali, per esempio, prima è ch0, poi ch3, poi c21, poi ch24, ecc.
Il problema con questo metodo è che ci vogliono 1160 minuti per completare, cioè 19 ore e 20 minuti !!
In teoria, la minima quantità di tempo che impiegherebbe con questo approccio è di 50 minuti se la sequenza risulta essere in ordine da ch0 a ch49 e il peggio sarebbe 41 ore e 40 minuti se la sequenza è in ordine discendente da ch49 a ch0. Ma nessuno di questi due scenari accadrebbe mai perché, per necessità, il trasmettitore non può trasmettere in due canali adiacenti uno dopo l'altro.
NOVITÀ: osservando l'ordine di trasmissione dei canali per un dispositivo con un analizzatore di spettro, ho scoperto che due canali possono essere adiacenti, quindi l'ipotesi precedente non è più valida.
Quindi vorrei chiedere se qualcuno conosce un metodo più efficiente per ottenere la sequenza corretta di canali .
Grazie mille per l'aiuto !!