Sari la conținut

Osciloscoape digitale DSO si metode de afisare a esantioanelor pe display.


Postări Recomandate

 Astept pe forum, sugestii pentru imbunatatirea aspectului semnalului unui osciloscop DSO sau

chiar ceva soft scris in orice limbaj de programare.

 

 Aceasta este o problematica vasta. Prin diverse metode de rezolvare, se imbunatateste acuratetea de masura si vizuala a osciloscoapelor si nu numai. 

 

Cea mai simpla metoda este afisarea esantioanelor pe ecran la o scala convenabila.

 

 Prin unirea virfurilor esantioanelor reprezentate pe ecran se obtine o imagine mult mai realista,

  fara necesitatea folosirii unor rutine soft complicate, care necesita timp de executie. 

 

Pentru o refacere mai realista se pot folosi diverse metode, printre care:

- interpolarea

- filtrarea

- medierea pe mai multe cicluri de achizitie sau medierea continua

- reconstructia prin esantionare deplasata in timp

 

Interpolarea

- Necesara, cind numarul de asantioane este mic sau dorim zoom. Este necesar ca frecventa de esantionare sa fie mai mare de doua ori decit frecventa maxima din semnal, asa cum rezulta din teorema de esantionare.

 

- interpolare liniara: efect inestetic

- interpolare sin(x)/x: da un aspect frumos si imbunatateste acuratetea

 

Am realizat un osciloscop pe PC, homemade, GElectronic Art Oscilloscope, oferit gratuit (free), care se poate descarca de la adresa http://freewebs.com/gelectronic

Programul este scris in Visual Basic VB6-SP6B, Visual Basic 2008 si 2010 cu setul de functii API DirectX8 si DirectX9c prin anul 2013, atunci cind am aflat setul de functii necesare pentru manipularea placii de sunet, a unui calculator PC in Window, scris de Joe Koss in anul 2004. Se poate descarca de aici: http://www.freewebs.com/gelectronic/laborator/Osciloscop%20pe%20Calculator/oscivb6.txt

Daca doriti detalii din program comunicati pe forum.

 

Acest produs este capabil de performanta in audiofrecventa, prin folosirea unor sonde de masura
 adecvate si a unei proceduri simple de calibrare.

Pentru utilizare sunt necesare cunostinte  elementare despre curentul electric si electronica.

Aparatul se poate folosi si demonstrativ, fara a se conecta la ceva, pentru studierea functionarii

  unui osciloscop si a semnalelor electrice complexe. Acestea sunt  produse intern cu ajutorul unor functii

  matematice adaptate la calcul numeric.  Se pot vizualiza diverse forma de unda, semnale MA, MA-PS,

  suma de semnale,  semnal diferit CH1 si CH2,  MF, sinusoidal, dreptunghiular, trapezoidal, triunghiular,

  sinus deformat. Analizorul de spectru poate face FFT pentru 4096 de esantioane in timp real.

 

oscil.png

 

Aparatul se poate folosi si demonstrativ,  fara a se conecta la ceva, pentru studierea functionarii

  unui osciloscop si a semnalelor electrice complexe. Acestea sunt  produse intern cu ajutorul unor functii

  matematice adaptate la calcul numeric.  Se pot vizualiza diverse forma de unda, semnale MA, MA-PS,

  suma de semnale,  semnal diferit CH1 si CH2,  MF, sinusoidal,  dreptunghiular,  trapezoidal,  triunghiular,

  sinus deformat.

 

Prin comanda  din butonul "Training" apare generatorul de semnal de test intern, cu ajutorul caruia se simuleaza diverse forme de unda electrice, care apar si pe osciloscop.

 

generat.png

 

