Jump to content

Sonar: Simulazione delle condizioni di variabilità del rapporto segnale/disturbo nella correlazione digitale con routine in Visual Basic


Recommended Posts

Posted (edited)

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

 

sn1.thumb.jpg.d4105494961f081f01b3874573e74438.jpg

La funzione indicata è teorica, il suo compito, una volta tracciata in un sistema di assi cartesiani, è di consentire il controllo tra l’andamento del  sistema di correlazione simulato  via software , oggetto di questa pagina,  e l’andamento  ideale della stessa.

 

L’andamento della C(o), variabile da 0 ad 1, è riportato in figura 1 in funzione del rapporto Si/Ni (rapporto Segnale/Disturbo) variabile da – 60 dB a + 60 dB all’ingresso del correlatore.

 

 

sn2.jpg.488beba51462accf747b59d6e815e9f0.jpg

 

 

 

Il circuito da simulare via software

 

Un circuito elettronico di correlazione con segnali e regolazioni delle condizioni di variabilità del rapporto Segnale/Disturbo si può pensare  diviso in due sezioni:

1) Generatore dei segnali e dei rumori d’ingresso al correlatore in funzione del rapporto Si/Ni

 

2) Schema a blocchi del circuito di correlazione a due stati in funzione della costante d’integrazione RC.

 

 

L’insieme delle due sezioni è riportato in figura 2 come se fosse un circuito fisico reale:

 

 

 sn3.jpg.b73ccc15d198b918b1226653dd1d8595.jpg

 

 

La schermata in Visual Basic:

 

Simulando via software  tutto l’insieme di figura 2 al lancio del programma la schermata sul P.C. si presenta come in figura 3:

 

 sn7.jpg.502b0597e29fb07f25daf4abb2cf6e3a.jpg

 

figura 3

 

Un reticolo cartesiano con ascisse Si/Ni variabili da – 60 dB a + 60 db e ordinate C() variabili da –1 ad 1.

 

Dove i comandi, in basso da sinistra, sono:

 

Pulsante  tracciamento C(o) teorica

 

Pulsante avvio routine di simulazione e tracciamento della C(o) per punti (campioni)

 

Numero dei campioni a calcolo

 

Valore selezionato del beta (è l’analogo della costante di tempo RC si veda:

 

https://it.wikiversity.org/wiki/Integrazione_numerica_per_i_processi_di_correlazione

 

 

Pulsante di reset

 

 

Un esempio:

 

In figura 4 è riportata, sopra la curva teorica di C(o) in rosso, l’andamento campionato a puntini del risultato simulato della tensione d’uscita del correlatore; sono evidenti le ondulazioni del fenomeno a causa della varianza. (la varianza decresce con l’incremento del beta)

I dati impostati sono:

n° campioni = 20000

beta = 100

 

sn6.jpg.fda187f8e665d23bf0a9e2ed3ed12b53.jpg 

figura 4

 

 

Il software di simulazione.

 

Il software di simulazione in Visual Basic è complicato, se ne consiglia lo smembramento in routine complete da fare girare da sole nella ricostruzione, mano a mano, di tutto il programma.

 

Il listato in Visual Basic  che simula il circuito a blocchi di figura 2 è sotto riportato e può essere inserito in ambiente VB con copia/incolla.

 

Le varie funzioni:

-generazione reticolo e presentazione curve di risposta

-tracciamento funzione teorica

-generazione segnali e disturbi

-variazione del rapporto Si/Ni

-correlazione ed integrazione numerica

 

sono evidenziate con note nel listato del programma.

 

Per l’inserimento degli oggetti rispettare la posizione dei tre pulsanti, le List. dei due combo e i label.

 

‘Listato

Dim beta As Integer

 

Private Sub Command3_Click()

Cls

reticolo

End Sub

 

Private Sub Form_Paint()

Label1.Caption = "SIMULATORE DEL PROCESSO DI CORRELAZIONE"

For xi = 0 To 4600 * 2 Step 230 * 2

For yi = 0 To 3200 * 2 Step 20 * 2

PSet (xi, yi)

Next yi

Next xi

For yi = 0 To 3200 * 2 Step 160 * 2

For xi = 0 To 4600 * 2 Step 30 * 2

PSet (xi, yi)

Next xi

Next yi

Line (0, 1600 * 2)-(4600 * 2 + 160, 1600 * 2)

Line (4600, 0)-(4600, 3200 * 2)

End Sub

 

Sub reticolo()

Label1.Caption = "SIMULATORE DEL PROCESSO DI CORRELAZIONE"

For xi = 0 To 4600 * 2 Step 230 * 2

For yi = 0 To 3200 * 2 Step 20 * 2

PSet (xi, yi)

Next yi

Next xi

For yi = 0 To 3200 * 2 Step 160 * 2

For xi = 0 To 4600 * 2 Step 30 * 2

PSet (xi, yi)

Next xi

Next yi

Line (0, 1600 * 2)-(4600 * 2 + 160, 1600 * 2)

Line (4600, 0)-(4600, 3200 * 2)

End Sub

 

 

Private Sub Command1_Click()

'TRACCIA SOLO CURVA TEORICA

For sn = -60 To 60 Step 0.1

sk = sn + 60

'CALCOLO TEORICO Su e Crt SECONDO LA FORMULA CLASSICA CORRELAZ. CLIPPATA

t = 1 / (1 + (1 / (10 ^ ((sn) / 20)) ^ 2))

Su = (2 / 3.14) * Atn(t / Sqr(-t * t + 1)) 'Su normalizzato

PSet (9200 * sk / 120, 3200 - 3200 * Su), vbRed  'per tracciare la Crt=f(Si/Ni)

Next

End Sub

 

Sub fcalcolata()

'TRACCIA SOLO CURVA TEORICA

For sn = -60 To 60 Step 0.1

sk = sn + 60

'CALCOLO TEORICO Su e Crt SECONDO LA FORMULA CLASSICA CORRELAZ. CLIPPATA

t = 1 / (1 + (1 / (10 ^ ((sn) / 20)) ^ 2))

Su = (2 / 3.14) * Atn(t / Sqr(-t * t + 1)) 'Su normalizzato

PSet (9200 * sk / 120, 3200 - 3200 * Su), vbRed  'per tracciare la Crt=f(Si/Ni)

Next

 

End Sub

 

'CORRELAZIONE CLIPPATA AD UN SOLO CANALE

 

Private Sub Command2_Click()

Cls

reticolo

'fcalcolata

beta = 100

If Combo1.Text = "100" Then beta = 100

If Combo1.Text = "200" Then beta = 200

If Combo1.Text = "400" Then beta = 400

If Combo1.Text = "800" Then beta = 800

If Combo1.Text = "1600" Then beta = 1600

If Combo1.Text = "3200" Then beta = 3200

If Combo1.Text = "6400" Then beta = 6400

 

campioni = 20000

If Combo2.Text = "20000" Then campioni = 20000

If Combo2.Text = "200000" Then campioni = 200000

 

For sn = -60 To 60 Step 0.5

 

sx = sn + 60

Cr = 0  '<--- NOTA BENE SI DEVE AZZERARE cr AD OGNI NUOVO VALORE DI Si/Ni

        'AFFINCHE' IL CALCOLO DEI 20000 PUNTI ENTRO L'ANELLO NON RISENTA

        'DI VALORI IN MEM.cr CALCOLATI IN PRECEDENZA

'beta = 4000

Randomize Timer

j = 10 ^ (sn / 20)

For x = 0 To campioni

k1 = Rnd

k2 = Rnd

k3 = Rnd

k4 = Rnd

k5 = Rnd

ka1 = Rnd

ka2 = Rnd

ka3 = Rnd

ka4 = Rnd

ka5 = Rnd

 

ks1 = Rnd

ks2 = Rnd

ks3 = Rnd

ks4 = Rnd

ks5 = Rnd

 

nl1 = (k1 + k2 + k3 + k4 + k5) - 2.5 'rumore scorrelato nl1

nl2 = (ka1 + ka2 + ka3 + ka4 + ka5) - 2.5 'rumore scorrelato nl2

yo = (ks1 + ks2 + ks3 + ks4 + ks5) - 2.5 'sorgente del segnale

Y1 = yo * j + nl1  'primo segnale

Y2 = yo * j + nl2 'secondo segnale

If Y1 > 0 Then n1 = 1 Else n1 = 0 'n1=1^segnale

If Y2 > 0 Then n2 = 1 Else n2 = 0 'n2=2^ segnale

 

c = 1 - (n1 Xor n2)

 

Cr = c + Cr - (Cr / beta) 'varia da 4000 corMax a 2000 Scorrelaz ( sarebbe 0 in anticorr)

Next

 

y = (Cr / beta)

 

ya = y - 0.5

Circle (9200 * sx / 120, 3200 - 3200 * 2 * ya), 10, vbBlue 'per tracciare la cr=f(Si/Ni)

 

Next sn

fine:

End Sub

 

 

 

 

 

 

 

Edited by C. Del Turco
  • C. Del Turco changed the title to Sonar: Simulazione delle condizioni di variabilità del rapporto segnale/disturbo nella correlazione digitale con routine in Visual Basic

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Forum Statistics

    • Total Topics
      45.4k
    • Total Posts
      526.2k
×
×
  • Create New...