Jump to content
ELFORUM - Forumul electronistilor

DSO - Osciloscoape pentru PC - full details


Blind

Recommended Posts

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 to comment
  • Replies 71
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

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

Edited by gsabac
Link to comment
  • 4 months later...

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 to comment
  • 8 months later...

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 to comment

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 ?

Edited by gheo23
Link to comment

@zsjkuki: da, asa ma gandeam si eu.Oricum laptop-ul meu este cam asa: I3 2.27Ghz, AMD Radeon 6300 series 1Gb memory/350Mhz, ssd Samsung 2Tb si win10.

@orgasmo: multumesc pentru link.Cred ca-l comand , 40 euro nu-i deloc mult la ce stie sa faca, cel putin in teorie.Il vedem la munca!!! :rade:

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines