SISTEMI DI PUNTAMENTO
LA RICERCA DEL MASSIMO NELLE CURVE DI DIRETTIVITA'
1) Generalità
La ricerca del valore massimo in una curva di direttività coincide con la misura del rilevamento del bersaglio.
Se l'analisi della direttività è svolta via software tale ricerca sarà condotta in una matrice dati tipo:
D(a1) = k1 ; D(a2) = k2 ... D(an) = kn dove con:
a1; a2; .... ; an s'individuano le direzioni di puntamento
e con k1; k2; ... kn si quantificano le ampiezze che definiscono i punti della curva.
In questo caso la caratteristica di direttività è costituita da coppie di campioni numerici.
Se detti campioni sono presentati all'operatore, sul video di un P.C. in un sistema cartesiano
o polare, egli potrà individuare il massimo facilmente deducendo la direzione del bersaglio.
Se i dati della matrice sono asserviti ad una routine d'inseguimento del bersaglio o ad un sistema
sonar per la guida autonoma di un vettore, ad esempio,
la ricerca del massimo e la conseguente misura della direzione del bersaglio devono essere svolte
in modo automatico; tale tema sarà oggetto dei seguenti paragrafi.
2) Costruzione di una matrice dati
Vediamo come impostare una matrice dati estrapolandone i valori dalla curva teorica di direttività mostrata
in figura 1; detta curva è relativa ad un sistema di ricezione che impiega le tecniche di correlazione :
L'asse delle ascisse, angolo di puntamento "a", si estende da   a1 = 310°   ad   a21 = 50°  
ed è diviso ad intervalli di 5°; le ordinate, ampiezze k, sono tracciate a passi di 0.1,
la sorgente del segnale è impostata per as = 32°.
Si supponga di esplorare il settore angolare menzionato con un sistema ricevente formato da 21
fasci preformati disposti a 5° l'uno dall'altro:
dal disegno possiamo ricavare facilmente la tabella relativa ai livelli normalizzati in uscita dai
singoli fasci:
a1 = 310°   k1 = - .04
a2 = 315°   k2 = - .02
a3 = 320°   k3 = 0
a4 = 325°   k4 = 0.03
a5 = 330°   k5 = .05
a6 = 335°   k6 = .05
a7 = 340°   k7 = .02
a8 = 345°   k8 = - 0.06
a9 = 350°   k9 = - 0.1
a10 = 355°   k10 = - 0.05
a11 = 0°   k11 = 0.07
a12 = 5°   k12 = .12
a13 = 10°   k13 = - 0.02
a14 = 15°   k14 = - 0.21
a15 = 20°   k15 = - 0.09
a16 = 25°   k16 = 0.48
a17 = 30°   k17 = 0.94
a18 = 35°   k18 = 0.89
a19 = 40°   k19 = 0.33
a20 = 45°   k20 = - 0.15
a21 = 50°   k21 = - 0.20
Le coppie di valori ricavate possono essere tradotte, in linguaggio Visual Basic, in una matrice dati così articolata:
Dim D(21) As Single
D(1) = - .04
D(2) = - .02
D(3) = 0
D(4) = 0.03
D(5) = .05
D(6) = .05
D(7) = .02
D(8) = - 0.06
D(9) = - 0.1
D(10) = - 0.05
D(11) = 0.07
D(12) = .12
D(13) = - 0.02
D(14) = - 0.21
D(15) = - 0.09
D(16) = 0.48
D(17) = 0.94
D(18) = 0.89
D(19) = 0.33
D(20) = - 0.15
D(21) = - 0.20
Una matrice simile può essere formata via software dopo la scansione dei 21 fasci preformati
del ricevitore e può essere, successivamente, scandita da un semplice ciclo For:
For a = 1 to 21
k = D(a)
next a
3) Visualizzazione della matrice sul video operativo
La lettura della matrice con il ciclo For, di cui al punto precedente, può essere collegata
ad una routine grafica per la visualizzazione dei campioni acquisiti dai fasci preformati,
ottenendo l'istogramma mostrato in figura 2:
Il tracciato mostra all'operatore il massimo del segnale sul fascio a17 che coincide con la
direzione di 30° mentre la sorgente è stata impostata per 32°; egli commette inconsapevolmente un
errore di 2° nella valutazione della direzione della sorgente acustica.
L'errore è accettabile in questo caso perchè a priori, disponendo fasci a 5° l'uno dall'altro
senza alcun meccanismo d'interpolazione tra loro, è previsto un errore max = 5°/2.
Il problema relativo all'interpolazione tra i fasci, che riduce sensibilmente gli errori di
puntamento, sarà argomento di altra pagina; procediamo pertanto la nostra analisi con il successivo
paragrafo.
4) La ricerca del valore massimo di una matrice
La ricerca automatica del valore massimo di una matrice, che coincide nella determinazione
della direzione del bersaglio, può essere sviluppata con routine software lasciate
all'inventiva dei tecnici che affrontano questo problema.
Proponiamo di seguito un semplice processo, in linguaggio VB, che ha mostrato notevole "robustezza" nel suo impiego.
Il listato che segue è dimostrativo dell'operatività dell'algoritmo:
'-Dichiarazioni delle matrici-
Dim a(400) As Single 'Matrice principale
Dim bb(400) As Single 'Matrice copiata
Private Sub Command1_Click() ' Avvio routine
'-Costruzione matrice a(x) a valori casuali-
Randomize Timer
For x = 1 To 400
a(x) = Rnd
Next
'-Inserzione valore esterno -
a(333) = Val(Text1.Text)
'-Generazione matrice bb(x) copia di a(x)-
ls = 400
For x = 1 To ls
bb(x) = a(x)
Next x
'-Ricerca del massimo-
For x = 1 To ls
For I = 1 To ls
If bb(x) < bb(I) Then bb(x) = 0
Next I
Next x
'-Stampa coppia valori che individuano il massimo: "x" e " a(x)" -
For x = 1 To ls
If bb(x) > 0 Then Print "x="; x; "a(x)="; bb(x)
Next x
End Sub
Sintesi della procedura
*Ad ogni avvio la routine carica la matrice "a(x)" con 400 valori numerici casuali da 0 ad 1
*Se su a(333) è caricato un valore esterno maggiore di 1, in sostituzione del numero casuale
caricato in precedenza, questo sarà trovato al posto del massimo dei dati casuali
*Il valore di "ls" limita il campo di ricerca entro i 400 campioni
*Si genera la matrice "bb(x)" copia di "a(x)"
*Si impostano due anelli For nidificati per la ricerca del massimo
*Il valore massimo di a(x) viene trovato e visualizzato assieme alla variabile di posizione x
*Il valore massimo di a(x) potrà essere o il più elevato della serie dei 400 campioni casuali o,
nel caso sia stato introdotto un qualsiasi valore maggiore di 1.00001, il numero assegnato ad a(333)
Il seguente eseguibile consente una facile prova della routine illustrata EXE
5) Implementazione del processo di ricerca per l'esempio di figura 2
La routine per la ricerca del massimo dell'ampiezza dei campioni della curva di direttività di
figura 2 è simile a quella illustrata al paragrafo 4):
'-Dichiarazioni delle matrici con indice 21 in vece di 400-
Dim D(21) As Single 'Matrice principale
Dim bb(21) As Single 'Matrice copiata
Private Sub Command1_Click() ' Avvio routine
'-Al posto di (Costruzione matrice a(x) a valori casuali) la matrice D(x) di para.2-
D(1) = - .04
D(2) = - .02
D(3) = 0
D(4) = 0.03
D(5) = .05
D(6) = .05
D(7) = .02
D(8) = - 0.06
D(9) = - 0.1
D(10) = - 0.05
D(11) = 0.07
D(12) = .12
D(13) = - 0.02
D(14) = - 0.21
D(15) = - 0.09
D(16) = 0.48
D(17) = 0.94
D(18) = 0.89
D(19) = 0.33
D(20) = - 0.15
D(21) = - 0.20
'-Generazione matrice bb(x) copia di D(x) con valore ls = 21-
ls = 21
For x = 1 To ls
bb(x) = D(x)
Next x
'-Ricerca del massimo-
For x = 1 To ls
For I = 1 To ls
If bb(x) < bb(I) Then bb(x) = 0
Next I
Next x
'-In fase di prova routine: stampa coppia valori che individuano il massimo: "x" e " D(x)" -
For x = 1 To ls
If bb(x) > 0 Then Print "x="; x; "D(x)="; bb(x)
Next x
'-In fase esecutiva invia i valori : "x" e " D(x)" ad altra routine di calcolo-
For x = 1 To ls
'If bb(x) > 0 Then ...........
Next x
End Sub
Sintesi della procedura
*Ad ogni avvio la routine carica la matrice "D(x)" con i 21 valori numerici riportati in elenco.
In fase operativa detti valori potranno essere caricati da altra routine di scansione fasci
*Il valore di "ls" limita il campo di ricerca entro i 21 campioni
*Si genera la matrice "bb(x)" copia di "D(x)"
*Si impostano due anelli For nidificati per la ricerca del massimo
*Il valore massimo di D(x) viene trovato e visualizzato, in fase di prova, assieme alla variabile x
*L'ultima routine, da definire, invia i dati individuati ad altra parte del programma operativo generale
Concludiamo questa pagina ricordando che il numero dei fasci preformati asserviti a qualsivoglia
sistema idrofonico ricevente può essere determinato in conformità a quanto riportato in P3;
nel caso ora trattato invece, per esporre l'argomento in modo chiaro, tale procedura non è stata volutamente seguita.
Home
Stampa immagine grafica o descrizione testuale