Vai al contenuto

Sonar: Generazione e presentazione su P.C.  di segnali a larga banda ed impulsi d’eco variabili in ampiezza e durata.  


C. Del Turco

Messaggi raccomandati

Per eventuali sviluppi compresi nel post: link al calcolatore SONARMATH (per la determinazione dei parametri acustci del sonar)

 

Il software in Visual Basic  disponibile in questo POST è derivato da uno studio generale di simulazioni dei segnali sonar. 

Una  volta copiato ed incollato su sistema operativo VB il programma consente di studiare il comportamento di segnali casuali a banda larga ed impulsi dimensionati agendo sulle routine indicate come:

 

Rem 1 Comando generazione segnali

Rem 2 Temporizzatore base

Rem 3 Routine di carica matrici

 

I dati caricati sul programma originale consentono la visualizzazione su P.C. della figura seguente:

 

beta1.jpg.2d90d5fcb599c230c24f528aac229c4a.jpg

Listato del programma:

 

Rem Generazione e presentazione su P.C. di segnali a banda larga e
'd'impulsi d'eco ad ampieezza e durata variabile
'=====================
Rem INDICE ROUTINE

Rem 1 Comando generazione segnali
Rem 2 Temporizzatore base
Rem 3 Routine di carica matrici
Rem 4 Presentazione video a comando Timer2

'=======================
Rem 5 DICHIARAZIONI MATRICI

Private mde1(900) As Single
Private a(900) As Single

'======================================================
Rem 6 DICHIARAZIONI VARIABILI

Private nts As Integer 'numero progressivo di TX
Private tinta As Single 'colore della presentazione

'=======================================================
Rem 1 Generatore (Command5 che abilita Timer 5 alla routine "misura TS")

Private Sub Command5_Click()

tinta = 65535 ' color giallo

For N = 0 To 900    'pulizia matrice mde1 per n=0,1,2,3,..,900
mde1(N) = 0             'prima di iniziare nuova presentazione
Next N

Timer5.Enabled = True 'si abilita Timer 5 con cadenza 100mSec
                     
End Sub
 '====================================
Rem 2 Temporizzatore base
Private Sub Timer5_Timer()
'CADENZA 100 m Sec.
'normalmente è bloccato
'se abilitato da Command5 chiama la Sub misuraTS
'al ritmo di 100 mSec
misuraTS
End Sub

'==================================
Rem 3 Routine per carica matrice mde1 con segnali casuali e impulso d'eco simulato
Sub misuraTS()
'L'anello For x..., ogni 100mSec. del Timer5, gira per 30 volte;
'aggiustando opportunamente il ritardo intermedio si può portare
' la durata di un giro nell'ordine di 3.3 mSec.(pari a fc  = 300 Hz) tempo
'necessario per campionare in modo da non aver bisogno dell'interpolazione
'sugli impulsi
Static jts

For X = 0 To 29 ' con X=29 l'anello fà 30 giri in modo tale
'che quando jts=900 si chiude tanto il conteggio di jts stesso
',ponendo jts=0, quanto il blocco dell'anello di x

jts = jts + 1 'procede all'acquisizione di 900 campioni ad ampiezza casuale
                    
mde1(jts) = 200 * Rnd 'Carica matrice con valori casuali

'segue generazione eco:
If jts = 401 Then mde1(401) = 1000 + 500 * Rnd '1778 '3162  'eco bersaglio
If jts = 402 Then mde1(402) = 1000 + 500 * Rnd '1778 '3162  'eco bersaglio
If jts = 403 Then mde1(403) = 1000 + 500 * Rnd '1778 '3162  'eco bersaglio
If jts = 404 Then mde1(404) = 1000 + 500 * Rnd '1778 '3162  'eco bersaglio
If jts = 900 Then Timer5.Enabled = False 'blocca il timer
If jts = 900 Then jts = 0 'azzera il conteggio in attesa di nuovo avvio

Next X
End Sub


'=======================================================
Rem 4 'PRESENTAZIONE VIDEO a comando Timer2

Private Sub Timer2_Timer()
'CADENZA 100 m Sec.normalmente libero
'chiama la Sub presentazione
'al ritmo di 100 mSec
presentazione
End Sub

Sub presentazione() 'ad ogni stanghetta verticale gialla sullo schermo del P.C.
'corrisponde il valore di un numero casuale depositato in mde1

If nor = 0 Then nor = 100 Else nor = nor

For X = 0 To 900    'scansione matrice video per n=0,1,2,3,..,900

a(X) = 3.1 - ((1 / 10) * mde1(X) / nor)

'NB tutta la presentazione è di 10512 px
'10528/900=11.69777777
'routine per il tracciamento del video
v = 11.69777777
If tinta = 16776960 And X < 450 Then tinta = 65535

If tinta = 65535 And X < 450 Then tinta = 65535

Line (692 + (v * X), 4800)-(692 + (v * X), 60 + 1500 * a(X))

Line (692 + (v * X), 4800)-(692 + (v * X), 60 + 1500 * a(X)), tinta
'le righe verdi, dello stesso colore del form, occupano sempre la parte
'superiore delle righe gialle fino al limite superiore dello schermo
'in modo che le vaiazioni di lunghezza delle gialle vengono occupate
'istantaneamente dalle righe verdi e non c'è fliccher ne necessità del CLS
If X = t Then colore = vbBlack Else colore = &H8000&
Line (692 + (v * X), 59 + 1500 * a(X))-(692 + (v * X), 1000), colore
Line (692 + (v * t), 59 + 1500 * a(X))-(692 + (v * t), 1000), vbBlack
Next
tempo = Int(t * 3.333)

End Sub


 

 

 

 

Modificato da C. Del Turco
Link al commento
Condividi su altri siti

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitatore
Rispondi a questa discussione...

×   Hai incollato il contenuto con la formattazione.   Rimuovi formattazione

  Sono ammessi al massimo solo 75 emoticon.

×   Il tuo link è stato automaticamente aggiunto.   Mostrare solo il link di collegamento?

×   Il tuo precedente contenuto è stato ripristinato.   Pulisci l'editor

×   Non è possibile incollare direttamente le immagini. Caricare o inserire immagini da URL.

Caricamento...
  • Statistiche forum

    • Discussioni Totali
      45,1k
    • Messaggi Totali
      522,6k
×
×
  • Crea Nuovo...