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');

Similar Posts