Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Chi riesce a replicare l' immagine?

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[11] Re: Sfida. Chi sa replicare l' immagine?

Messaggioda Foto UtenteMarcoD » 6 lug 2024, 18:37

Provando ad adoperare l'oscillo, ho creato le immagini curiose che servono a capire come probabilmente funziona internamente.
Sarei curioso di vedere le immagini simili generate da altri oscilloscopi. :-) O_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[12] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteMax2433BO » 7 lug 2024, 12:38

Con le vostre figure, mi è tornato in mente questo sito e video simili a questo:

Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

La gentilezza dovrebbe diventare lo stile naturale della vita, non l'eccezione [Siddhārtha Gautama]
Avatar utente
Foto UtenteMax2433BO
18,6k 4 11 13
G.Master EY
G.Master EY
 
Messaggi: 4724
Iscritto il: 25 set 2013, 16:29
Località: Universo - Via Lattea - Sistema Solare - Terzo pianeta...

3
voti

[13] Re: Sfida. Chi sa replicare l' immagine?

Messaggioda Foto UtentePietroBaima » 8 lug 2024, 15:09

MarcoD ha scritto:Altra immagine curiosa. Come viene fuori?


Proviamo a disegnare un pentagono sull'oscilloscopio...

Prima di tutto mi devo generare una vettore di coordinate (x,y) che descrivano il pentagono su un piano.

Questo è facile, basta usare questo codice Mathematica

Codice: Seleziona tutto
A[x1_, y1_, x2_, y2_] := Solve[Det[{{x, y, 1}, {x1, y1, 1}, {x2, y2, 1}}] == 0, {x, y}][[1, 1, 2]]
finesse = 1;
sol = A[0, 50, 50, 100];
a = Table[{x, sol}, {x, 0, 45, finesse}];
sol = A[50, 100, 100, 50];
b = Table[{x, sol}, {x, 50, 95, finesse}];
sol = A[100, 50, 75, 0];
c = Table[{x, sol}, {x, 100, 75, -finesse}];
sol = A[75, 0, 25, 0];
d = Table[{x, sol}, {x, 70, 25, -finesse}];
sol = A[25, 0, 0, 50];
e = Table[{x, sol}, {x, 20, 0, -finesse}];
Arr = Flatten[{a, b, c, d, e}, 1]


Che genera questa figura:

pentagono.png


Adesso, per trovare i segnali da applicare al canale X e Y dell'oscilloscopio dobbiamo usare la DFT e troncare la trasformata ad un numero sufficiente di termini, per esempio un centinaio (con Mathematica posso :mrgreen: )

Ecco il codice per estrarre la DFT:

Codice: Seleziona tutto

xValues = Arr[[All, 1]];
yValues = Arr[[All, 2]];
fourierX = Fourier[xValues];
fourierY = Fourier[yValues];
nTerms = 100; (*Numero di termini da mantenere*)
fourierXTruncated = Take[fourierX, nTerms];
fourierYTruncated = Take[fourierY, nTerms];
inverseFourier[coeffs_] :=
  Module[{n = Length[coeffs]},
   Table[Sum[
      Re[coeffs[[k]] Exp[2 Pi I (k - 1) (j - 1)/n]], {k, 1, n}]/n, {j,
      1, Length[Arr]}]];
approxX = inverseFourier[fourierXTruncated];
approxY = inverseFourier[fourierYTruncated];

ListLinePlot[{Transpose[{approxX, approxY}]}, PlotRange -> All,
AspectRatio -> Automatic, PlotStyle -> {Red, Blue},
AxesLabel -> {"X", "Y"},
PlotLabel -> "Approssimazione di Fourier della figura"]