Datele tehnice generale:
  - calculatorul trebuie sa aiba sistemul de operare Windows XP, Vista, 7, 8
  - rezolutia minima a calculatorului 1024 / 768 si frecventa minima 500MHz,
  - calculatorul trebuie sa aiba o placa de sunet functionala,
  - frecventa de esantionare 11025, 22050, 44100, 98000, 192KHz sau setata de utilizator;
  - banda de frecvente (depinde de frecventa de esantionare si placa de sunet) 20Hz...20KHz;
  - liniaritatea in banda soft este +/- 0.1% dar global depinde de liniaritatea Placii de Sunet,
  - sensibilitate reglabila in trepte si fin de la 2mV/div la 200mV/div  cu click pe atenuatorul virtual,
    iar valoarea adevarata se masoara numai dupa calibrarea intrarilor,
  - osciloscopul dispune de indicator al prezentei semnalului de intrare,
  - baza de timp 0.5sec/div la 10uS/div reglabila in trepte si fin cu click pe comutatorul virtual,
  - baza de timp este calibrata precis si are si marcaje pe ecran,
  - sincronizarea se face dupa CH1, CH2 sau NORMAL, AUTO, TRIGG sau HOLD. Pe HOLD se
    comanda inregistrari, din butonul SHOT, care se pot salva ca "date" sau "bitmap",
  - osciloscopul are un indicator al sincronizarii,
  - aparatul poate calcula si afisa spectrul semnalului in timp real sincron cu forma semnalului,
  - voltmetrul si frecventmetrul intern se folosesc prin click cu butonul sting sau drept,
  - canalele CH1 si CH2 se pot combina ca suma sau sa redea figurile lisajoux.

 

 Pentru afisarea semnalului esantionat pe disply am folosit metoda liniara, adica unirea virfurilor,

esantioanelor din spatial rezervat ecranului.

 

La frecvente mari, in raport cu frecventa de esantionare, semnalul vizualizat este inestetic si uneori chiar deranjant, asa cum se prezinta in imaginea, cu 44,1 KHz frecventa de esantionare,

10KHz pe canalul CH1 si 5 KHz pe canalul CH2. Pentru 192KHz chiar o frecventa de 20 KHz arata binisor.

 

Pentru exemplificare am folosit un laptop mai vechi, Dell D531 cu Windows7. La setarea manuala a frecventei de esantionare a rezultat maximum 200KHz. Peste 200KHz softul arata o eroare si se inchide. 

 

192KHz frecventa de esantionare

192khz.png

 

98KHz frecventa de esantionare

98khz.png

 

44,1KHz frecventa de esantionare

44khz.png

 

 

 Astept pe forum, sugestii pentru imbunatatirea aspectului semnalului unui osciloscop DSO sau

chiar ceva soft scris in orice limbaj de programare.

 

Succes !

  • 3 weeks later...

Am s?pat documenta?ii ?i pe la prieteni ?i am un succes par?ial. Am implementat o interpolare Cubic Spline ?i am ?mbun?ta?it aspectul

 vizual. La o frecven?? de e?antionare de 44100 Hz se vizualizeaza o sinusoida acceptabila de 15KHz ca in poz?.

?n general interpolarea prezent?, face o reconstituire bunicic?, p?n? la o treime din frecven?a de e?antionare.

?n compara?ie cu pozele din postarea anterioar?, se vede o ?mbunat??ire consistent?. Am pus ?i 2 butoane noi pe Art Oscilloscope,

unul pentru normal si celalalt pentru refacere spline.  

 

?n poz?, frecven?a de e?antionare este 44100Hz iar semnalul are 15KHz, se vede si pe spectru.

 

12074527_170365099972022_907734626446427

 

Programul folosit este descries mai jos ?i functioneaz? perfect, pentru aprecierea performan?elor ca aplica?ie, pentu DSO.

 

Dac? sunt ceva probleme, ?mbunat??iri, adapt?ri la DSO personal, comunica?i pe forum.

 

'Modul de folosire in Visual Basic 6 SP6

 

' -Se deschide un program nou ?i se alege ScaleMode->pixel, apoi se redimensioneaz? formularul la 1000x600 pixeli
' -Se creaz? un design asem?nator cu cel din poza 2 astfel:
' -Se pun pe formular 3 butoane, Command1, Command2, Command3 ?i se scriu noile denumiri,respectiv,
     "Creare puncte de control", "Calculare Cubic Spline" si "Stergerea imaginii", ca ?n poz?.
' -Se pun pe formular 3 obiecte Label ?i se scriu denumirile, apoi 3 obiecte TextBox ?i se scriu valorile text, din TextBox-uri
' -Se pune pe formular un obiect PictureBox cu 600x480 pixeli ?i se face de culoare neagr?
' -Se face dublu click pe formular ?i se copiaz? codul far? descrierea modului de folosire,in formularul de coduri care apare.

' -Se pun pe formular, 3 butoane pentru forma de unda, Command4, Command5, Command6 si se scriu noile denumiri

'  Se finiseaz? totul ca ?n poza 3, partea de sus.

 

 

12118785_170363806638818_329348901811839

 

'-----------------------------------------------------------------------------------------
Option Explicit

Dim nPoints  As Long      ' numarul de esantioane total, de pe ecran
Private x()  As Single
Private y()  As Single
Private p()  As Single
Private u()  As Single
Dim Ampl     As Single
Dim Tp       As Single    ' numarul de puncte pe perioada, prestabilit este 5
Dim i        As Long
Dim iform    As Integer   'forma de unda 0-sinus, 1-dreptunghi, 2-sinus la puterea 3
Dim pi       As Single
 
'---->Aici se copiaza codul de mai sus

   Private Sub Form_Load()

   End Sub
'----> Aici se copiaza codul de mai jos

Private Sub Command1_Click()
   
    pi = 3.1415926
    nPoints = Val(Text2.Text)  ' numarul total de esantioane
    ReDim x(nPoints)
    ReDim y(nPoints)
    ReDim p(nPoints)
    ReDim u(nPoints)

    Ampl = Val(Text3.Text)
    Tp = Val(Text1.Text)      ' cu 3 puncte pe perioada se poate vizualiza 440100/3 =14700Hz, la 98200/3 =29400Hz,192000/3=64000Hz
                              ' cu 5 puncte pe perioada se poate vizualiza 44100/5 =8820Hz, 98200/5 =19640Hz,192000/5=38400Hz
   
    For i = 1 To nPoints          'numarul de puncte pe ecran
       x(i) = 600 * i / nPoints '600 este rezolutia ecranului pe orizontala
        If iform = 0 Then
          y(i) = 240 - Ampl * (Sin(2 * pi * 1 / Tp * i) ^ 1)           ' sinusoidal
        ElseIf iform = 1 Then
          y(i) = 240 - Ampl * Sgn(Sin(2 * pi * 1 / Tp * i) ^ 1)        ' dreptunghiular
        ElseIf iform = 2 Then
          y(i) = 240 - Ampl * (Sin(2 * pi * 1 / Tp * i) ^ 1) ^ 3       ' sinus deformat
        End If
    Next i
   
    For i = 1 To nPoints
          Picture1.Circle (x(i), y(i)), 4, vbRed
      If i > 1 Then Picture1.Line (x(i - 1), y(i - 1))-(x(i), y(i)), vbGreen
    Next
    For i = 1 To 10 * nPoints  '100 de puncte intre esantioane
      Picture1.PSet (600 / (10 * nPoints) * i, 240 - Ampl * (Sin(2 * pi * 1 / (10 * Tp) * i) ^ 1)), vbMagenta
    Next i
    Command2.Enabled = True
End Sub

Private Sub Command2_Click()
    Dim piece As Integer, xPos As Single, yPos As Single
    Call SetPandU
   
    For piece = 1 To nPoints - 1
        For xPos = x(piece) To x(piece + 1)
            yPos = getCurvePoint(piece, xPos)
            Picture1.PSet (xPos, yPos), vbYellow
        Next
    Next
End Sub

Private Sub Command3_Click()
  Picture1.cls
End Sub

Private Function getCurvePoint(i As Integer, v As Single) As Single
    Dim T As Single
    T = (v - x(i)) / u(i)
    getCurvePoint = T * y(i + 1) + (1 - T) * y(i) + u(i) * u(i) * (F(T) * p(i + 1) + F(1 - T) * p(i)) / 6#
End Function

Private Function F(x As Single) As Single
        F = x * x * x - x
End Function

Private Sub SetPandU()
    Dim i As Integer
    Dim d() As Single
    Dim w() As Single
    ReDim d(nPoints) As Single
    ReDim w(nPoints) As Single

    For i = 2 To nPoints - 1
        d(i) = 2 * (x(i + 1) - x(i - 1))
    Next
    For i = 1 To nPoints - 1
        u(i) = x(i + 1) - x(i)
    Next
    For i = 2 To nPoints - 1
        w(i) = 6# * ((y(i + 1) - y(i)) / u(i) - (y(i) - y(i - 1)) / u(i - 1))
    Next
    For i = 2 To nPoints - 2
        w(i + 1) = w(i + 1) - w(i) * u(i) / d(i)
        d(i + 1) = d(i + 1) - u(i) * u(i) / d(i)
    Next
    p(1) = 0#
    For i = nPoints - 1 To 2 Step -1
        p(i) = (w(i) - u(i) * p(i + 1)) / d(i)
    Next
    p(nPoints) = 0#
End Sub

Private Sub Command4_Click()
  iform = 0
End Sub

Private Sub Command5_Click()
  iform = 1
End Sub

Private Sub Command6_Click()
  iform = 2
End Sub

'-----------------------------------------------------------------------

 

Am verificat modul de folosire a descrierii pentru realizarea programului prezentat.

 

?n continuare lucrez la o implementare soft, Sinc  (sinX/X), care dup? primele simul?ri ar merge p?n? la   frecven?a de e?antionare supra  2,2.

 

 

12116003_170368443305021_530545391370438

 

Am s? ?ncerc s? introduc aceste algoritme ?n Art Oscilloscope. Am s? creez o bar? cu butoane pentru diverse moduri de vizualizare,

 

Normal, Spline, Fereastr? Rectangular?, Hamming, Hanning ?i Blackman.

 

Succes!

  • Like 1

?n adaptarea nou? pentru GElectronic Art Oscilloscope, am introdus o bar? vertical? de butoane,

care comand? rutinele de interpolare ?i filtrarea numeric? a semnalului vizualizat. Vezi foto.
 
O scurta prezentare a e?antion?rii ?i DSO (Digital Storage Oscilloscope).

Frecven?a egal? cu jum?tate din banda semnalului (limitat abrupt), se nume?te frecven?a (rata) Nyquist asociat? semnalului.
Dac? frecven?a maxim? din semnalul de intrare este mai mic? sau egal? cu frecven?a Nyquist, este valabil?
 teorema Nyquist-Shannon (teorema e?antionarii), potrivit c?reia semnalul poate fi reconstruit (teoretic) perfect
 din secventele ob?inute din punctele de e?antionare.

 

Aceasta este o idealizare teoretic?, care presupune e?antioane de precizie ?n amplitudine ?i timp infinit, neafectat? de zgomot datorit?
 frecven?elor mai mari dec?t jumatate din frecven?a de e?antionare sau datorit? e?antion?rii numerice finite cu 6 biti, 8 biti,
 12 biti, 16 biti sau mai mult. ?n realitate m?suratorile sunt afectate de o multitudine de factori ?i ?n general,
  preciziile de 3% sau 5%, sunt ob?inute ?n aparatura de calitate, cu o complexitate mare de componente hard ?i soft.

 

Teorema Nyquist-Shannon (teorema e?antionarii) nu arat? ?i metodele de reconstruc?ie a semnalului e?antionat numeric sau analogic.
Reconstruc?ia ?n acest caz poate fi reusit?, folosind formula de interpolare Whittaker?Shannon.

 

?n general, metodele folosite pentru interpolare, filtrare ?i reconstruc?ie, constau ?n introducerea unui numar mare de puncte intermediare,
 ?ntre e?antioanele originale, apoi noile coordonatele sunt calculate cu metode matematice de interpolare,
 gen Cubic Spline sau Sinc ( sin(X)/X ). ?n interpolarea Sinc se alc?tuieste o fereastra mobil?, care cuprinde mai multe e?antioane ?i
 care se translateaz? pe toat? lungimea ?nregistrarii, cu efectuarea de calcule de interpolare sin(X)/X ?i acumulare.

 

Folosind interpolarea Cubic Spline, se poate m?ri acurate?ea vizual? ?i precizia m?suratorilor p?na la o frecven??
 egal? cu frecven?a de e?antionare supra 3. Semnalul este interpolat folosind o functie gen (X la puterea 3 -- X) ?ntre punctele de
 e?antionare ?i racordat curb? cu curb?.
Se ob?ine astfel o eroare de circa +/-5% la semnale periodice sinusoidale, pentru frecven?a de e?antionare supra 3
 ?i calculul cu 3 zecimale.

 

Folosind interpolarea Sinc, sin(X)/X, cu ferestrele, Dirichlet, Hamming, Hanning sau Blackman,
 se poate m?ri acurate?ea vizual? ?i precizia m?suratorilor p?n? la o frecven?a de 2,5 ori mai mare, dec?t vizualizarea cu segmente,

  chiar egal? cu frecven?a de e?antionare supra 2,11. Eroare, +/-5%, la 7 zecimale, pentru precizia de calcul.

 

Filtrarea Sin (x) / x  va oferi aproape ?ntotdeauna o reprezentare mai exact? a semnalului de intrare cu c?teva limitari.
 Mai int?i de toate, ca filtrarea sin(x)/x, pentru reconstruc?ie sa fie absolut corect?, semnalul de intrare digitizat trebuie
 sa nu aib? nici o componenta de frecven?? ?n afara jumat??ii frecven?ei Nyquist (frecven?a de e?antionare supra 2).
 Pentru un domeniu de aplicare ?n care se pot achizi?iona 44100 esantioane pe secund?, frecven?a maxima util?, vizualizat? cu
 acurate?e, este 20KHz, 44100 / 2,2.

 

Calculatoarele gen PC au banda de frecven?e limitat? hardware, undeva ?n domeniul de la 10Hz la 20 KHz uneori chiar la 70KHz.
La adresa  http://www.daqarta.com/dw_gguu.htm , sunt prezentate test?ri de module externe ?i pl?ci de sunet comerciale, unele dintre ele merg
 chiar la 70KHz de la Input la Output, la frecven?a de e?antionare de 192 KHz. ?n acest caz osciloscopul pe PC merge la 70KHz.

O frecvent? joas? pentru RF, dar utilizabil? la audio sau la convertori, mai ales c? sunt multe oferte de software gratuit ?i multe scheme de

 sonde de masur? care asigur? m?sur?tori de calitate.
 

Osciloscopul DSO realizat din PC, beneficiaz? de e?antionarea pe 16 bi?i sau mai mult, 24 de bi?i. PC-ul are la intrare, un filtru hardware
 la 20 KHz sau la o frecven?a mai mare. Acesta este realizat cu componente pasive sau active ?i ?n acest fel erorile de reconstruire
 sunt mai mici, respectiv se ob?ine o precizie mai mare, necesar? pentru ?ncadrarea ?ntr-o clas? de fidelitate superioar?.

Desigur ca osciloscopul ruleaz? mai lent, la folosirea op?iunilor de reconstruc?ie, datorit? multitudinii de calcule matematice de precizie.

?n general, trebuie s? alege?i op?iunea filtr?rii sin(x)/x sau alt? filtrare, care s? dea cele mai bune rezultate,
 pentru semnalul vizualizat si m?surat.

 

GElectronic Art Oscilloscope.
?n adaptarea nou? pentru GElectronic Art Oscilloscope, am introdus o bar? vertical? de butoane, care comand? rutinele de interpolare ?i filtrarea
 numeric? a semnalului vizualizat
Refacerea semnalului este activat? atunci c?nd este probabil ca semnalul de intrare s? aib? frecven?a mare.
Se pot selecta modurile de refacere Liniar?, Spline sau Sinc ( sin(X)/X ), cu modurile de refacere prin utilizarea ferestrelor Dirichlet,
 Hamming, Hanning sau Blackman.
Programul con?ine ?i un filtru digital trece jos, care filtreaz? semnalul de ie?ire,cu o frecventa ce se poate regla ?ntre 10Hz ?i frecven?a Nyquist.

 ?n Art Osciloscope filtrul se poate regla de la 2KHz la circa 22KHz.
 
?n pozele de mai jos se v?d semnale de 19,975KHz, e?antionate cu 44,100KHz ?i se remarc? calitatea interpol?rii sinX/X.

 

 

Semnalul de intrare sinus are 19975 Hz, aici sunt e?antioanele la frecven?a de e?antionare de 44100Hz. Frecven?a Nyquist 22050Hz. 

 

12072807_173161989692333_873961922181725

 

Semnalul de intrare sinus are 19975 Hz, aici semnalul este ref?cut cu metoda Cubic Spline. Se vede ca nu mai merge la raportul de 2,21.

 

12115984_173161579692374_441144312983646

 

Semnalul de intrare sinus are 19975 Hz, aici semnalul este ref?cut cu metoda sinX/X, Hamming.

 

1497715_173162216358977_4040282170505781

 

 

Programul prezentat ?n postarea  anterioar?, pe care l-am numit, "DSO Spline & Sinc", a fost introdus ?n Art Oscilloscope ?i codul se poate folosi

  pentru ?mbunat??irea unui osciloscop DSO, ?n care este posibil s? se implementeze algoritmii de reconstruc?ie, ?n virgul? mobil? cu 7 zecimale.
De exemplu, ?n osciloscoapele cu Raspberry Pi, Arduino sau oricare, prin folosirea sau translatarea softului din Visual Basic 6-SP6,
 ?n Microsoft Visual Studio, cu programarea ?n C#. Afisarea se face pe ecranul calculatorului.
Comunicarea cu calculatorul, se poate realiza prin portul COM, USB sau Wireless. Pentru comunicarea I2C sunt disponibile librarii.

Proiectul expus "DSO Spline & Sinc", este complet ?i func?ional, are sursele de program complete ?i free, pentru VB6-SP6.
Este folosibil pentru aprecierea performan?elor a c?torva metode de refacere a unui semnal e?antionat.

Metodele matematice de interpolare nu sunt complicate ?i traducerea ?n soft implic? circa 50 de linii de cod. Se poate translata cu u?urin?a ?n
 orice limbaj de programare, deoarece nu con?ine pointeri, libr?rii, obiecte, etc.
Nu am introdus ?n proiect Librarii, DLL-uri, SYS-uri, Executabile sau OCX-uri deoarece consider c? acestea limiteaz? domeniul de aplicabilitate
 al softului ?i nu ofera siguran?a unei functionari sigure pentru osciloscop ?i calculator.
Pentru compilarea ?i folosirea sa, sunt necesare cunostin?e medii de utilizare a mediului IDE VB6 ?i un sistem de operare Windows XP,7,8.
 
Adrese web de ajutor

http://www.nicholson.com/rhn/dsp.html ,  programe DSO prezentare, exemple ?i codul surs? free pe care l-am preluat,

http://sourceforge.net/projects/scopino/?source=typ_redirect  ,   proiect Arduino de osciloscop, ?n Microsoft VS10 C#

http://visualpi.net/  ,  VisualPi control, pentru communicarea direct? cu Raspberry Pi, ?n Microsoft Visual Studio C#, are libr?rii.

 

Am ata?at fi?iere surs? free pentru  "DSO Spline & Sinc".

 

 

 

 

 

dso-program.zip

  • Like 1
  • 4 months later...

Scuze pentru ?tergerea pozelor. Facebook-ul p?streaza pozele, dar sterge link-urile dup? 4 luni de zile.

 

Reiau descrierea ?i pozele de la postarea #2.  

 

?n poz?, frecven?a de e?antionare este 44100Hz iar semnalul are 15KHz, se vede ?i pe spectru.

 

spline15KHz.jpg

 

Se finiseaz? totul ca ?n poza de mai jos.

 

formularSp.jpg

 

Am verificat modul de folosire a descrierii pentru realizarea programului prezentat.

?n continuare lucrez la o implementare soft, Sinc  (sinX/X), care dup? primele simul?ri ar merge p?n? la   frecven?a de e?antionare supra  2,2.

 

 

programSp.jpg

 

 

?n postarea #3 sunt urm?toarele poze ?i comentarii.

 

Semnalul de intrare sinus are 19975 Hz, aici sunt e?antioanele la frecven?a de 44100Hz. Frecven?a Nyquist 22050Hz.

 Rezult? pe osciloscop un semnal neregulat, despre care este greu de presupus ca este o sinusoid?.

 

es20KHz.jpg

 

Semnalul de intrare sinus are 19975 Hz, semnalul este ref?cut cu metoda Cubic Spline. Se vede ca nu mai merge

  la raportul e?antionare/frecven?a de 2,21.

 

spline20KHz.jpg

 

Semnalul de intrare sinus are 19975 Hz ?i este acela?i ca ?n cele 2 poze de mai sus. Semnalul este ref?cut ca imagine

 cu metoda sinX/X, Hamming.

 

hamming.jpg

 

Sunt disponibile in program si ferestrele de tipul Dirichlet, Hamming, Hanning sau Blackman. Se comanda cu butoanele 

 din zona Interpolation. Se poate folosi ?i filtrul trece jos cu frecven?a reglabil?.

 

Succes !

  • 4 months later...

Pentru calculul FFT am folosit un algoritm rapid, 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-24607-0-89985900-1467737643_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

Editat de gsabac
  • Like 1

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Folosim cookie-uri și tehnologii asemănătoare pentru a-ți îmbunătăți experiența pe acest website, pentru a-ți oferi conținut și reclame personalizate și pentru a analiza traficul și audiența website-ului. Înainte de a continua navigarea pe www.tehnium-azi.ro te rugăm să fii de acord cu: Termeni de Utilizare.

ATENTIE !!! Functionarea Tehnium Azi depinde de afisarea de reclame.

Pentru a putea accesa in continuoare site-ul web www.tehnium-azi.ro, va rugam sa dezactivati extensia ad block din browser-ul web al vostru. Dupa ce ati dezactivat extensia ad block din browser dati clic pe butonul de mai jos.

Multumim.

Apasa acest buton dupa dezactivarea extensiei Adblock