C. Del Turco Inviato 22 Febbraio Segnala Share Inviato 22 Febbraio (modificato) 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: 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 25 Giugno da C. Del Turco Citare Link al commento Condividi su altri siti More sharing options...
Messaggi raccomandati
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.