Che restituisce questo disegno (se metto l'oscilloscopio in XY)

pentaDFT.png


I due segnali da mandare su X e su Y sono rispettivamente questi:

signals.png


Chiaramente se aumento il numero di lati i due segnali via via assomiglieranno sempre di più ad un seno e ad un coseno.

Se volete provare con un DAC a mandare i due segnali sull'oscillo ecco un raster (anche se io proverei prima con due onde triangolari, facendo però attenzione alla fase fra le due )

X (normalizzata fra 0 e 10)
Codice: Seleziona tutto
{3.32013, 3.37689, 3.50307, 3.62888, 3.75454, 3.88008, 4.0055, \
4.1307, 4.25556, 4.37968, 4.50182, 4.61446, 5.07229, 5.17356, \
5.29434, 5.41805, 5.5427, 5.66778, 5.79307, 5.9185, 6.044, 6.16956, \
6.29515, 6.42075, 6.54636, 6.67197, 6.79756, 6.92313, 7.04866, \
7.17412, 7.29948, 7.42467, 7.54959, 7.67399, 7.79724, 7.91713, \
8.01792, 8.49501, 8.59745, 8.71764, 8.8411, 8.96574, 9.09097, \
9.21659, 9.34252, 9.46878, 9.59546, 9.72286, 9.8517, 9.9846, 10.1396, \
9.71352, 9.61733, 9.49865, 9.37597, 9.25191, 9.12722, 9.00219, \
8.87697, 8.75161, 8.62618, 8.50069, 8.37517, 8.24963, 8.12408, \
7.99854, 7.87302, 7.74753, 7.6221, 7.49675, 7.37155, 7.2466, 7.12212, \
6.9987, 6.87846, 6.77862, 6.31326, 6.20362, 6.0822, 5.95841, 5.83376, \
5.7087, 5.58341, 5.45798, 5.33246, 5.20687, 5.08124, 4.95557, \
4.82988, 4.70416, 4.57843, 4.45268, 4.32692, 4.20114, 4.07536, \
3.94956, 3.82377, 3.69797, 3.57218, 3.44643, 3.32013, 3.37689, \
3.50307, 3.62888, 3.75454, 3.88008, 4.0055, 4.1307, 4.25556, 4.37968, \
4.50182, 4.61446, 5.07229, 5.17356, 5.29434, 5.41805, 5.5427, \
5.66778, 5.79307, 5.9185, 6.044, 6.16956, 6.29515, 6.42075, 6.54636, \
6.67197, 6.79756, 6.92313, 7.04866, 7.17412, 7.29948, 7.42467, \
7.54959, 7.67399, 7.79724, 7.91713, 8.01792, 8.49501, 8.59745, \
8.71764, 8.8411, 8.96574, 9.09097, 9.21659, 9.34252, 9.46878, \
9.59546, 9.72286, 9.8517, 9.9846, 10.1396, 9.71352, 9.61733, 9.49865, \
9.37597, 9.25191, 9.12722, 9.00219, 8.87697, 8.75161, 8.62618, \
8.50069, 8.37517, 8.24963, 8.12408, 7.99854, 7.87302, 7.74753, \
7.6221, 7.49675, 7.37155, 7.2466, 7.12212, 6.9987, 6.87846, 6.77862, \
6.31326, 6.20362, 6.0822, 5.95841, 5.83376, 5.7087, 5.58341, 5.45798, \
5.33246}

e Y (normalizzata fra 0 e 10)

Codice: Seleziona tutto
{6.40642, 6.29677, 6.04483, 5.79344, 5.54229, 5.29135, 5.0407, \
4.79048, 4.54102, 4.29314, 4.0495, 3.82584, 2.92195, 2.97989, \
2.99144, 2.99624, 2.99887, 3.00052, 3.00167, 3.00251, 3.00315, \
3.00367, 3.00409, 3.00444, 3.00475, 3.00502, 3.00526, 3.00548, \
3.00569, 3.0059, 3.00612, 3.00636, 3.00664, 3.00703, 3.00762, \
3.00877, 3.01216, 3.05369, 3.31392, 3.56735, 3.81967, 4.07161, \
4.32334, 4.57492, 4.82637, 5.07763, 5.32865, 5.57923, 5.8289, \
6.07606, 6.31032, 6.80994, 6.91149, 7.03195, 7.15553, 7.28016, \
7.40526, 7.53063, 7.65616, 7.78179, 7.9075, 8.03327, 8.15909, \
8.28496, 8.41088, 8.53684, 8.66286, 8.78895, 8.91513, 9.04144, \
9.16796, 9.2948, 9.42226, 9.55109, 9.68413, 9.84529, 9.39654, \
9.28893, 9.16826, 9.04487, 8.92046, 8.79558, 8.67043, 8.54513, \
8.41972, 8.29424, 8.16871, 8.04314, 7.91755, 7.79194, 7.66631, \
7.54067, 7.41503, 7.28938, 7.16373, 7.03807, 6.9124, 6.7867, 6.66092, \
6.53485, 6.40642, 6.29677, 6.04483, 5.79344, 5.54229, 5.29135, \
5.0407, 4.79048, 4.54102, 4.29314, 4.0495, 3.82584, 2.92195, 2.97989, \
2.99144, 2.99624, 2.99887, 3.00052, 3.00167, 3.00251, 3.00315, \
3.00367, 3.00409, 3.00444, 3.00475, 3.00502, 3.00526, 3.00548, \
3.00569, 3.0059, 3.00612, 3.00636, 3.00664, 3.00703, 3.00762, \
3.00877, 3.01216, 3.05369, 3.31392, 3.56735, 3.81967, 4.07161, \
4.32334, 4.57492, 4.82637, 5.07763, 5.32865, 5.57923, 5.8289, \
6.07606, 6.31032, 6.80994, 6.91149, 7.03195, 7.15553, 7.28016, \
7.40526, 7.53063, 7.65616, 7.78179, 7.9075, 8.03327, 8.15909, \
8.28496, 8.41088, 8.53684, 8.66286, 8.78895, 8.91513, 9.04144, \
9.16796, 9.2948, 9.42226, 9.55109, 9.68413, 9.84529, 9.39654, \
9.28893, 9.16826, 9.04487, 8.92046, 8.79558, 8.67043, 8.54513, \
8.41972}
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12207
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[14] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteMarcoD » 12 lug 2024, 12:30

Foto UtentePietroBaima, grazie e complimenti con la soluzione con Mathematica, purtroppo non padroneggio il linguaggio e non sono riuscito a comprendere tutti i passaggi.
Mi scuserai, ma lascio Mathematica insieme alle tante cose che potrei apprendere ma che non apprendo per pigrizia, o per meglio dire per me uno sfavorevole rapporto costo/benefici.
Nel mio approccio obsoleto, ricaverei i 5 punti come seno e coseno di angoli multipli di 360/5 = 72 (0, 72, 144,216,...); in funzione del tempo interpolerei linearmente fra i punti per tracciare le righe.
Forse se me ne rimane la voglia proverò a imbastire il calcolo in nel linguaggio di Processing (simil C) di cui dispongo e in qualche modo ogni tanto adopero. Ancora grazie, i tuoi interventi mi mostrano di quanto sono ormai senior. O_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[15] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteBrunoValente » 12 lug 2024, 19:46

Quindi Marco, per ottenere il pentagono, se ho capito bene, hai applicato sugli assi X e Y due segali della stessa frequenza, quello sull'asse X di forma triangolare e quello sull'asse Y di forma triangolare con le punte basse tosate, con la fase in questo modo



Giusto?
Avatar utente
Foto UtenteBrunoValente
39,6k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7796
Iscritto il: 8 mag 2007, 14:48

0
voti

[16] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteMarcoD » 13 lug 2024, 7:28

...per ottenere il pentagono, se ho capito bene, hai applicato sugli assi X e Y due segali della stessa frequenza, quello sull'asse X di forma triangolare e quello sull'asse Y di forma triangolare con le punte basse tosate, con la fase in questo modo

No, il fenomeno è differente:
Ho applicato due segnali sinusoidali 1MHz generati da due generatori sintetizzati, di frequenza prossima fra loro, l'oscilloscopio campiona (forse) a una frequenza esattamente cinque volte maggiore, quindi ottiene 5 valori per ogni ciclo di segnale in ingresso. Nella fase di elaborazione e visualizzazione dei campioni, interpola linearmente fra i campioni e si visualizza il pentagono. Nel tempo il pentagono si contrae ed espande lentamente. E' la mia spiegazione per il fenomeno.
Sono curioso di vedere se altri riescono a riprodurlo con altri oscilloscopi digitali.
E' interessante il percorso di Pietro per generarlo matematicamente, ma non ho compreso l'effetto della DFT (Direct Fourier Transform ?) che poi viene ritrasformata.
O_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[17] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteMarcoD » 14 lug 2024, 14:10

risultato generaz pentagono.jpg

Ho sintetizzato il pentagono su asse X,Y.
Nel pentagono, l'angolo zero parte dal vertice a destra in senso antiorario, nelle funzioni dell'angolo parte da sinistra.
Le figure sono tracciate per punti (360).

Il programmino è il seguente. Poco elegante (le strutture IF sono bruttine).
Codice: Seleziona tutto
// Generazione pentagono su assi X,Y   14/7/024    - Ambiente Processing 3.5.4

float A,DA,AG,X,Y;
int i;
float[] vetVx = new float[5];
float[] vetVy = new float[5];
int margO= 200, margV= 200;

void setup()
{
  size(400,600);
  DA = 360./5; //incremento angolo per ogni lato
for (i=0; i <5;i=i+1) //calcolo coordinate vertici pentagono
{
  AG = (DA*i);
A= (TWO_PI/360)*AG;
X = cos(A);Y=sin(A);
vetVx[i]=X ; vetVy[i]=Y;
print(i); print(" A gradi "); print(AG); print("    A rad "); print(A); print(" X= "); print(vetVx[i]); print(" Y= "); print(vetVy[i]);   println();
}
calcoli();
}

void calcoli()
{
for (i=0; i <360;i=i+1) //calcolo coordinate punti dei lati del pentagono
{
  AG = float(i);
if( (AG>=0)&&(AG<DA))   {  X = vetVx[0] + ( vetVx[1]-vetVx[0])*(AG/DA); Y = vetVy[0] + ( vetVy[1]-vetVy[0])*(AG/DA);  } //lato 1
if( (AG>=DA)&&(AG< 2*DA))   {  X = vetVx[1] + ( vetVx[2]-vetVx[1])*(AG- DA)/DA;  Y = vetVy[1] + ( vetVy[2]-vetVy[1])*(AG- DA)/DA;} //lato2
if( (AG>=2* DA)&&(AG< 3*DA))   {  X = vetVx[2] + ( vetVx[3]-vetVx[2])*(AG- 2*DA)/DA; Y = vetVy[2] + ( vetVy[3]-vetVy[2])*(AG- 2*DA)/DA;}//lato 3
if( (AG>=3*DA)&&(AG< 4*DA))   {  X = vetVx[3] + ( vetVx[4]-vetVx[3])*(AG- 3*DA)/DA; Y = vetVy[3] + ( vetVy[4]-vetVy[3])*(AG- 3*DA)/DA;}//lato 4
if( (AG>=4*DA)&&(AG< 5*DA))   {  X = vetVx[4] + ( vetVx[0]-vetVx[4])*(AG- 4*DA)/DA; Y = vetVy[4] + ( vetVy[0]-vetVy[4])*(AG- 4*DA)/DA;}//lato 5
 
// print(i); print(" A gradi "); print(AG); print(" X= "); print(X); print(" Y= "); print(Y);   println();
point ( margO+X*100,margV-Y*100); // perimwetro pentagono
point ( margO-180 +i*1,margV+200 -X*100); point ( margO-180 +i*1,margV+200 -Y*100);//coordinate x,Y funzione dell'angolo
}
}

forse porterò il codice su arduino e genererò i segnali x e y con due convertitori DA PWM delle uscita di arduino, filtrandoli opportunamente.
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

1
voti

[18] Re: Chi riesce a replicare l' immagine?

Messaggioda Foto UtenteMarcoD » 16 lug 2024, 16:23

Ho portato il programmino su arduino ed ho generato il pentagono sull'oscillo. Vi chiederete: a cosa serve? A nulla.
Per me è un passatempo per mantenermi attivo.
Ha richiesto un poco di elettronica, qualche saldatura, un poco di matematica ed informatica, apprendimento del funzionamento dell'oscilloscopio, potrebbe essere l'argomento di una tesina/compitino.
Allegati
pentagono_con_arduino.jpg
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

Precedente

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 186 ospiti