Sari la conținut
ELFORUM - Forumul electronistilor

DSO - Osciloscoape pentru PC - full details


Blind

Postări Recomandate

O problema deosebita pe care am rezolvat-o greu datorita dificultatilor matematice a fost micsorarea efectului

de fereastra si numarului de esantioane asupra acuratetii FFT.

Pentru calculul FFT am folosit un algoritm rapid 128,256,512,1024,2048 si 4096, care pentru 4096 de esantioane

da un rezultat in circa 0,5mS. Problema care m-a nemultumit este modulatia virfurilor

de amplitudine ale liniilor spectrale cu o frecventa egala cu aceea care corespunde

duratei de achizitie a esantioanelor. Practic am masurat o diferenta intre maxim si minim

de circa 20%, care nu am putut sa o reduc decit prin metoda aplicarii unei ferestre de

tipul Dirichlet, Hamming, Hanning sau Blackman semnalului esantionat, inainte de calculul FFT.

Acesata echivaleaza in timp cu cresterea treptata a nivelului esantioanelor la inceput si scaderea

lor spre sfirsit. In domeniul frecventa aplicarea ferestrelor corespunde unui filtru de pondere

in jurul componentelor spectrale.

Clic pentru marirea imaginii.

post-238209-0-22432600-1483116102_thumb.jpg

Programul si ecuatiile ferestrelor sunt urmatoarele:

 

ReDim Matrix(numbers)
For Counter = 0 To numbers 'fereastra Blackman-Nuttall plus corectia cu 0.0124
Matrix(Counter) = 0.0124 * CDbl(dataPCM_Left(Counter)) * (0.42 - 0.5 * Cos(2 * Pi * Counter / (numbers - 1)) + 0.08 * Cos(4 * Pi * Counter / (numbers - 1)))
Next Counter

'yw = 0.54 - 0.46 * Cos(2 * Pi * i / (nsamples)) 'Hamming
'yw = 0.5 - 0.5 * Cos(2 * pi * i / (nsamples)) 'Hanning
'yw = 0.42 - 0.5 * Cos(2 * pi * i / (nsamples - 1)) + 0.08 * Cos(4 * pi * i / (nsamples - 1)) 'Blackman-Nuttall

 

Dupa incercarea ferestrelor prezentate am ales modelul ferestrei Blackman-Nuttall, care in final a redus

putin viteza de calcul, dar diferentele de nivel la balearea frecventei s-au redus sub 5% din 20%.

 

Articolul de inspiratie l-am gasit explicat corect numai la National Instruments, toate celelalte referinte cercetate

au fost sumare, parca facute dinadins sa nu se inteleaga nimic aplicativ

Adrese utile pentru studiu.

http://www.ni.com/white-paper/2709/en/ esantionarea si achizitia de date

http://www.ni.com/white-paper/4844/en/ principiile ferestrelor in analiza semnalelor

 

@gsabac

Link spre comentariu
  • Răspunsuri 71
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Introducerea unui filtru trece jos la un DSO are o filozofie aparte si in general se recomanda trecerea din domeniul timp in domeniul frecventa,

prelucrarea numerica a esantioanelor de amplitudine la diverse frecvente, apoi revenirea in domeniul timp cu refacerea semnalului.

Pentru aceste filtre s-a gasit o metoda numerica simpla iterativa, bazata pe functiile sin(x)/x si ferestrele de ponderare.

Asa arata o secventa de prelucrare numerica pentru un filtru trece jos cu frecventa variabila.

 

alim = nInterpolare * nPoints '600 sunt 10860 de puncte ftjMax = Val(FormOscilloscope.Text1.Text) ' 22000 este un FTJ cu frecventa, setat pe max = 22.050KHz pentru 44,1KHz esantionare wnwdth = 24 'Val(Text6.Text) '5...200 latimea ferestrei de interpolare puncte r_g = 2 * ftjMax / SampleRate rapW = 1 / wnwdth rapW1 = 1 / (wnwdth - 1) ksoc = doiPi * ftjMax / SampleRate ' coeficient de filtrare

For ka = 1 To nPoints For iz = 1 To nInterpolare iw = iw + 1 ir = ka + iw '(npoints +npoints*ninterpolare)/ninterpolare xa = ir / nInterpolare r_y = 0 'Calc gain correction factor (ja - xa) For ia = -wnwdth / 2 To wnwdth / 2 - 1 'For 1 window width ja = Int(xa + ia) 'Calc input sample index Select Case isel Case 1 wind = 1 'Dirichlet, rectangle window Case 2 'yw = 0.54 - 0.46 * Cos(2 * pi * i / (nsamples)) 'Hamming window wind = 0.54 - 0.46 * Cos(doiPi * (0.5 + (ja - xa) * rapW)) Case 3 'yw = 0.5 - 0.5 * Cos(2 * pi * i / (nsamples)) 'Hanning window wind = 0.5 - 0.5 * Cos(doiPi * (0.5 + (ja - xa) * rapW)) Case 4 'Blackman-Nuttall window 'yw = 0.42 - 0.5 * Cos(2 * pi * i / (nsamples - 1)) + 0.08 * Cos(4 * pi * i / (nsamples - 1)) wind = 0.42 - 0.5 * Cos(doiPi * (0.5 + (ja - xa) * (rapW1))) + 0.08 * Cos(2 * doiPi * (0.5 + (ja - xa) * (rapW1))) End Select r_a = ksoc * (ja - xa) 'ksoc = doiPi* ftjMAX / SampleRate * (ja - xa) sinc = 1 If (r_a <> 0) Then sinc = Sin(r_a) / r_a 'functia SinX/X

If (ja > 0) And (ja < alim) Then r_y = r_y + r_g * wind * sinc * (Yn(ja) - 150) ' Return new filtered sample, 1 esantion End If Next ia r_x = 1.025 * (xax(ka - 1) + (xax(ka) - xax(ka - 1)) * iz / nInterpolare) FormOscilloscope.Picture1.PSet (r_x, r_y + 150) Next iz Next ka

Codul este tradus din C++ in Visual Basic 6B cu DirectX-9C si adaptat pentru acest osciloscop.

Dupa nenumarate imbunatatiri si modificari osciloscopul pe calculator Art Oscilloscope final arata asa:

post-238209-0-43698000-1483558779_thumb.jpg

Proiectul este liber ("free") ca cod pe zonele si tipurile de prelucrari numerice dar si pentru setarea pe calculator.

 

@gsabac

Editat de gsabac
Link spre comentariu
  • 4 luni mai târziu...

Personal intetionez sa realizez acest osciloscop: http://www.scopefun.com . Este un proiect open source cu software, gerber, BOM si tot ce trebuie pt. realizare.

Nu e tocmai usor de datorita SMD-urile de mici dimensiuni dar cu mult flux si rabdare cred ca se poate. :)

 

Realizarea este cea mai tare pe care a facut-o cineva ca persoana, atit ca frecventa cit si ca numar de esantioane (efective) memorate

la mare viteza. Eu am gasit doar proiecte realizate de pina la 2K*8, cu memorii discrete de 50MHz si tot cu esantionare de 10 bit.

 

Dupa mine este realizabil daca se cumpara ca atare cu soft cu tot si garantia de functionare sau ca chit,

si soft, in caz contrar trebuiesc urmatoarele:

- programul pentru FPGA si toate softurile si harnasamentul de scriere;

- programul pentru microcontroller si scriere a lui in uC-ul indicat;

- programul executabil pentru sistemul de operare folosit este dat in arhive;

- procurarea componentelor intocmai ca in documentatie si la ce pret;

- realizarea unui circuit multistrat cu treceri metalizate si plantarea unui circuit de asemenea precizie;

- circuitul sau schema are ceva greseli, deci trebuie o erata;

 

Succes !

 

@gsabac

Link spre comentariu
  • 8 luni mai târziu...

Pentru 50$ nu prea ai la ce sa te astepti dar pentru inceput e ceva.Studiaza si tu ce stie sa faca si vezi daca te satisface sau nu.

Link spre comentariu

Nici nu ma astept sa fie foarte performant , declarativ si din foto pare ok pentru domeniul audio dar eu ma gandeam ca cineva a mai comandat ceva similar si doream o opinie. Banuiesc ca e bazat pe Arduino deci nu poate fi foarte performant ! Oricum , multumesc si mai astept opinii , nu-i graba.

As mai avea o intrebare: placa grafica a laptop-ului este importanta pentru functionarea corecta a acestui osciloscop ? Daca da, cam care credeti ca ar fi cerinele minime ?

Editat de gheo23
Link spre comentariu

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.
Notă: Postarea ta va necesita aprobare moderator înainte de a fi vizibilă.

Vizitator
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Răspunde la acest subiect...

×   Alipit ca text avansat.   Restituie formatare

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.




×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări