Anemometrul Ultrasonic
Cuprins
Introducere 1
Fundamentarea teoretică și documentarea bibliografică 3
2.1 Anemometrul 3
2.2 Tipuri de anemometre pentru măsurarea vitezei vântului 3
2.2.1 Anemometrul cu cupe 3
2.2.1.1 Anemometrul cu patru cupe sau rotațional 3
2.2.1.2 Anemometrul cu trei cupe 4
2.2.2 Anemometrul cu elice 4
2.2.3 Anemometrul cu fir cald 5
2.3 Anemometrul ultrasonic 5
2.3.1 Anemometrul ultrasonic unidimensional 6
2.3.2 Anemometrul ultrasonic bidimensional 6
2.3.3 Anemometrul ultrasonic tridimensional 7
2.4 Traductorul 7
2.4.1 Modelarea funcțiilor traductorului 7
2.4.1.1 Modelarea Emițătorului 7
2.4.1.2 Modelarea Receptorului 8
2.5 Faza unui semnal 9
2.6 Viteza semnalelor 10
2.6.1 Calculul vitezei din debitul de aer prin secțiune 11
2.6.2 Calculul vitezei folosind diferența de fază 11
2.6.2.1 Calcul folosind trecerilor prin zero 12
2.6.2.2 Calcul folosind Transformata Fourier Rapidă 14
2.6.2.3 Calcul folosind corelația 15
2.6.2.4 Calcul folosind metoda celor mai mici pătrate 16
Proiectarea anemometrului ultrasonic 17
3.1 Introducere 17
3.2 Componente Hardware 17
3.2.1 Traductoarele 18
3.2.2 Generator de semnal 18
3.2.3 Osciloscopul 19
3.2.4 Ventilatorul și Tubul aerodinamic 20
3.3 Simularea funcționării componentelor hardware 21
3.4 Componente și Implementare Software 22
3.4.1 Implementarea aplicației 22
3.4.2 Biblioteca de funcții matematice MATLAB 23
3.4.3 Structura aplicației 23
3.4.4 Modulele pentru calculul vitezei folosind semnal sinusiodal continuu 25
3.4.4.1 DeterminareVitezaTreceriPrinZeroSinus 25
3.4.4.2 DeterminareVitezaCorelațiaSinus 25
3.4.4.3 DeterminareVitezaFourierSinus 25
3.4.5 Modulele pentru calculul vitezei folosind un semnal de tip tren de impulsuri 25
3.4.5.1 DeterminareVitezaTreceriPrinZeroTrenImpulsuri 26
3.4.5.2 DeterminareVitezaCorelatieTrenImpulsuri 26
3.4.5.3 DeterminareVitezaFourierTrenImpulsuri 26
3.4.5.4 DeterminareVitezaCMMP 26
Testarea anemometrului și rezultate experimentale 27
4.1 Cerințe necesare 27
4.2 Rezultate experimentale 27
4.2.1 Rezultate pentru semnalul sinusoidal continuu 28
4.2.2 Rezultate pentru semnalul tren de impulsuri 31
Concluzii 35
Bibliografie 36
Anexe 1
Specificațiile Ventilatorului 1
Determinare viteză folosind trecerile prin zero – Semnal Sinusoidal 1
Determinare viteză folosind corelația – Semnal Sinusoidal 1
Determinare viteză folosind Transformata Forier Rapidă – Semnal Sinusoidal 1
Determinare viteză folosind trecerile prin zero – Semnal Tren de Impulsuri 1
Determinare viteză folosind corelația – Semnal Tren de Impulsuri 1
Determinare viteză folosind Transformata Fourier Rapidă – Semnal Tren de Impulsuri 1
Determinare viteză folosind metoda celor mai mici pătrate – Semnal Tren de Impulsuri 1
Funcții folosite în algoritmii pentru determinarea vitezei 1
Lista figurilor
Figura 2.1 Anemometru: (a) cu 4 cupe și (b) cu 3 cupe 3
Figura 2.2 Anemometru cu elice 4
Figura 2.3 Anemometrul cu fir cald 4
Figura 2.4 Tipuri de anemometre ultrasonice: 5
Figura 2.5 Circuitul echivalent pentru emițător 7
Figura 2.6 Circuit echivalent pentru receptor 8
Figura 2.7 Diferența de fază pentru semnale sinusoidale continue 10
Figura 2.8 Principiul estimării trecerii prin zero folosind interpolarea 12
Figura 2.9 Două eșantione a semnalului x1, pentru a determina 13
Figura 2.10 Conversia din coordonate rectangulare în coordonate polare 14
Figura 3.1 Schema anemometrului ultarsonic 16
Figura 3.2 Captură de pe osciloscop a semnalului sinusoidal transmis și recepționat 17
Figura 3.3 Schema generatorului de semnal tren de impulsuri 18
Figura 3.4 Captură de pe osciloscop a semnalului transmis, recepționat și a clock-ului. 18
Figura 3.5 Schema anemometrului – simulare în EWB 20
Figura 3.6 Semnalul tren de impulsuri obținut prin simulare 20
Lista tabelelor
Tabelul 3.1 Structura bibliotecii de funcții matematice MATLAB 22
Tabelul 5.1 Rezultate diferenței de timp obținute pentru t=2.5us, f=41kHz 25
Tabelul 5.2 Rezultate calcul viteză cu rezultatele din Tabelul 5.1 și viteza determinată din debit 25
Tabelul 5.3 Rezultate diferenței de timp obținute pentru t=5us, f=41kHz 26
Tabelul 5.4 Rezultate calcul viteză cu rezultatele din Tabelul 5.3 și viteza determinată din debit 26
Tabelul 5.5 Rezultate diferenței de timp obținute pentru t=10us 26
Tabelul 5.6 Rezultate calcul viteză cu rezultatele din Tabelul 5.5 și viteza determinată din debit 26
Tabelul 5.7 Rezultate diferenței de timp obținute pentru t=25us 27
Tabelul 5.8 Rezultate calcul viteză cu rezultatele din Tabelul 5.7 și viteza determinată din debit 27
Tabelul 5.9 Rezultate diferenței de timp obținute pentru t=2.5us 27
Tabelul 5.10 Rezultate calcul viteză cu rezultatele din Tabelul 5.9, și viteza determinată din debit 27
Tabelul 5.11 Rezultate diferenței de timp obținute pentru t=5us 28
Tabelul 5.12 Rezultate calcul viteză cu rezultatele din Tabelul 5.11 și viteza determinată din debit 28
Tabelul 5.13 Rezultate diferenței de timp obținute pentru t=10us 28
Tabelul 5.14 Rezultate calcul viteză cu rezultatele din Tabelul 5.13 și viteza determinată din debit 28
Tabelul 5.15 Rezultate diferenței de timp obținute pentru t=25us 29
Tabelul 5.16 Rezultate calcul viteză cu rezultatele din Tabelul 5.11 și viteza determinată din debit 29
Introducere
Anemometrul ultrasonic este un dispozitiv utilizat pentru a determina viteza fluxului de aer. Ca și aplicabilitate, anemometrul ultrasonic poate fi folosit pentru a monitoriza fluxul de aer în încăperi publice, în sere agricole sau stații meteo. În funcție structura lor, anemometrele pot furniza date și despre direcția vântului sau temperatură.
În lucrarea de față ne propunem să construim un anemometru ultrasonic unidimensional pentru a determina viteza vântului. Determinarea vitezei presupune utilizarea mai multor metode, cum ar fi:
Determinarea vitezei din debitul prin secțiune, valoare folosită pentru referință pentru cea de-a doua metodă și anume
Determinarea vitezei din măsurătorile făcute în urma aplicării unor semnale diferite. Aceasta mai implică aplicarea altor metode de calcul a diferenței de timp, cum ar fi:
Metoda trecerilor prin zero;
Corelație;
Aplicatrea Transformatei Fourier Rapidă;
Metoda celor mai mici pătrate.
Vântul este simulat cu ajutorul unui ventilator alimentat la diferite tensiuni. Cu cât tensiunea de alimentare crește cu atât crește și viteza fluxului de aer prin tubul aerodinamic construit în jurul traductoarelor. Se folosesc două traductoare, unul pentru transmisie și altul pentru recepție, de aici vine și denumirea de anemometru ultrasonic unidimensional pentru că folosește o pereche de traductoare. Traductoarele sunt așezate la o distanță relativ mică unul față de celălalt așa încât semnalele folosite să poate fi transmise și recepționate în condiții normale, pentru a putea determina cât mai corect valoarea vitezei. Se recomandă o distanță între 10-20 cm. Ca model, alegem traductoare de tipul MA40E8-2, fiind construite din materiale piezoelectrice cu proprietăți electromecanice foarte bune.
Pentru analiza vitezei vântului folosim două tipuri de semnale: semnal sinusoidal continuu și semnal de tip tren de impulsuri. Generarea semnalelor se face în mod diferit:
Semnalul sinusoidal continuu este generat folosind un generator de semnal de la Hameg Instruments, modelul HM 8030-5. Frecvența semnalului este de 40.63 kHz.
Semnalul de tip tren de impulsuri este generat de un numărător binar MC4040. Ieșirile numărătorului sunt folosite pentru a crea un semnal de 8 impulsuri, după care se generează o pauză pentru a putea recepționa semnalul. Pentru că nu este semnal continuu iar la recepție la aceleași momente de timp semnalul transmis nu poate fi corelat cu semnalul recepționat, generăm un semnal de clock, cu aceeași frecvență ca și semnalul tren de impulsuri de la generatorul de semnal HM 8030-5. Generatorul este setat ca să transmită un semnal tren de impulsuri continue.
Vizualizarea semnalelor transmise și recepționate se face cu ajutorul unui osciloscop Tektronix, modelul TDS2024B. Acest model dispune de o interfață USB unde putem atașa o memorie externă pentru a putea salva informațiile de pe ecranul osciloscopului.
După salvarea datelor, acestea sunt introduse în calculator pentru a putea fi procesate și astfel să determinăm viteza vântului. Practic, viteza depinde de intervalul de timp care trece între transmisie și recepție și de distanța parcursă. De aceea procesarea se referă de fapt, la analiza semnalelor transmise și recepționate de cele două traductoare pentru determinarea diferenței de timp. Metodele folosite pentru analiză sunt folosite în mod diferit, în funcție de tipul semnalului.
Astfel că pentru semnalul de tip sinusoidal continuu folosim trei metode de determinare a vitezei:
Determinarea trecerilor prin zero;
Prin corelație;
Folosind algoritmul Transformatei Fourier Rapidă.
Pentru semnalul tren de impulsuri mai adăugăm o metodă prin care facem recunoașterea semnalului transmis în cel recepționat. Se folosește metoda celor mai mici pătrate între un semnal de filtrare, sub forma unui sinus a cărui amplitudine crește în timp, și semnalul recepționat.
Deci, pentru determinarea vitezei vântului atunci când semnalul transmis este sub forma unui tren de impulsuri, avem următoarele metode:
Determinarea trecerilor prin zero;
Prin corelație;
Folosind algoritmul Transformatei Fourier Rapidă;
Metoda celor mai mici pătrate.
Lucrarea este structurată în șase capitole, în care se descriu etapele realizării proiectului. Structurarea este realizată astfel:
Capitolul 1. Introducere – se descrie motivația alegerii temei, obiectivele generale ale lucrării, metodologia și instrumentele utilizate.
Capitolul 2. Fundamentarea teoretică și documenatrea bibliografică – în acest capitol se descriu tipurile de anemometre folosite pentru măsurarea vitezei vântului existente. Se descrie structura anemometrului ultrasonic unidimensional, precum și modelarea internă a emițătorului și receptorului. Pentru că în calculul vitezei ne folosim de întârzierea între semnale, se amintesc câteva noțiuni fundamentale despre aceasta. Deasemenea se descriu pe scurt metodele de determinare a acestei întârzieri. Se descrie și o metodă de aflare a vitezei care implică cunoaștrea secțiunii tubului aerodinamic și valoarea tensiunii aplicate ventilatorului. Această valoare astfel determinată este ca referință pentru valoarea pe care dorim să o alfăm din măsurătorile făcute.
Capitolul 3. Proiectarea anemometrului – se descriu parametrii componentelor hardware folosite și structura programului de analiză a semnalelor și determinare a vitezei pe baza analizei făcute. Este descrisă succint partea de simulare a proiectului. Folosind o schemă de modelare a anemometrului și un generator de semnal pus la dispoziție de programul folosit, Electronics WorkBench, am simulat transmisia de semnal între emițător și receptor.
Capitolul 4. Implementarea aplicației – se descrie mediul de programare folosit în proiectarea aplicației, în cazul nostru MATLAB. Se face o descriere generală a întregii lucrări și funcționarea sistemului.
Capitolul 5. Testarea aplicației și rezultate experimentale – se configurează parametrii componentelor hardware pentru a putea pune în funcțiune anemometrul. Se prezintă rezultatele experimentale în urma calcului făcut pe baza relațiilor din capitolul 2.
Capitolul 6. Concluzii – Sunt prezentate realizările obiectivelor propuse în introducerea lucrării.
Fundamentarea teoretică și documentarea bibliografică
2.1 Anemometrul
Anemometrul este un dispozitiv folosit pentru a măsura viteza vântului, este un instrument comun folosit la stațiile meteo. Termenul anemometru provine din cuvântul grecesc anemos care înseamnă vânt și este folosit pentru a descrie orice instrument de măsurare a vitezei vântului folosit în meteorologie sau aerodinamică.
Anemometrele pot fi împărțite în două mari clase:
Pentru măsurarea vitezei vântu unui tren de impulsuri, avem următoarele metode:
Determinarea trecerilor prin zero;
Prin corelație;
Folosind algoritmul Transformatei Fourier Rapidă;
Metoda celor mai mici pătrate.
Lucrarea este structurată în șase capitole, în care se descriu etapele realizării proiectului. Structurarea este realizată astfel:
Capitolul 1. Introducere – se descrie motivația alegerii temei, obiectivele generale ale lucrării, metodologia și instrumentele utilizate.
Capitolul 2. Fundamentarea teoretică și documenatrea bibliografică – în acest capitol se descriu tipurile de anemometre folosite pentru măsurarea vitezei vântului existente. Se descrie structura anemometrului ultrasonic unidimensional, precum și modelarea internă a emițătorului și receptorului. Pentru că în calculul vitezei ne folosim de întârzierea între semnale, se amintesc câteva noțiuni fundamentale despre aceasta. Deasemenea se descriu pe scurt metodele de determinare a acestei întârzieri. Se descrie și o metodă de aflare a vitezei care implică cunoaștrea secțiunii tubului aerodinamic și valoarea tensiunii aplicate ventilatorului. Această valoare astfel determinată este ca referință pentru valoarea pe care dorim să o alfăm din măsurătorile făcute.
Capitolul 3. Proiectarea anemometrului – se descriu parametrii componentelor hardware folosite și structura programului de analiză a semnalelor și determinare a vitezei pe baza analizei făcute. Este descrisă succint partea de simulare a proiectului. Folosind o schemă de modelare a anemometrului și un generator de semnal pus la dispoziție de programul folosit, Electronics WorkBench, am simulat transmisia de semnal între emițător și receptor.
Capitolul 4. Implementarea aplicației – se descrie mediul de programare folosit în proiectarea aplicației, în cazul nostru MATLAB. Se face o descriere generală a întregii lucrări și funcționarea sistemului.
Capitolul 5. Testarea aplicației și rezultate experimentale – se configurează parametrii componentelor hardware pentru a putea pune în funcțiune anemometrul. Se prezintă rezultatele experimentale în urma calcului făcut pe baza relațiilor din capitolul 2.
Capitolul 6. Concluzii – Sunt prezentate realizările obiectivelor propuse în introducerea lucrării.
Fundamentarea teoretică și documentarea bibliografică
2.1 Anemometrul
Anemometrul este un dispozitiv folosit pentru a măsura viteza vântului, este un instrument comun folosit la stațiile meteo. Termenul anemometru provine din cuvântul grecesc anemos care înseamnă vânt și este folosit pentru a descrie orice instrument de măsurare a vitezei vântului folosit în meteorologie sau aerodinamică.
Anemometrele pot fi împărțite în două mari clase:
Pentru măsurarea vitezei vântului;
Pentru măsurarea presiunii vântului.
Pentru că există o legătură între viteză și presiune, un anemometru construit pentru una dintre acestea două va oferi informații și despre cealaltă.
Prima descriere a unui anemometru a fost făcută de Leon Battista Alberti în jurul anului 1450. În 1846, John Thomas Romney Robinson a îmbunătățit proiectul folosind patru cupe semisferice și roți mecanice. Mai târziu, în 1926, John Patterson a dezvoltat anemometrul cu 3 cupe. În 1991 Derek Weston a dezvoltat anemometrul pentru a putea detecta și direcția vântului. Mai recent s-a dezvoltat anemometrul sonic.
2.2 Tipuri de anemometre pentru măsurarea vitezei vântului
2.2.1 Anemometrul cu cupe
(a) (b)
Figura 2.1 Anemometru: (a) cu 4 cupe și (b) cu 3 cupe
2.2.1.1 Anemometrul cu patru cupe sau rotațional
Anemometrul cu patru cupe sau rotațional este unul dintre cele mai vechi tipuri de anemometre. Este format din patru cupe semisferice amplasate simetric la capătul a patru brațe orizontale. Brațele sunt montate la unghiuri egale între ele pe un arbore vertical. Fluxul de aer pune în mișcare cupele pe o direcție orizontală rotind arborele astfel încât să fie proporțional cu viteza vântului. Astfel numărând de câte ori se rotește brațul în anumite perioade de timp determinăm o medie a vitezei vântului pe o gamă largă de viteze.
La un anemometru cu patru cupe putem observa ușor acest fenomen din cauza brațelor așezate simetric. Fluxul de aer acționează asupra părții goale a cupei deplasând-o așa încât cupa opusă ei să fie cu partea concavă în direcția vântului.
Când a fost creat primul astfel de anemometru s-a afirmat că mișcarea cupelor reprezintă o treime din viteza vântului fără a se ține cont de mărimea cupelor sau de lungimea brațelor pe care sunt așezate. Însă această afirmație s-a dovedit a fi incorectă deoarece detaliile de construcție ale anemometrului sunt un factor important în determinarea vitezei vântului.
2.2.1.2 Anemometrul cu trei cupe
Anemometrul cu trei cupe semisferice construit în anul 1926 de canadianul John Patterson, a fost îmbunătățit ulterior în 1935 de Brevoort & Joiner din Statele Unite ale Americii. Acest tip de anemometru este bazat pe un model linear cu erori mai mici de 3% și poate determina valori ale vitezei de până la 97 km/h. Patterson a descoperit că fiecare cupă produce un cuplu maxim atunci când este așezată la 450 față de fluxul de aer. Aceeași idee a respectat-o și în construcția anemometrului cu trei cupe ca să aibă un cuplu constant și să reacționeze mai repede la fluxuri de aer mai puternice.
În anul 1991, australianul Derek Weston a modificat anemometrul cu 3 cupe ca să poată măsura și direcția vântului. El a marcat una din cupe pentru ca viteza rotațiilor să crească sau să descrească în funcție de mișcarea alternativă a etichetei puse.
2.2.2 Anemometrul cu elice
Figura 2.2 Anemometru cu elice
Față de anemometrul cu cupe, construcția anemometrului cu elice este diferită. Axul de rotație este paralel cu direcția vântului. Deoarece direcția vântului se schimbă și axul de rotație se schimbă odată cu aceasta.
Viteza ventilatorului este măsurată de un instrument care măsoară numărul de rotații folosite de un chip electronic pentru a calcula viteza. Putem obține rezultate foarte bune dacă direcția vântului este constantă.
2.2.3 Anemometrul cu fir cald
Figura 2.3 Anemometrul cu fir cald
Anemometrul cu fir cald este construit dintr-un fir subțire (de ordinul micrometrilor) încălzit electric până la o temperatură mai mare decât temperatura mediului în care se află. Fluxul de aer are o temperatură mai scăzută răcind firul. Cum rezistența electrică a majoritatății metalelor depinde de temperatură, se poate obține o relație între rezistența firului și viteza fluxului de aer.
În funcție de cum se calculează această relație, dispozitivele cu fir cald pot fi clasificate în:
Anemometre în curent constant;
Anemometre în voltaj constant;
Anemometre în temperatură constantă.
La ieșirea anemometrelor cu fir cald rezultă o tensiune constantă calculată cu ajutorul unor circuite din interiorul dispozitivului respectându-se Legea lui Ohm.
Se mai folosesc anemometrele PWM care folosesc lungimea unui semnal de curent periodic. Acest semnal periodic de curent încălzește firul până la o rezistență specifică apoi se oprește până atinge un prag inferior. La atingerea pragului inferior pulsul este retrimis.
Anemometrele cu fir cald sunt delicate însă au o frecvență de răspuns foarte mare și o rezoluție spațială bună în comparație cu alte metode de măsurare.
2.3 Anemometrul ultrasonic
Figura 2.4 Tipuri de anemometre ultrasonice:
(a) unidimensional;
(b1) bidimensional pe 2 căi;
(b2) bidimensional pe 3 căi;
(c) tridimensional.
Anemometrul ultrasonic a fost dezvoltat în anii 1950 și folosește unde ultrasonice pentru a măsura viteza vântului. Are la bază principiul de măsurare a intervalului de timp în care unda este transmisă între două traductoare. În funcție de numărul de perechi de traductoare se pot măsura viteze într-o singură dimensiune, două sau trei dimensiuni.
Dimensiunea spațială (precizia cu care face măsurătorile în spațiu) este dată de lungimea distanței între traductoare, de obicei între 10 – 20 cm. Dimensiunea temporală (precizia cu care face măsurătorile în timp) este foarte bună, 20 Hz sau mai mare. De aceea anemometrul ultrasonic este frecvent folosit atunci când măsurătorile pot fi afectate de turbulențe externe.
Ca avantaj, față de anemometrul cu elice sau cel cu cupe, anemometrul ultrasonic poate fi folosit chiar și atunci când în mediu exterior există praf. Acest factor extern nu influențează rezultatele obținute.
Principalul dezavantaj al anemometrului ultrasonic îl reprezintă distorsionarea semnalului datorată structurii de susținere a traductoarelor. Efectul se poate minimaliza dacă se folosește un tunel aerodinamic. Tunelul aerodinamic este un dispozitiv utilizat în aerodinamică pentru studiul forțelor care acționează asupra unui corp care se deplasează în aer. Este constituit dintr-un tub închis în mijlocul căruia este plasat obiectul de studiat. Deplasarea aerului față de corp este simulată prin intermediul unui ventilator sau compresor.
Un alt dezavantaj al anemometrului ultrasonic este precizia mai mică a colectării datelor în condiții de precipitații deoarece stropii de ploaie pot crea variații ale vitezei sunetului.
2.3.1 Anemometrul ultrasonic unidimensional
Este format din două traductoare așezate unul în fața celuilalt la o distanță cunoscută. Un traductor poate funcționa și ca transmițător de semnal și ca receptor de semnal. Distanța între cele două traductoare variază de la un anemometru la altul, dar de obicei este între 10 – 20 cm.
Emițătorul trimite un semnal pe care receptorul îl preia. Intervalul de timp care trece între momentul transmisiei și recepției este folosit în calculul determinării vitezei.
2.3.2 Anemometrul ultrasonic bidimensional
Este folosit în aplicații ale stațiilor meteo, navigare, turbine de vânt, aviație și în construcția geamandurilor.
Există două tehnologii pentru un senzor bidimensional:
Cu două direcții – format din 4 brațe, pe fiecare existând câte un traductor. Cele 4 traductoare sunt în pereche, creeând astfel două dimensiuni. Este mai comun fabricanților de senzori de vânt. Dezavantajul acestui tip de anemometru sunt turbulențele de aer produse de fluxul de aer din jurul brațelor create de un vânt mai puternic. Astfel își pierde din precizia măsurătorilor.
Cu trei direcții – format din 3 brațe. Au o direcție în plus pentru măsurătoare ceea ce îmbunătățește precizia senzorilor și scade din turbulențele de aer.
2.3.3 Anemometrul ultrasonic tridimensional
Este folosit pentru măsurarea direcției vântului și viteza vântului pe toate direcțiile spațiale. Anemometrul tridimensional nu necesită întreținere și are o uzură redusă. Este echipat cu încălzire pentru a efectua operații și pe timpul rece în condiții extreme.
2.4 Traductorul
În modelul anemometrului am specificat existența unor traductori. Traductorul este un aparat electric sau electromagnetic care servește la transformarea semnalelor de orice natură în semnale de orice altă formă. Traductorul ultrasonic este un dispozitiv care convertește energia în ultrasunet sau unde sonore care depășesc limita de auz normală a omului.
Traductorul folosit este de tipul MA408-2 care funcționează ca emițător și ca receptor de semnal. Sunt construite din substanțele piezolectrice, de exemplu , cu proprietăți electromecanice foarte bune.
2.4.1 Modelarea funcțiilor traductorului
2.4.1.1 Modelarea Emițătorului
Schema internă a emițătorului este ilustrată în Figura 2.5.
Figura 2.5 Circuitul echivalent pentru emițător
Valorile numerice pentru componentele interne ale emițătorului determinate experimental folosind funcția de transfer :
Notăm Zm, impedanța elementelor legate în serie Rm, Cm, Lm:
Reactanța condensatorului Ce este:
Folosind relațiile (2.1) și (2.2), funcția de transfer a transmițătorului este:
Notăm:
Folosind notațiile (2.3), (2.4) și (2.5) rezultă relația (2.6) . Relația funcției de transfer reprezintă raportul între tensiuni, și frecvența aplicată emițătorului.
2.4.1.2 Modelarea Receptorului
Schema internă a receptorului este ilustrată în Figura 2.6.
Valorile numerice pentru componentele interne ale receptorului determinate experimental folosind funcția de transfer:
Fie Zm, impedanța elementelor legate în serie Rm, Cm, Lm:
Reactanța condensatorului Ce este:
Folosind relațiile (2.7) și (2.8), determinăm funcția de transfer a receptorului:
Notăm:
După înlocuirea cu notațiile (2.9), (2.10) și (2.11) rezultă relația (2.12).
2.5 Faza unui semnal
Dacă în cele prezentate mai sus am vorbit despre construcția și utilizarea anemometrului, în cele ce urmează vom introduce câteva noțiuni despre semnale și anume, măsurarea fazei dintre semnale.
Noțiunea de fază este asociată cu semnale periodice. Pentru astfel de semnale ne putem gândi la fază ca fiind o fracțiune dintr-o perioadă. În practică se măsoară faza între două semnale cu aceeași frecvență. Pentru aceasta există mai multe metode de măsurare,cum ar fi detectarea trecerii prin 0 a semnalelor, aplicarea transformatei Fourier rapidă sau corelația între semnale.
Considerăm două semnale sinusoidale, cu aceeași amplitudine și frecvență:
unde:
A- aplitudinea semnalului;
f – reprezintă frecvența semnalului;
– frecvența unghiulară;
(theta)– diferența de fază. O valoare negativă reprezintă o întârziere iar o valoare pozitivă este creștere.
Spunem că semnalul y(t) este defazat față de semnalul x(t) cu grade/radiani. se mai numește și diferența de fază între cele două semnale. Dacă este mai mare de 180 grade (radiani) spunem despre cele două semnale că sunt în antifază astfel apare inferența distructivă întrucât undele au un deplasament opus iar la suprapunere se anulează reciproc.
Figura 2.7. ilustrează diferența de fază între două semnale sinusoidale continue.
Figura 2.7 Diferența de fază pentru semnale sinusoidale continue
Trebuie să avem în vedere ca diferența de fază între semnale să fie luată atunci când semnalele au același trend, fie crescător, fie descrescător. Asta putem observa în Figura 2.7.
2.6 Viteza semnalelor
În subcapitolul anterior am amintit depre noțiunea de fază. În continuare vom reaminti câteva noțiuni despre viteză și cum putem determina viteza folosind diferența de fază între semnale. Ne vom referi în acest subcapitol la diferența de fază ca fiind diferența de timp între semnalul emis și cel recepționat.
Viteza reprezintă raportul între distanța parcursă și durata deplasării corpului. Viteza medie a punctului material este raportul dintre vectorul deplasare și intervalul de timp în care s-a efectuat deplasarea. Formula (2.15) arată această dependență:
2.6.1 Calculul vitezei din debitul de aer prin secțiune
O metodă de a determina viteza vântului este de a cunoaște debitul de vânt prin secțiune. Astfel putem folosit Formula (2.16) pentru a determina viteza vântului din informațiile pe care le avem despre debit. În lucrare ne referim la debitul de vânt prin secțiune creat de ventilator.
;
unde:
– viteza vântului;
– debitul vântului creat de ventilator prin secțiune;
S – secțiunea tubului;
Debitul depinde de turația ventilatorului iar turația ventilatorului depinde de tensiunea aplicată acestuia. Potrivit foii de catalog a ventilatorului folosit, pentru o tensiune de 12V aplicată ventilatorului debitul este:
;
Folosind valoarea , putem determina ușor debitul pentru fiecare valoare a tensiunii aplicate ventilatorului.
;
unde:
– debitul prin secțiunea tubului pentru o anumită valoare a tensiunii;
– tensiunea aplicată ventilatorului;
Înlocuind relația (2.17) în relația (2.16), determinăm valoarea vitezei vântului și o folosim ca valoare de referință pentru viteza determinată din diferența de fază a semnalului emis și cel recepționat.
2.6.2 Calculul vitezei folosind diferența de fază
Viteza sunetului este unul dintre parametrii care descriu propagarea sunetului printr-un mediu. Această viteză depinde de proprietățile mediului de propagare, în special de elasticitatea și densitatea acestuia. În aer, viteza sunetului depinde în primul rând de temperatură iar pentru a determina această viteză folosim Formula (2.18):
unde:
c – viteza sunetului ;
= 331.45- reprezintă viteza sunetului la temp de 0 oC;
– factor de corecție pentru a obține viteza semnalului la o temperatură oarecare T.
Pentru situațiile de calm, când nu aplicăm un flux de aer asupra traductoarelor, considerăm viteza sunetului având formula (2.19):
unde: – reprezintă timpul în care semnalul parcurge distanță d.
Pentru situațiile în care fluxul de aer este perturbat de ventilator, la viteza sunetului se adună viteza fluxului apărut. Deci vom avea formula (2.20) pentru viteză:
unde: – – reprezintă timpul în care semnalul parcurge distanța d.
– v – viteza fluxului de aer, pe care dorim să o determinăm.
În funcție de cum amplasăm ventilatorul vom avea viteza fluxului cu +, sau cu -. Dacă îl punem de la emițător spre receptor va fi cu + pentru că are același sens cu propagrarea sunetului. Dacă în punem de la receptor spre emițător va fi cu -, întrucât sensurile sunt diferite.
Diferența de timp,, este dată de formula (2.21):
După determinarea diferenței de fază între semnalul transmis și cel recepționat folosind metodele descrise în subcapitolele umătoare, putem determina viteza vântului folosind formula (2.19).
unde:
– viteza vântului de detrminat;
– diferența de timp dată de Formula (2.21);
– distanța între transmițător și receptor;
– viteza sunetului determinată cu formula (2.18).
În continuare vom descrie câteva metode de calcul pentru .
2.6.2.1 Calcul folosind trecerilor prin zero
O primă metodă este determinarea trecerilor prin zero a semnalelor folosind interpolarea liniară. Trecerea prin zero reprezintă de fapt un punct în care semnul unei funcții matematice se schimbă(ex: de la negativ la pozitiv). Folosind aceasta metodă pentru două semnale, putem determina diferența de fază între ele.
Pentru ca semnalele sunt afectate de zgomote din cauza mediului exterior, se propune un algoritm simplu pentru a înlătura acest tip de zgomote. Algoritmul propus este o medie aritmetică a ultimelor M eșantioane din secvența semnalului x[n]. Algoritmul este descris de relația (2.23). (Mihu, 2005).
Pentru detectarea trecerilor prin zero folosim metoda interpolării liniare. În Figura 2.8 sunt prezentate două semnale eșantionate , , având perioada de eșantionare Te.
Figura 2.8 Principiul estimării trecerii prin zero folosind interpolarea
Considerăm două eșantioane din semnalul x1, ca în Figura 2.9.
Figura 2.9 Două eșantione a semnalului x1, pentru a determina
Folosindu-ne de perioada de eșantionare Te și de valorile semnalului la momentele i și i+1, putem determina trecerea prin 0 la momentul t=i , ,cu formula (2.24):
Pentru că frecvența semnalelor este diferită, vom avea mai multe sau mai puține de astfel de treceri de aceea facem o medie a valorilor determinate și obținem pentru fiecare semnal. Diferența absolută între pentru semnalul transmis și pentru semnalul recepționat, reprezintă de fapt întârzierea între semnalele considerate. Cu valoarea astfel determinată înlocuim în formula (2.22) și aflăm viteza vântului.
2.6.2.2 Calcul folosind Transformata Fourier Rapidă
Transformata Fourier Rapidă (Fast Fourier Transform-FFT (eng)) reprezintă un algoritm de calcul pentru Transformata Fourier Discretă. Acest algoritm este mai eficient reducând uneori timpul de calcul de mii de ori. Transformata Fourier Discretă Directă face trecerea din domeniul timp în domeniul frecvență.
Folosim următoarele notațiile:
– x[ ] – semnalul reprezentat în domeniul timp(este notat cu litere mici);
– X[ ] – semnalul reprezentat în domeniul frecvență (este notat cu litere mari).
Considerăm numărul de eșantioane reprezentat de variabila N. Astfel în domeniul timp semnalul x[ ] constă din N eșantioane iar în domeniul frecvență, DFT produce două semnale: partea reală notată ReX[ ] și partea imaginară notată Im X[ ]. Cele două semnale sunt formate fiecare din N/2+1 eșantioane (Smith-1999).
În domeniul frecvență semnalele pot fi reprezentate folosind coordonatele rectangulare(ReX[] și ImX[]) sau coordonatele polare.
Astfel, coordonatele rectangulare ReX[ ] și ImX[ ] sunt înlocuite cu:
Mag X[ ] – reprezintă magnitudinea (amplitudinea) undei cosinus;
Phase X[ ] – reprezintă fază unghiului undei cosinus.
Pentru a înțelege mai bine aceste noțiuni considerăm adunarea unei unde cosinus cu o undă sinus având fiecare aceeași frecvență. Rezultatul este o undă cosinus cu aceeași frecvență dar cu amplitudine diferită și o deplasare de fază, ca în relația (2.25). (Smith, 1999)
unde:
M – reprezintă magnitudinea semnalului;
– reprezită faza semnalului.
Astfel nu se pierde nicio infomație. Informațiile conținute în amplitudinile A, B se regăsesc în variabilele M și . Figura 2.10 arată dependența între variabilele A,B, M și . M și sunt de fapt coordonatele polare.
Figura 2.10 Conversia din coordonate rectangulare în coordonate polare
Dacă avem una din cele două perechi de valori, putem determina cealaltă pereche folosind formulele (2.23) (Smith, 1999)
2.6.2.3 Calcul folosind corelația
Considerând o secvență de intrare și o secvență dată de lungime constant M, relația de definiție a corelației dintre și este urrmătoarea:
Corelația are importante aplicații practice. Astfel ea poate servi la identificarea unor forme cunoscute în evoluția semnalului. Să presupunem că trebuie să identificăm forma în semnalul . Numim semnalul șablon pe care îl plimbăm de-a lungul semnalului . În momentul coincidenței șablonului cu o parte din semnalul , rezultatul produs de algoritmul (2.27) va fi maxim. Chiar dacă semnalul este înecat în zgomot, în momentele în care forma semnalului este apropiată de cea a șablonului, rezultatul produs de algoritm va fi tot unul de aplitudine mare.
Se produce deci un rezultat de valoare maximă atunci când șablonul se potrivește cel mai bine cu semnalul. În literatura de specialitate, acest algoritm este cunoscut și sub denumirea de template matching (eng).
O aplicație tipică este radarul, la care corelația permite recunoașterea semnalelor reflectate de la un avion. Semnalul emis are o anumită formă (șablon). După reflexia lui de pe suprafața unui avion, el se poate întoarce înapoi cu o amplitudine extrem de mică și este recepționat alături demulte alte zgomote. Dacă se face corelația semnalului emis cu cel recepționat, maximul acestuia va indica existența unui obiect în câmpul de cercetare al radarului. (Mihu, 2005)
2.6.2.4 Calcul folosind metoda celor mai mici pătrate
Această metodă o folosim,aici în lucrare, numai pentru semnalele de tip tren de impulsuri.
Considerând o secvență de intrare și o funcție cu M coeficienți de filtrare. Ieșirea este dată aplicând suma diferențelor la pătrat este dată de formula (2.28). Trebuie să căutăm minimul din .
Funcția este o funcție de tip sinus, a cărei amplitudine crește liniar. Prin această metodă se urmărește dacă modelul funcției h se potrivește cel mai bine în sensul celor mai mici pătrate. Adică, după aplicarea algoritmului (2.28), luăm valorile cele mai mici din noul semnal. Se ridică la pătrat pentru că ne interezează modulul lor.
Funcția h(n) este de forma (2.29):
Unde:
– ;
– a,b,c sunt constante determinate experimental;
Proiectarea anemometrului ultrasonic
3.1 Introducere
În capitolul anterior am vorbit despre ce este un anemometru ultrasonic, la ce folosește și despre implementarea lui internă. Deasemenea am vorbit despre semnale, acestea fiind practic principalul intrument cu care lucrează anemometrele ultrasonice.
În continuare vom analiza proiectarea fizică unui astfel de anemometru. Schema construcției anemometrului ultrasonic este prezentată în Figura 3.1.
Figura 3.1 Schema anemometrului ultarsonic
Notații:
d – distanța între transmițător și receptor;
R – rezistență pusă pe canalul 2 al osciloscopului pentru a putea colecta rezultatul de la receptor; reduce zgomotul
Pentru a putea vizualiza atât semnalul emis cât și cel recepționat se folosește osciloscpul Tektronix TDS2024B. Pe canalul 1 al osciloscopului se captează unda emisă iar pe canalul 2 unda recepționată.
Proiectarea anemometrului ultrasonic presupune construcția sistemului confom schemei din Figura 3.1. Un alt pas este determinarea exactă a vitezei vântului, după ce informațiile luate de osciloscop sunt introduce în calculator, folosind mediul de dezvoltare MATLAB.
3.2 Componente Hardware
Ca și componente hardware folosite pentru proiectarea anemometrului este nevoie de:
Două traductoare;
Generator de semnal, pentru generarea semanelor: sinusoidal sau tren de impulsuri;
Osciloscop pentru colectarea datelor trimise și recepționate;
Ventilator căruia îi aplicăm tensiuni diferite obținând astfel diferite fluxuri de aer.
Tub aerodinamic pentru a acoperi traductoarele și ventilatorul așa încât să nu avem turbulețe din exterior.
3.2.1 Traductoarele
În subcapitolul 2.4 am vorbit despre traductor și despre modelarea lui internă. Pentru proiectarea anemometrului unidimensional avem nevoie de două traductoare. Fiecare dintre ele funcționând și ca emițător și ca receptor. Ca model alegem traductoare de tipul MA40E8-2, fiind construite din materiale piezoelectrice cu proprietăți electromecanice foarte bune.
Aceste două traductoare sunt așezate la o distanța 13.3 cm unul față de celălalt. Alegem un traductor care să fie emițător și îi aplicăm un semnal de la generatorul de semnal. Celălalt recepționează semnalul cu o anumită întârziere și o amplitudine mai mică din cauza zgomotelor din exterior.
3.2.2 Generator de semnal
Semnalele folosite pentru transmitere sunt de tipul: semnal sinusoidal continuu și tren de impulsuri.
Semnalul sinusiodal continuu se aplică de la un generator de semnal Hameg HM 8030-5, care are posibilitatea modificării frecvenței semnalului așa încât să se poată determina cu o precizie cât mai bună viteza vântului dorită. Figura 3.2 reprezintă o captură de la osciloscop a undei de semal transmisă și cea recepționată.
Figura 3.2 Captură de pe osciloscop a semnalului sinusoidal transmis și recepționat
Semnalul tren de impulsuri se generezează cu ajutorul unui numărător construit ca în schema din Figura 3.3.
Figura 3.3 Schema generatorului de semnal tren de impulsuri
Numărătorul binar MC4040 este un tip de circuit asincron (cu transport succesiv) de 12 biți. Numărătorul incrementează pe frontul negativ al fiecărui impuls la intrarea în tact. Circuitul este resetat (toate ieșirile trec în zero) când se aplică 1 pe intrarea RESET. Intrarea de tact este prevăzută cu trigger Schmitt, care permite lucrul cu impusuri ale cărori fronturi sunt oricât de lente. Toate ieșirile sunt prevăzute cu etaje buffer. Viteza medie de operare este de 16 MHz, pentru VDD =10V.
Acesta numără 8 tacte după care are o pauză timp în care semnalul ajunge la receptor. Apoi se reia procedeul. Aceste tacte sunt sincronizate cu un semnal de clock de la generatorul de semnal Hameg HM 8030-5 (în Figura 3.3 CLK).
Figura 3.4 reprezintă o captură de pe osciloscop a semnalului tren de impulsuri transmis, semnalul recepționat și semnalul de clock pentru referință.
Figura 3.4 Captură de pe osciloscop a semnalului transmis, recepționat și a clock-ului.
3.2.3 Osciloscopul
Osciloscopul este folosit pentru a putea colecta datele de la cele două traductoare. Folosesc un osciloscop modelul Tektronix – TDS2024B
Printre funcționalitățile acestui osciloscop avem și posibilitatea salvării unor eșantioane ale semnalelor emise și recepționate. Osciloscopului i se poate atașa o memorie USB unde se salvează informațiile despre semnale. După introducerea memoriei USB putem creea un nou fișier folder în care salvăm toate de care avem nevoie. În fișierul nou creat de fiecare dată când salvăm o dată se creează automat un alt fișier folder cu denumirea ALL+NR (NR- este de forma 0000, 0001, 0002, ș.a.m.d), de exemplu ALL0000. În interior sunt salvate informațiile de la fiecare canal al osciloscopului într-un fișier .csv cu denumirea F+NR+CHx.csv (CHx-reprezintă canalul CH cu numărul x), de exemplu F0000CH1.csv. Deasemenea mai avem o imagine .bmp cu denumirea F+NR+TEK.bmp (TEK-vine de la denumirea osciloscopului TEKTRONIX), de exemplu F0000TEK.bmp. Mai avem și un fișier F+NR+TEK.set, unde ne sunt descrise toate setările făcute osciloscopului.
Ceea ce ne este folositor sunt fișierele .csv unde avem salvate practic informații despre semnalele pe care le vom procesa pentru a determina viteza vântului. Astfel trebuie să ținem cont pe ce canele sunt semnalele transmise și recepționate așa încât la parsarea fișierelor să utilizăm exact datele de acre avem nevoie.
Fișierele .csv, în acest caz, sunt organizate pe 2500 de linii și 5 coloane. În primele linii avem informații referitoare la semnale, tipul osciloscopului și setările canalului. Cele mai inportante sunt pe coloanele 4 și 5 unde sunt memorate momentele de timp la care s-au efectuat eșantionările, respectiv valoarea semnalului la acel moment.
Informațiile necesare nouă extrase din fișiere sunt:
Numărul de eșantioane, N, salvate de osciloscop. Din foaia de catalog știm ca N=2500;
Perioada de eșantionare a semnalelor,Te. Este diferită de la o măsurătoare la alt;
Un vector coloană cu N informații referitoare la timpul eșantionării;
Un vector coloană cu N informații referitoare la valoarea semnalului la momentul eșantionării;
Cu valorile de mai sus, putem reconstitui în calculator, folosindu-ne de programe speciale, semnalele continue. Iar cu aceste informații putem calcula matematic, folosind formulele amintite în capitolul 2, viteza vântului.
3.2.4 Ventilatorul și Tubul aerodinamic
Alegem ca tip de ventilator unul folosit la ventilarea aerului printr-un PC, de exemplu ventilatorul SUNON, EEC0381B1-0000-A99, FAN, STANDARD, 120MM, 12VD, vezi Anexa 1 pentru specițicații. Acest ventilator ne ajută să creem fluxuri de aer a căror viteză dorim să o determinăm. Fluxurile de aer sunt diferite în funcție de tensiune de alimentare pe care o dăm ventilatorului.
Astfel aplicăm, pe rând, tensiunile: (0, 4.4, 6.03, 7.62, 8.87, 11.84) [V] , și luăm de fiecare dată valorile semnalului transmis și recepționat cu ajutorul osciloscopului. Tensiunea de 0V corespunde situației de calm când nu este aplicat nici un flux de aer asupra traductoarelor.
Tubul aerodinamic este constituit dintr-un tub în interiorul căruia sunt plasate traductoarele. Deplasarea aerului față de acestea este realizată cu ajutorul ventilatorului. Secțiunea tubului este de 0.032175 m2.
În subcapitolul 2.7 am explicat cum se determină viteza deplasării aerului cunoscând secțiunea și tensiunea aplicată. Folosind formula (2.22) determinăm viteza vântului. Această viteză este de referință pentru viteza determinată cu ajutorul diferenței de fază între semnalul transmis și cel recepționat.
3.3 Simularea funcționării componentelor hardware
Pentru partea de simulare a funcționării componentelor am folosit programul Electronics WorkBench (EWB) care are un pachet de elemente pentru simularea circuitelor electronice. Ne permite să proiectăm și să analizăm circuite fără să folosim plăci de testare, componente sau intrumente reale. Este ușor de folosit, doar apăsăm pe elemnt și îl ”tragem” în fereastra de proiectat. Putem să schimbăm paramentrii și componentele circuitelor foarte ușor.
Schema folosită pentru simulare este reprezentată în Figura 3.5.
Figura 3.5 Schema anemometrului – simulare în EWB
Voltage gain – bloc folosit pentru simularea vântului (40mV/V, factor 1/50).
Generatorul de semnal este de forma unui generator de tren de impulsuri sau folosim un generator de semnal sinusoidal continuu pus la dispoziție de program. Setările genratorului se fac în conformitate cu setările reale.
Figura 3.6 Semnalul tren de impulsuri obținut prin simulare
3.4 Componente și Implementare Software
3.4.1 Implementarea aplicației
Pentru a fi mai ușor de implementat folosim mediul de dezvoltare MATLAB. Este un pachet de programe de înaltă performanță, interactiv, destinat calculului matematic, științific și ingineresc. MATLAB integrează calculul, programare și vizualizare într-un mediu de lucru prietenos, soluționarea problemelor presupunând folosirea notațiilor matematice clasice.
MATLAB este un produs al companiei americane The Mathworks și lucrează sub Windows, Unix, LINUX și Machintosh. MATLAB include toate facilitățile unui limbaj complet de programare, admițând interfețe cu limbajul de programare C,C++ și FORTRAN. Programul a cunoscut o puternică evoluție în decursul anilor, reprezenând astăzi în mediile universitare o unealtă standard de calcul, fiind asociată diverselor cursuri introductive sau avansate în matematică, știință și inginerie.
Versiunea completă a pachetului de programe MATLAB conține o întreagă familie de module specifice, denumite tool-box-uri, respectiv blockset-uri, care permit rezolvarea unor aplicații din diverse domenii cum ar fi: mașini, aparate și acționări electrice, aplicații DSP, procesare de semnal etc.
Aceste module sunt colecții de funcții MATLAB (fișiere .m), ușor de asimilat, care extind puterea de calcul a pachetului de programe MATLAB în vederea rezolvării unor clase particulare de probleme. Colecția de module MATLAB conține: Simulink, DSP, Control System etc.
Structura sistemului MATLAB constă în cinci părți principale:
Mediul de dezvoltare
Biblioteca de funcții matematice MATLAB
Limbajul MATLAB
Handle Graphics
MATLAB Application Program Interface (API)
Implementarea aplicației de calcul a vitezei vântului este împărțită în mai multe module, în funcție de semnalul aplicat și de metoda aplicată. Semnalele pot fi de tipul semnal sinusoidal continuu și tren de impulsuri.
Pentru calculul propus am întâmpinat dificultăți la calcule, datorate zgomotelor care au afectat eșantionarea semnalelor. Valorile folosite au trebuit să fie filtrate, pentru a obține rezultate cât mai concrete.
3.4.2 Biblioteca de funcții matematice MATLAB
Biblioteca de funcții matematice MATLAB constă într-o vastă colecție de algoritmi de calcul, pornind de la funcții elementare precum sumă, sinus, cosinus și aritmetică complexă, până la funcții mai sofisticate precum inversare de matrici, calcul de valori proprii, funcții Bessel, și transformata Fourier. Funcțiile matematice sunt organizate în 8 directoare, descrise țn Tabelul 3.1:
Tabelul 3.1 Structura bibliotecii de funcții matematice MATLAB
În afară de funcțiile elementare pentru matrici și funcții matematice, am mai folosit funcții pentru analiza datelor și transformările Fourier,cum ar fi:
fft() – pentru a determina faza semnalelor;
xcorr() – pentru a realiza corelația între semnalul transmis și cel recepționat;
Pentru a putea citi datele dintr-un fișier .csv, MATLAB ne pune la dispoziție o funcție specială numită csvread().
3.4.3 Structura aplicației
Conceptual, proiectul poate fi împărțit în următoarele module generice:
Construcția anemometrului
Partea control a aplicației
În acest sens în aplicație vom putea observa următoarele fișiere cu nume aferente:
Determinare viteză folosind un semnal sinusoidal continuu
determinareVitezaTreceriPrinZeroSinus;
determinareVitezaFourierSinus;
determinareVitezaCorelatieSinus.
Determinare viteză folosind un semnal de tipul tren de impulsuri
determinareVitezaTreceriPrinZeroTrenImpulsuri;
determinareVitezaFourierTrenImpulsuri;
determinareVitezaCorelatieTrenImpulsuri;
determinareVitezaSumaDiferentelorLaPatrat.
Fiecare modul are o parte de citire a datele din fișierele .csv. Formatul unui astfel de fișier este descris astfel:
Record Length,2.500000e+03,, -0.001960000000, 0.08000,
Sample Interval,2.000000e-06,, -0.001958000000, 0.00000,
Trigger Point,9.800000000000e+02,, -0.001956000000, 0.00000,
,,, -0.001954000000, 0.00000,
,,, -0.001952000000, 0.08000,
,,, -0.001950000000, 0.00000,
Source,CH1,, -0.001948000000, 0.00000,
Vertical Units,V,, -0.001946000000, 0.08000,
Vertical Scale,2.000000e+00,, -0.001944000000, 0.00000,
Vertical Offset,-7.760000e+00,, -0.001942000000, 0.08000,
Horizontal Units,s,, -0.001940000000, 0.08000,
Horizontal Scale,5.000000e-04,, -0.001938000000, 0.00000,
Pt Fmt,Y,, -0.001936000000, 0.00000,
Yzero,0.000000e+00,, -0.001934000000, 0.00000,
Probe Atten,1.000000e+00,, -0.001932000000, 0.00000,
Model Number,TDS2024B,, -0.001930000000, 0.00000,
Serial Number,C036144,, -0.001928000000, 0.00000,
Firmware Version,FV:v22.01,, -0.001926000000, 0.08000,
,,,-00.001924000000, 0.08000,
,,,-00.001922000000, 0.00000,
…………………………………………………………………………………………………………………………………..
Pe ultimele două coloane se află eșantioanele ce trebuie citite. Pentru citirea acestora în matlab folosim funcția:
csvread(numeFisier,liniaDeInceput,coloanadeInceput,[li,ci,lf,cf]);
unde:
numeFisier – reprezintă numele fișierului de citit
liniaDeInceput – linia de unde se începe citirea;
coloanaDeInceput – coloana de unde se începe citirea;
[li,ci,lf,cf] – dimensiunea matricii de citit.
3.4.4 Modulele pentru calculul vitezei folosind semnal sinusiodal continuu
Semnalul folosit pentru determinarea vitezei este de tipul semnal dinusoidal continuu.Frecvența semnalului este de 40.63 kHz.
3.4.4.1 DeterminareVitezaTreceriPrinZeroSinus
După citirea datelor din fișier, se filtrează semnalele pentru a obține rezultate cât mai exacte. Filtrarea se realizează folosind algoritmul de mediere a semnalului, obținându-se un semnal fără zgomote. Practic fiecare eșantion al semnalului este recalculat din media următoarelor k eșantioane. Numărul k, este stabilit prin simulări până când semnalul este mai ”curat”.
Calculul pentru diferența de fază se face pentru fiecare semnal în parte. Determinăm trecerile prin zero și le separăm în funcție de trendul semnalului. Apoi diferența de fază reprezintă media trecerilor prin zero determinate anterior.
Anexa 2 prezintă algoritmul de calcul folosit.
Functiile folosite sunt:
– filtreazaSinus(ch1,ch2,nrMedieri,N) – care returnează noile semnale filtrate, iar ca intrare are vechile semnale, cele citite din fișier. Numărul de medieri cu care se filtrează semnalele și dimensiunea lor.
– calculDX(Te,cht,chvals,N) – funcția care calculeză întârzierea între semnalul emis și cel recepționat.
3.4.4.2 DeterminareVitezaCorelațiaSinus
Se citesc datele din fișiere, apoi pentru se folosește funcția xcorr() pusă la dispoziție de biblioteca de funcții matematice MATLAB. Cum am explicat în capitolul 2, trebuie să găsim valoarea maximă din noul semnal creat de funcție, care are o dimensiune de 2*N-1. Valoarea maximă a timpului față de N, reprezintă de fapt întârzierea semnalului recepționat.
Anexa 3 conține algoritmul de calcul folosit
3.4.4.3 DeterminareVitezaFourierSinus
Ca și mai sus se citesc informațiile despre semnale, apoi folosim funcția fft() pusă la dispoziție de biblioteca de funcții matematice MATLAB. În capitoulu 2 am amintit despre Algoritmul de determinare a Transformatei Fourier Discrete. Funcția fft() realizează algoritmul FFT, iar din noile semnale extragem faza lor. Iar prin calcule matematice rezultă diferența de fază, apoi aplicând-o formula de calcul a vitezei se obține viteza vântului.
Anexa 4 conține algortimul de calcul folosit.
3.4.5 Modulele pentru calculul vitezei folosind un semnal de tip tren de impulsuri
Semnalul folosit este de tipul tren de impulsuri. Metodele folosite în acest caz sunt ca și cele folosite pentru semnalul sinusoidal continuu. Ce mai apare în plus este metode celor mai mici pătrate. Modul cum se aplică este descris în capitolul 2.
Se face observația că semnalul emis nu este continuu iar la recepție semnalul nu mai are aceeași formă ca cel emis. De aceea pentru a obține corect valorile de trecere am folosit un semnal de clock. Acest semnal ne ajută în calcule, el nu influențează transmisia.
Din întreg semnalul recepționat determinăm un prag și luăm în calcul numai valorile care depășesc pragul respectiv. Același lucru îl facem și pentru semnalul de clock, luăm valorile din același interval ca la semnalul recepționat.
Folosind astfel de semnal, nu mai este necesară filtrarea la recepție decât în cazul în care frecvența de eșantionare este mai mare. În acest caz apar zgomote pe semnalul recepționat care afectează calculele.
3.4.5.1 DeterminareVitezaTreceriPrinZeroTrenImpulsuri
Același principiu de calcul ca și ca semnalul sinusiodal continuu, numai că ținem cont de precizările facute anterior. De faptul că la calcule folosim o ”bucată” din vechiul semnal și semnalul de clock.
Anexa 5 conține algoritmul de calcul folosit.
3.4.5.2 DeterminareVitezaCorelatieTrenImpulsuri
Se determină diferența de fază folosind funcția xcorr().Principiul de calcul este același ca la aplicarea semnalului sinusoidal continuu. Anexa 6, descrie modul de calcul.
3.4.5.3 DeterminareVitezaFourierTrenImpulsuri
Se aplică funcția fft(), și se determină faza semnalelor. După ce este transformată în grade, folosim valoarea maximă a aplitudinii și determinăm diferența de timp între semnale. Anexa 7, descrie modul de calcul.
3.4.5.4 DeterminareVitezaCMMP
Principiul de calcul l-am descris în capitolul 2 când am precizat formula de calcul a semnalului de ieșire după aplicarea filtrului h(n). Algoritmul de calcul este prezentat în Anexa 8, în funcția calculTimpCMMP(), care are ca valori de intrare valorile a două semnale, momentele de timp și dimensiunea lor. În acest caz se folosește semnalul emis și cel recepționat în întregime.
Practic se caută momentul de timp când începe semnalul să fie emis, apoi determinăm momentul de timp când începe recepția semnalului. Acesta din urmă reprezintă valoarea minimă din semnalul rezultat la ieșirea aplicării algoritmului celor mai mici pătrate.
Diferența între valoarea timpului pentru valorea minimă determinată și momentul când a început emisia semnalului reprezintă diferența de timp între semnale.
Pentru fiecare metodă se calcul descrisă mai sus, implementat funcții ajutătoare. Acestea sunt prezentate în Anexa 9.
Testarea anemometrului și rezultate experimentale
4.1 Cerințe necesare
În primul rând este nevoie de construcția anemometrului. Pentru aceasta este nevoie de două traductoare, un generator de semnal, un osciloscop cu funcția de salvare a datelor, un ventilator pentru crearea fluxului de aer și un tub aerodinamic.
Aplicația pentru determinarea vitezei vântului utilizează mediul de dezvoltare MATLAB și un sistem de operare Windows. Deasemenea se recomandă o versiune de MATLAB cât mai recentă.
4.2 Rezultate experimentale
Avem rezultate pentru fiecare tensiune de alimentare aplicată ventilatorului. Se calculează iar pentru fiecare valoarea vitezei. Avem rezultate pentru fiecare tip de semnal.
Notațiile folosite în tabelul cu rezultatele pentru diferențele de timp sunt:
[us] – valoarea diferenței de timp pentru trecerea prin zero, măsurată in secunde;
[us] – valoarea diferenței de timp pentru corelație, măsurată in secunde;
[us] – valoarea diferenței de timp aplicând FFT, măsurată in secunde;
[us] – valoarea diferenței de timp aplicând metoda CMMP;
Și pentru fiecare astfel de valoare , avem viteza asociată, cu notațiile specifice:
[cm/s] – valoarea vitezei asociată , măsurată în metri/secundă.
[cm/s] – valoarea vitezei asociată , măsurată în metri/secundă.
[cm/s] – valoarea vitezei asociată , măsurată în metri/secundă.
[cm/s] – valoarea vitezei asociată , măsurată în metri/secundă.
4.2.1 Rezultate pentru semnalul sinusoidal continuu
Tabelul 5.1 Rezultate diferenței de timp obținute pentru t=2.5us
Tabelul 5.2 Rezultate calcul viteză cu rezultatele din Tabelul 5.1 și viteza determinată din debit
Tabelul 5.3 Rezultate diferenței de timp obținute pentru t=5us
Tabelul 5.4 Rezultate calcul viteză cu rezultatele din Tabelul 5.3 și viteza determinată din debit
Tabelul 5.5 Rezultate diferenței de timp obținute pentru t=10us
Tabelul 5.6 Rezultate calcul viteză cu rezultatele din Tabelul 5.5 și viteza determinată din debit
Tabelul 5.7 Rezultate diferenței de timp obținute pentru t=25us
Tabelul 5.8 Rezultate calcul viteză cu rezultatele din Tabelul 5.7 și viteza determinată din debit
4.2.2 Rezultate pentru semnalul tren de impulsuri
Tabelul 5.9 Rezultate diferenței de timp obținute pentru t=2.5us
Tabelul 5.10 Rezultate calcul viteză cu rezultatele din Tabelul 5.9, și viteza determinată din debit
Tabelul 5.11 Rezultate diferenței de timp obținute pentru t=5us
Tabelul 5.12 Rezultate calcul viteză cu rezultatele din Tabelul 5.11 și viteza determinată din debit
Tabelul 5.13 Rezultate diferenței de timp obținute pentru t=10us
Tabelul 5.14 Rezultate calcul viteză cu rezultatele din Tabelul 5.13 și viteza determinată din debit
Tabelul 5.15 Rezultate diferenței de timp obținute pentru t=25us
Tabelul 5.16 Rezultate calcul viteză cu rezultatele din Tabelul 5.15 și viteza determinată din debit
Concluzii
Obiectivele propuse în introducerea lucrării au fost atinse
ma refer la la sinusoida continua, tren de impulsuri(inseamna energie folosita mai mica pentru ca nu emit tot timpul).si la metode folosite
Bibliografie
[1] Carte:
(2005). In I. P. Mihu, Procesarea numerica a semnalelor Noțiuni esențiale. Sibiu: Alma Mater.
[2 ]Carte: (1999). In S. W. Smith, The Scientist and Engineer's Guide to Digital Signa Processing. San Diego: California Technical.
[3] http://www.tmt.ugal.ro/crios/Support/ANPT/Tutoriale/MATLAB_IN_INGINERIE.pdf – (2014)
[4] http://ep.etc.tuiasi.ro/site/AparateElectricedeMasurasiControl/proiect/PROIECTAEMC_2p.pdf – (2014)
[5] http://www.tmt.ugal.ro/crios/Support/ANPT/Tutoriale/MATLAB_IN_INGINERIE.pdf – (2014)
[6] http://www.technik.dhbw-ravensburg.de/~lau/ultrasonic-anemometer.html#conclusion – (2014)
Anexe
Specificațiile Ventilatorului
SUNON, EEC0381B1-0000-A99, FAN, STANDARD, 120MM, 12VDC
FAN, STANDARD, 120MM, 12VDC
Frame Dimensions:120mm x 120mm x 38mm
Supply Voltage:12V
Current Rating:800mA
Flow Rate – Imperial:138.098cu.ft/min
Flow Rate – Metric:234.462m_/h
Noise Rating:48dBA
Bearing Type:Ball
Power Connection Type:Wire Leaded
Current Type:DC
External Depth:38mm
External Height:120mm
External Width:120mm
Power Consumption:10W
Speed Range Max:3100rpm
Determinare viteză folosind trecerile prin zero – Semnal Sinusoidal
clear all
clc
close all
format shortg
mainFolder='0515S_new\ALL00';
chName = 'F00';
nrFoldere1 = 6;
beginWith = [0 6 12 18];
valoriPerioada = [2.5 5 10 25];%us
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,2);
T0509s=22;
nrMedieri = 32;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
%0-5 masuratori pentru 2.5us
%6-11 masuratori pentru 5us
%12-17 masuratori pentru 10us
%18-23 masuratori pentru 25us
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for idxFoldere=1:nrFoldere1
idx=int2str(idxFoldere-1+beginWith(idxMasuratori));
if(idxFoldere-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{idxFoldere} = [mainFolder sidx];
channelsNames{idxFoldere,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{idxFoldere,2}= [chName sidx 'CH' '2' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul sinusoidal continuu
%care este aplicat de la generatorul de semnal
for idxF=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{idxF};
%citim canalele
col=['r' 'b'];
for idxCh=1:2
file = strcat(file,folder,'\',channelsNames{idxF,idxCh});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch2tRX = values(:,1);%aici raman valorile de pe canalul2
ch2valsRX = values(:,2);%aici raman valorile de pecanalul2
ch2tRX=ch2tRX-ch2tRX(1);
file='';
if(idxCh==1)
ch1tTX = ch2tRX;%Valorile pentru timp de pe canalul1
ch1valsTX = ch2valsRX;%valorile pentru sinus de pe canalul1
end
end
%Filtrarea
[ch1valsTX,ch2valsRX] = filtreazaSinus(ch1valsTX,ch2valsRX,nrMedieri,N);
if (idxF==1)%pentru calm
[dTch1Calmneg,dTch1Calmpoz] = calculDxSinus(Te,ch1tTX,ch1valsTX,N);
[dTch2Calmneg,dTch2Calmpoz] = calculDxSinus(Te,ch2tRX,ch2valsRX,N);
dTCalmPoz = mean(dTch2Calmpoz)-mean(dTch1Calmpoz);
dTCalmNeg = mean(dTch2Calmneg)-mean(dTch1Calmneg);
dTCalm = (dTCalmPoz+dTCalmNeg)/2;
dTF(idxF)=abs(dTCalm-dTCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
[dTch1neg,dTch1poz] = calculDxSinus(Te,ch1tTX,ch1valsTX,N);
[dTch2neg,dTch2poz] = calculDxSinus(Te,ch2tRX,ch2valsRX,N);
dTPoz = mean(dTch2poz-dTch1poz);
dTNeg = mean(dTch2neg-dTch1neg);
dT =(dTPoz+dTNeg)/2;
%DeltaT folosit pentru calculul vitezei
%diferenta intre semnalul din situatia in care nu avem vant
%si cand avem vant
dTF(idxF)=abs(dT-dTCalm);
end
idxPlot=idxPlot+1;
end
format shortg
Te
dt = dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0509s)';
format shortg
v = vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriPerioada(idxMasuratori));
end
Determinare viteză folosind corelația – Semnal Sinusoidal
clear all
clc
close all
mainFolder='0515S_new\ALL00';
chName = 'F00';
nrFoldere1 = 6;
beginWith = [0 6 12 18];
valoriPerioada = [2.5 5 10 25];
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,2);
T0509s=22;
nrMedieri = 32;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
%0-5 masuratori pentru 2.5us
%6-11 masuratori pentru 5us
%12-17 masuratori pentru 10us
%18-23 masuratori pentru 25us
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for idxFolder=1:nrFoldere1
idx=int2str(idxFolder-1+beginWith(idxMasuratori));
if(idxFolder-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{idxFolder} = [mainFolder sidx];
channelsNames{idxFolder,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{idxFolder,2}= [chName sidx 'CH' '2' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul sinusoidal continuu
%care este aplicat de la generatorul de semnal
for idxF=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{idxF};
%citim canalele
col=['r' 'b'];
for idxCh=1:2
file = strcat(file,folder,'\',channelsNames{idxF,idxCh});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch2tRX = values(:,1);%aici raman valorile de pe canalul2
ch2valsRX = values(:,2);%aici raman valorile de pecanalul2
ch2tRX=ch2tRX-ch2tRX(1);
%ploteaza(t2,vals2,col,k,j);
file='';
if(idxCh==1)
ch1tTX = ch2tRX;%Valorile pentru timp de pe canalul1
ch1valsTX = ch2valsRX;%valorile pentru sinus de pe canalul1
end
end
%Aici aplic functia de corelatie, xcorr(vals1,vals2);
v1v2=xcorr(ch1valsTX,ch2valsRX);
[x1x2max,imax] = max(v1v2);
if (idxF==1)%pentru calm
dTCalm = abs(imax-N)*Te;%valoarea intarzierii
dTF(idxF) = abs(dTCalm-dTCalm);%
else
%Pentru situatiile in care avem ventilatorul pornit
dT2 = abs(imax-N)*Te;
dTF(idxF) = abs(dT2-dTCalm);
end
idxPlot=idxPlot+1;
end
format shortg
Te
dt = dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0509s)';
format shortg
v = vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriPerioada(idxMasuratori));
end
Determinare viteză folosind Transformata Forier Rapidă – Semnal Sinusoidal
clear all
clc
close all
mainFolder='0515S_new\ALL00';
chName = 'F00';
nrFoldere1 = 6;
beginWith = [0 6 12 18];
valoriPerioada = [2.5 5 10 25]; %us
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,2);
T0509s=22;
nrMedieri = 32;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
%0-5 masuratori pentru 2.5us
%6-11 masuratori pentru 5us
%12-17 masuratori pentru 10us
%18-23 masuratori pentru 25us
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for idxFoldere=1:nrFoldere1
idx=int2str(idxFoldere-1+beginWith(idxMasuratori));
if(idxFoldere-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{idxFoldere} = [mainFolder sidx];
channelsNames{idxFoldere,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{idxFoldere,2}= [chName sidx 'CH' '2' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul sinusoidal continuu
%care este aplicat de la generatorul de semnal
for idxF=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{idxF};
%citim canalele
col=['r' 'b'];
for idxCh=1:2
file = strcat(file,folder,'\',channelsNames{idxF,idxCh});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch2tRX = values(:,1);%aici raman valorile de pe canalul2
ch2valsRX = values(:,2);%aici raman valorile de pecanalul2
ch2tRX=ch2tRX-ch2tRX(1);
file='';
if(idxCh==1)
ch1tTX = ch2tRX;%Valorile pentru timp de pe canalul1
ch1valsTX = ch2valsRX;%valorile pentru sinus de pe canalul1
end
end
%Aici aplic functia fft
fe=1/Te;
fr=(0:1:N/2-1)*fe/N;
VAL1 = fft(ch1valsTX-mean(ch1valsTX));
VAL2 = fft(ch2valsRX-mean(ch2valsRX));
modV1 = abs(VAL1(1:N/2));
modV2 = abs(VAL2(1:N/2));
[modV1Max,idv1max] = max(modV1);
[modV2Max,idv2max] = max(modV2);
fv1max = fr(idv1max);
fv2max = fr(idv2max);
%Tranformarea fazei in grade
phaseV1 = phase(VAL1(1:N/2))*(180/pi);
phaseV2 = phase(VAL2(1:N/2))*(180/pi);
if (idxF==1)%pentru calm
dTCalm = abs((phaseV1(idv1max)/fv1max-phaseV2(idv2max)/fv2max)/360);
dTF(idxF) = abs(dTCalm-dTCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
dT2 = abs((phaseV1(idv1max)/fv1max-phaseV2(idv2max)/fv2max)/360);
dTF(idxF) = abs(dT2-dTCalm);
end
idxPlot=idxPlot+1;
end
format shortg
Te
dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0509s)';
format shortg
vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriPerioada(idxMasuratori));
end
Determinare viteză folosind trecerile prin zero – Semnal Tren de Impulsuri
clear all
clc
close all
format longg;
mainFolder='0514\ALL00';
chName = 'F00';
nrFoldere1 = 6;
nrCanale=3;
beginWith = [0 6 12 18];
mainFolders = cell(1,nrFoldere1);
channalsNames = cell(nrFoldere1,3);
T0514=22;
nrMedieri = 32;
valoriPerioada = [2.5 5 10 25];%us
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for idxFoldere=1:nrFoldere1
idx=int2str(idxFoldere-1+beginWith(idxMasuratori));
if(idxFoldere-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{idxFoldere} = [mainFolder sidx];
channalsNames{idxFoldere,1}= [chName sidx 'CH' '1' '.CSV'];
channalsNames{idxFoldere,2}= [chName sidx 'CH' '2' '.CSV'];
channalsNames{idxFoldere,3}= [chName sidx 'CH' '3' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul tren de impulsuri
%care este aplicat de la numarator
for j=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{j};
%citim canalele
col=['r' 'b' 'g'];
for k=1:nrCanale
file = strcat(file,folder,'\',channalsNames{j,k});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch3t = values(:,1);%aici raman valorile de pe canalul3
ch3vals = values(:,2);%aici raman valorile de pe canalul3
ch3t=ch3t-ch3t(1);
file='';
if(k==1)
ch1t = ch3t;%Valorile pentru timp de pe canalul1
ch1vals = ch3vals;%valorile pentru trenul de impulsuri de pe canalul1
end
if(k==2)
ch2t=ch3t;%Valoril epentru timp de pe canalul2
ch2vals=ch3vals;
end
end
ch3vals = ch3vals-mean(ch3vals);%ca sa centram clock-ul pe 0
if(idxMasuratori==4)
ch2vals=filtreazaTrenImpulsuri(ch2vals,nrMedieri,N);
end
if (j==1)%pentru calm
[dTch2Calmneg,dTch2Calmpoz,dTch3Calmneg,dTch3Calmpoz] = calculDxTrenImpulsuri(Te,ch2t,ch2vals,ch3t,ch3vals,idxPlot);
dTCalmneg = mean(dTch2Calmneg)-mean(dTch3Calmneg);
dTCalmpoz = mean(dTch2Calmpoz)-mean(dTch3Calmpoz);
dTCalm=(dTCalmpoz+dTCalmneg)/2;
dTF(j)=abs(dTCalm-dTCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
[dTch2neg,dTch2poz,dTch3neg,dTch3poz] = calculDxTrenImpulsuri(Te,ch2t,ch2vals,ch3t,ch3vals,idxPlot);
dTneg = mean(dTch2neg)-mean(dTch3neg);
dTpoz = mean(dTch2poz)-mean(dTch3poz);
dT = (dTneg+dTpoz)/2;
dTF(j)=abs(dT-dTCalm);
end
idxPlot=idxPlot+1;
end
format shortg
Te
dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0514)';
format shortg
vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriPerioada(idxMasuratori));
end
Determinare viteză folosind corelația – Semnal Tren de Impulsuri
clear all
clc
close all
mainFolder='0514\ALL00';
chName = 'F00';
nrFoldere1 = 6;
nrCanale=3;
beginWith = [0 6 12 18];
valoriPerioada = [2.5 5 10 25];
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,3);
T0514=22;
nrMedieri = 16;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for i=1:nrFoldere1
idx=int2str(i-1+beginWith(idxMasuratori));
if(i-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{i} = [mainFolder sidx];
channelsNames{i,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{i,2}= [chName sidx 'CH' '2' '.CSV'];
channelsNames{i,3}= [chName sidx 'CH' '3' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul tren de impulsuri
%care este aplicat de la numarator
for j=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{j};
%citim canalele
col=['r' 'b' 'g'];
for k=1:nrCanale
file = strcat(file,folder,'\',channelsNames{j,k});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch3t = values(:,1);%aici raman valorile de pe canalul2
ch3vals = values(:,2);%aici raman valorile de pecanalul2
ch3t=ch3t-ch3t(1);
file='';
if(k==1)
ch1t = ch3t;%Valorile pentru timp de pe canalul1
ch1vals = ch3vals;%valorile pentru sinus de pe canalul1
end
if(k==2)
ch2t=ch3t;%Valorilepentru timp de pe canalul2
ch2vals=ch3vals;
end
end
%Aici aplic functia de corelatie, xcorr(vals1,vals2);
ch3vals = ch3vals-mean(ch3vals);%ca sa centram clock-ul pe 0
if(idxMasuratori==4)
ch2vals=filtreazaTrenImpulsuri(ch2vals,nrMedieri,N);
end
[chn2tp,chn2valsp,chn3tp,chn3valsp] = getValues(ch2t,ch2vals,ch3t,ch3vals);
v2v3=xcorr(chn2valsp,chn3valsp);
[x2x3max,imax] = max(v2v3);
len=length(chn2valsp);
if (j==1)%pentru calm
dTCalm = abs((len-imax)*Te);
dTF(j) = abs(dTCalm-dTCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
dT2 = abs((len-imax)*Te);
dTF(j)= abs(dT2-dTCalm);
end
idxPlot = idxPlot+1;
end
format longg
Te
dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0514)';
format shortg
vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriPerioada(idxMasuratori));
end
Determinare viteză folosind Transformata Fourier Rapidă – Semnal Tren de Impulsuri
clear all
clc
close all
format longg;
mainFolder='0514\ALL00';
chName = 'F00';
nrFoldere1 = 6;
nrCanale=3;
beginWith = [0 6 12 18];
valoriFrecv = [2.5 5 10 25];
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,3);
T0514=22;
nrMedieri = 16;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for i=1:nrFoldere1
idx=int2str(i-1+beginWith(idxMasuratori));
if(i-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{i} = [mainFolder sidx];
channelsNames{i,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{i,2}= [chName sidx 'CH' '2' '.CSV'];
channelsNames{i,3}= [chName sidx 'CH' '3' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul tren de impulsuri
%care este aplicat de la numarator
for j=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{j};
%citim canalele
col=['r' 'b' 'g'];
for k=1:nrCanale
file = strcat(file,folder,'\',channelsNames{j,k});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch3t = values(:,1);%aici raman valorile de pe canalul2
ch3vals = values(:,2);%aici raman valorile de pecanalul2
ch3t=ch3t-ch3t(1);
file='';
if(k==1)
ch1t = ch3t;%Valorile pentru timp de pe canalul1
ch1vals = ch3vals;%valorile pentru sinus de pe canalul1
end
if(k==2)
ch2t=ch3t;%Valorilepentru timp de pe canalul2
ch2vals=ch3vals;
end
end
%Aici aplic functia fft doar pe acea parte din semnal care
%depaseste pragul
ch3vals = ch3vals-mean(ch3vals);%ca sa centram clock-ul pe 0
if(idxMasuratori==4)
ch2vals=filtreazaTrenImpulsuri(ch2vals,nrMedieri,N);
end
[chn2tp,chn2valsp,chn3tp,chn3valsp] = getValues(ch2t,ch2vals,ch3t,ch3vals);
fe=1/Te;
len=length(chn2valsp);
fr=(0:1:len/2-1)*fe/len;
VAL2 = fft(chn2valsp);
VAL3 = fft(chn3valsp-mean(chn3valsp));
modV2 = abs(VAL2(1:fix(len/2)));
modV3 = abs(VAL3(1:fix(len/2)));
[modV2Max,idv2max] = max(modV2);
[modV3Max,idv3max] = max(modV3);
fv2max = fr(idv2max);
fv3max = fr(idv3max);
phaseV2 = phase(VAL2(1:fix(len/2)))*(180/pi);
phaseV3 = phase(VAL3(1:fix(len/2)))*(180/pi);
if (j==1)%pentru calm
dtCalm =abs((phaseV2(idv2max)/fv2max-phaseV3(idv3max)/fv3max)/360);
dTF(j) = abs(dtCalm-dtCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
dt2 = abs((phaseV2(idv2max)/fv2max-phaseV3(idv3max)/fv3max)/360);
dTF(j) = abs(dt2-dtCalm);
end
idxPlot=idxPlot+1;
end
format shortg
Te
dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0514)';
format shortg
vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,valoriFrecv(idxMasuratori));
end
Determinare viteză folosind metoda celor mai mici pătrate – Semnal Tren de Impulsuri
clear all
clc
close all
mainFolder='0514\ALL00';
chName = 'F00';
nrFoldere1 = 6;
nrCanale=3;
beginWith = [0 6 12];
mainFolders = cell(1,nrFoldere1);
channelsNames = cell(nrFoldere1,3);
T0514=22;
nrMedieri = 32;
%Calculam viteza din debit
vQ=calculVitezaDebit()';
format shortg
vdeb = vQ*1e2 %cm/s
idxPlot=1;
for idxMasuratori=1:length(beginWith)
for idxFoldere=1:nrFoldere1
idx=int2str(idxFoldere-1+beginWith(idxMasuratori));
if(idxFoldere-1+beginWith(idxMasuratori)<10)
sidx=['0' idx];
else
sidx=idx;
end
mainFolders{idxFoldere} = [mainFolder sidx];
channelsNames{idxFoldere,1}= [chName sidx 'CH' '1' '.CSV'];
channelsNames{idxFoldere,2}= [chName sidx 'CH' '2' '.CSV'];
channelsNames{idxFoldere,3}= [chName sidx 'CH' '3' '.CSV'];
end
%Calculam viteza din masuratorile facute
%Pe canalul1 avem tot timpul semnalul tren de impulsuri
%care este aplicat de la numarator
for j=1:nrFoldere1%pentru foldere
file='';
folder = mainFolders{j};
%citim canalele
col=['r' 'b' 'g'];
for k=1:nrCanale
file = strcat(file,folder,'\',channelsNames{j,k});
N = csvread(file,0,1,[0,1,0,1]);%numarul de esantioane
Te = csvread(file,1,1,[1,1,1,1]);%ns perioada de esantionare
values = csvread(file,0,3,[0,3,2499,4]);
ch3t = values(:,1);%aici raman valorile de pe canalul3
ch3vals = values(:,2);%aici raman valorile de pe canalul3
ch3t=ch3t-ch3t(1);
file='';
if(k==1)
ch1t = ch3t;%Valorile pentru timp de pe canalul1
ch1vals = ch3vals;%valorile pentru trenul de impulsuri de pe canalul1
end
if(k==2)
ch2t=ch3t;%Valoril epentru timp de pe canalul2
ch2vals=ch3vals;
end
end
if (j==1)%pentru calm
dTCalm = calculTimpCMMP(ch1t,ch1vals,ch2t,ch2vals,N,Te,idxPlot);
dTF(j) = abs(dTCalm-dTCalm);
else
%Pentru situatiile in care avem ventilatorul pornit
dT = calculTimpCMMP(ch1t,ch1vals,ch2t,ch2vals,N,Te,idxPlot);
dTF(j) = abs(dT-dTCalm);
end
idxPlot=idxPlot+1;
end
format longg
Te
dTF'*1e6%us
vdt=calculVitezaMasuratori(dTF,T0514)';
format shortg
vdt*1e2 %cm/s
plotViteze(vQ,vdt,idxPlot+1,Te);
end
Funcții folosite în algoritmii pentru determinarea vitezei
function viteza = calculVitezaDebit()
format longg
Uventilator = [0 4.4 6.03 7.62 8.87 11.84];
Q=0.06561283;%m^3/s pentru o tensiune de 12V
sect = 0.032175;%m^2;
for j=1:length(Uventilator)
%pentru ficare tensiune in parte, calculam un nou debit
%pentru a determina viteza
Qvent = (Uventilator(j)*Q)/12;
vQ(j) = Qvent/sect;
end
viteza=vQ;
function viteza = calculVitezaMasuratori(deltatF,T)
format longg
d=0.133; %m
c0=331.45; %m/s viteza la 0 grade celsius
c=c0*sqrt(1+(T/273));%m/s
viteza = (deltatF*c^2)./(d-deltatF*c);
function [deltaTneg,deltaTpoz] = calculDxSinus (Te,t,vals,N)
format longe;
dxt0ch1 = vals(1:N-1).*vals(2:N);%Schimbarile de semn
idxt0ch1 = find(dxt0ch1<0);%Indecsii pentru valorile care isi schimba semnul
idxt00ch1 = find(vals==0);
concat = horzcat(idxt0ch1', idxt00ch1');
idxsch1 = sort(concat);%indicii
%Calculam deltaT0, adica valorile de timp cand semnalul este 0
ipoz=1;
ineg=1;
for k=1:length(idxt0ch1)
if(vals(idxsch1(k))<0)
%trecerea de la negativ la pozitiv
idxneg(ineg)=idxsch1(k);
ineg=ineg+1;
else
%trecerea de la pozitiv la negativ
idxpoz(ipoz)=idxsch1(k);
ipoz=ipoz+1;
end
end
tt0poz = zeros(1,length(idxsch1));
tt0neg = zeros(1,length(idxsch1));
for id=1:length(idxpoz)
deltaTxi = (Te*abs(vals(idxpoz(id))))/(abs(vals(idxpoz(id)))+abs(vals(idxpoz(id)+1)));
tt0poz(id) = deltaTxi+t(idxpoz(id));%timpul trecerii prin 0
end
for id=1:length(idxneg)
deltaTxi = (Te*abs(vals(idxneg(id))))/(abs(vals(idxneg(id)))+abs(vals(idxneg(id)+1)));
tt0neg(id) = deltaTxi+t(idxneg(id));%timpul trecerii prin 0
end
deltaTpoz=tt0poz;
deltaTneg=tt0neg;
function [dT2neg,dT2poz,dT3neg,dT3poz] = calculDxTrenImpulsuri (Te,chn2t,chn2vals,chn3t,chn3vals,i)
nrMedieri=32;
%Luam valorile mai mari ca un prag pragul
idxsVals = find(chn2vals>(4.8*(10^(-3))));
%Luam primul si ultimul indice pentru valorile determinate
i1 = idxsVals(1);
i2 = idxsVals(length(idxsVals));
%––––-CHANNEL2–––
%Luam din valorile citite doar acele valori care depasesc pragul
auxv2 = chn2vals(i1:i2);
t22 = chn2t(i1:i2);
len2=length(auxv2);
%Cautam trecerile prin 0
dxt0ch1 = auxv2(1:len2-1).*auxv2(2:len2);%Schimbarile de semn
idxt0ch1 = find(dxt0ch1<0);%Indecsii pentru valorile care isi schimba semnul
idxt00ch1 = find(auxv2==0);
concat = union(idxt0ch1, idxt00ch1);
idxsch1 = sort(concat);%indicii finali
%Separam trecerile de la pozitiv la negativ de cele de la
%negativ la pozitiv
ipoz=1;
ineg=1;
for k=1:length(idxt0ch1)
if(auxv2(idxsch1(k))<0)
%trecerea de la negativ la pozitiv
idxneg(ineg)=idxsch1(k);
ineg=ineg+1;
else
%trecerea de la pozitiv la negativ
idxpoz(ipoz)=idxsch1(k);
ipoz=ipoz+1;
end
end
%Calculam deltaT0, adica valorile de timp cand semnalul este 0
tt0poz = zeros(1,length(idxsch1));
tt0neg = zeros(1,length(idxsch1));
for id=1:length(idxpoz)
deltaTxi = (Te*abs(auxv2(idxpoz(id))))/(abs(auxv2(idxpoz(id)))+abs(auxv2(idxpoz(id)+1)));
tt0poz(id) = deltaTxi+t22(idxpoz(id));%timpul trecerii prin 0
end
for id=1:length(idxneg)
deltaTxi = (Te*abs(auxv2(idxneg(id))))/(abs(auxv2(idxneg(id)))+abs(auxv2(idxneg(id)+1)));
tt0neg(id) = deltaTxi+t22(idxneg(id));%timpul trecerii prin 0
end
dT2poz=tt0poz;
dT2neg=tt0neg;
%––––-CHANNEL3–––––
auxv3 = chn3vals(i1:i2);
t33 = chn3t(i1:i2);
len3=length(auxv3);
%Cautam trecerile prin 0
dxt0ch1 = auxv3(1:len3-1).*auxv3(2:len3);%Schimbarile de semn
idxt0ch1 = find(dxt0ch1<0);%Indecsii pentru valorile care isi schimba semnul
idxt00ch1 = find(auxv3==0);
concat = union(idxt0ch1, idxt00ch1);
idxsch1 = sort(concat);%indicii finali
%separam trecerile prin zero
ipoz=1;
ineg=1;
for k=1:length(idxt0ch1)
if(auxv3(idxsch1(k))<0)
%trecerea de la negativ la pozitiv
idxneg(ineg)=idxsch1(k);
ineg=ineg+1;
else
%trecerea de la pozitiv la negativ
idxpoz(ipoz)=idxsch1(k);
ipoz=ipoz+1;
end
end
%Calculam deltaT0, adica valorile de timp cand semnalul este 0
tt0poz = zeros(1,length(idxsch1));
tt0neg = zeros(1,length(idxsch1));
for id=1:length(idxpoz)
deltaTxi = (Te*abs(auxv3(idxpoz(id))))/(abs(auxv3(idxpoz(id)))+abs(auxv3(idxpoz(id)+1)));
tt0poz(id) = deltaTxi+t33(idxpoz(id));%timpul trecerii prin 0
end
for id=1:length(idxneg)
deltaTxi = (Te*abs(auxv3(idxneg(id))))/(abs(auxv3(idxneg(id)))+abs(auxv3(idxneg(id)+1)));
tt0neg(id) = deltaTxi+t33(idxneg(id));%timpul trecerii prin 0
end
dT3poz=tt0poz;
dT3neg=tt0neg;
function dt = calculTimpCMMP(ch1t,ch1vals,ch2t,ch2vals,N,Te,i)
%Determinam timpul t0, cand incepe semnalul sa fie transmis
fe=1/Te;
timp = (0:1:N-1)/fe;
dTX = ch1vals(2:N)-ch1vals(1:N-1);
j=find(dTX>4);
t0 = timp(j(1));
%Determinam timpul cand incepe receptia semnalului
fgen=40.6e3;%Hz
tgen=1/fgen;%s
pp=8;%numarul de perioade cautate
clear n ;
clear h ;
n = 0:1:pp*round(tgen/Te);
h = (0.4+0.6*n.*Te/tgen.*sin(2*pi*n*Te/tgen))/1000;
clear yp;
for p=1:N-pp*round(tgen/Te)-1
s=0;
for u = 0:pp*round(tgen/Te)
s = s + (h(u+1)-ch2vals(p+u))^2;
end
yp(p)=s;
end
[ypmin,iypmin]=min(yp);
dt = (timp(iypmin)-t0);
end
function [val1,val2] = filtreazaSinus(vals1,vals2,nrMedieri,N)
for i=1:N-nrMedieri
vals1(i) = mean(vals1(i:i+nrMedieri-1));
vals2(i) = mean(vals2(i:i+nrMedieri-1));
end
val1=[vals1(1:N-nrMedieri)' vals1(1:nrMedieri)']';
val2=[vals2(1:N-nrMedieri)' vals2(1:nrMedieri)']';
function val2 = filtreazaTrenImpulsuri(vals2,nrMedieri,N)
for i=1:N-nrMedieri
vals2(i) = mean(vals2(i:i+nrMedieri-1));
end
val2=vals2(1:N-nrMedieri)';
function [t2,v2,t3,v3] = getValues(chn2t,chn2vals,chn3t,chn3vals)
%Luam valorile mai mari ca un prag pragul
idxsVals = find(chn2vals>(5*(10^(-3))));
%Luam primul si ultimul indice pentru valorile determinate
i1 = idxsVals(1);
i2 = idxsVals(length(idxsVals));
%––––-CHANNEL2–––
%Luam din valorile citite doar acele valori care depasesc pragul
v2 = chn2vals(i1:i2);
t2 = chn2t(i1:i2);
%––––-CHANNEL3–––––
v3 = chn3vals(i1:i2);
t3 = chn3t(i1:i2);
end
function plotViteze (vQ,vDet,j,t)
figure(j);
plot(vQ,'r');
hold on;
plot(vDet,'b');
name = ['Perioada de esantionare ' num2str(t) ' us'] ;
title(name);
hold off;
grid on;
legend('Viteza determinata din debit','Viteza calculata din simulari');
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Anemometrul Ultrasonic (ID: 161878)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
