DC/RMS z sygnalow
DC/RMS z sygnalow
Witam,
Przeprowadzam pomiary napiecia na wielu kanalach. Pokazywac chce jednak tylko srednia i odchylenie od sredniej. Co sekunde wartosci maja byc aktualizowane.
Chcialem zastosowac strukture jak na screenie. Przy ustawieniu czasu dla obliczania sredniej na 1 sekunde na wyjsciu nie mam zadnych wartosci. Gdy ustawione jest na -1 wartosci na wyjsciu zmieniaja sie tak szybko jak szybko przebiega petla while. Zle cos poustawialem ? Zle rozumiem funkcjonowanie bloczka do obliczania sredniej i rms ? Moze powinienem napisac subvi, ktory tworzy array ustalonej wielkosci, oblicza jego srednia, podaje wynik a potem go czysci i od nowa uzupelnia wartosciami ?
Przeprowadzam pomiary napiecia na wielu kanalach. Pokazywac chce jednak tylko srednia i odchylenie od sredniej. Co sekunde wartosci maja byc aktualizowane.
Chcialem zastosowac strukture jak na screenie. Przy ustawieniu czasu dla obliczania sredniej na 1 sekunde na wyjsciu nie mam zadnych wartosci. Gdy ustawione jest na -1 wartosci na wyjsciu zmieniaja sie tak szybko jak szybko przebiega petla while. Zle cos poustawialem ? Zle rozumiem funkcjonowanie bloczka do obliczania sredniej i rms ? Moze powinienem napisac subvi, ktory tworzy array ustalonej wielkosci, oblicza jego srednia, podaje wynik a potem go czysci i od nowa uzupelnia wartosciami ?
- Załączniki
-
- przyklad ustawien.
- DC RMS.PNG (10.13 KiB) Przejrzano 15781 razy
DC/RMS z sygnalow
Jest związek pomiędzy częstotliwością sygnału, który badasz, a czasem uśredniania. Jak duża jest Twoja tablica pomiarowa, tzn. ile masz próbek, gdyż być może zbierasz wyniki częściej niż 1 sekunda i funkcja nie jest w stanie tego policzyć. Jaka jest częstotliwość próbkowania kanałów?
Certified LabVIEW Associate Developer
DC/RMS z sygnalow
Masz za mało próbek na wejściu funkcji liczącej RMS.
Jeśli chcesz liczyć z 1 sekundy to musisz mieć 1\Fs próbek , gdzie Fs to częstotliwość próbkowania.
Jak będziesz miał w Waveform'ie tyle próbek to dopiero podajesz na wejście funkcji.
Ty teraz odczytujesz ciągle bufor karty i podajesz tyle próbek ile masz ustawione w DAQmx na wejście Average RMS.
Np. Jak próbkujesz 51,2 kHz to musisz mieć 51 200 próbek w Waveform'ie co równa się 1s rejestracji danych.
Mam nadzieje że trochę rozjaśniłem.
Jeśli chcesz liczyć z 1 sekundy to musisz mieć 1\Fs próbek , gdzie Fs to częstotliwość próbkowania.
Jak będziesz miał w Waveform'ie tyle próbek to dopiero podajesz na wejście funkcji.
Ty teraz odczytujesz ciągle bufor karty i podajesz tyle próbek ile masz ustawione w DAQmx na wejście Average RMS.
Np. Jak próbkujesz 51,2 kHz to musisz mieć 51 200 próbek w Waveform'ie co równa się 1s rejestracji danych.
Mam nadzieje że trochę rozjaśniłem.
Pomogłem?... pochwal mnie 

Re: DC/RMS z sygnalow
Dzieki za odpowiedzi.
MicMac89, max. czestotliwosc probkowania dla jednego kanalu wynosi 15kHz.
Na zalaczonym screenie pokazuje ogolna strukture. Pojawial mi sie wczesniej blad w trakcie pomiaru i zastosowalem rozwiazanie proponowane przez NI:
http://digital.ni.com/public.nsf/allkb/ ... 80006F0E62
darkon, rozumiem co masz na mysli. Zastanawiam sie jak to rozwiazac. Czy zapisywac w waveformie probki, sprawdzac czy minela sekunda, obliczac srednia i czyscic waveform? Wydaje mi sie, ze to nie jest zbyt eleganckie rozwiazanie. Poza tym kosztuje troche pamieci komputera.
Obliczanie sredniej i aktualizowanie jej co sekunde to jedna sprawa, jednoczenie program musi sprawdzac kazda probke czy wartosc graniczna nie zostala przekroczona i zapisywac wszystkie probki, jezeli tak sie stalo. Nie chcialbym, zeby ustawiajac bloczki DAQmx pod aktualizacje co sekunde gryzlo sie ze sprawdzaniem wartosci granicznych i zapisem z max. czestotliwoscia.
EDIT:
Ustawilem na bloczku DAQmx Read, zeby ilosc sampli dla kanalu odpowiadala czestotliwosci probkowania. Jedna interacja petli while zajmuje sekunde. Pytanie za 100 pkt. czy takie rozwiazanie jest dobre? czy program nie bedzie sie wywieszal przy parodniowej pracy? Czy obliczenia na pomiarach, pokazywanie ich na wykresach XY i rozne rodzaje zapisu beda mogly byc bezproblemowo przeprowadzane ? Z pewnoscia macie doswiadczenie w tym zakresie, a ja wole wiedziec wczesniej, niz potem przerabiac caly program bo pomiar juz nie dziala jak powinien.
MicMac89, max. czestotliwosc probkowania dla jednego kanalu wynosi 15kHz.
Na zalaczonym screenie pokazuje ogolna strukture. Pojawial mi sie wczesniej blad w trakcie pomiaru i zastosowalem rozwiazanie proponowane przez NI:
http://digital.ni.com/public.nsf/allkb/ ... 80006F0E62
darkon, rozumiem co masz na mysli. Zastanawiam sie jak to rozwiazac. Czy zapisywac w waveformie probki, sprawdzac czy minela sekunda, obliczac srednia i czyscic waveform? Wydaje mi sie, ze to nie jest zbyt eleganckie rozwiazanie. Poza tym kosztuje troche pamieci komputera.
Obliczanie sredniej i aktualizowanie jej co sekunde to jedna sprawa, jednoczenie program musi sprawdzac kazda probke czy wartosc graniczna nie zostala przekroczona i zapisywac wszystkie probki, jezeli tak sie stalo. Nie chcialbym, zeby ustawiajac bloczki DAQmx pod aktualizacje co sekunde gryzlo sie ze sprawdzaniem wartosci granicznych i zapisem z max. czestotliwoscia.
EDIT:
Ustawilem na bloczku DAQmx Read, zeby ilosc sampli dla kanalu odpowiadala czestotliwosci probkowania. Jedna interacja petli while zajmuje sekunde. Pytanie za 100 pkt. czy takie rozwiazanie jest dobre? czy program nie bedzie sie wywieszal przy parodniowej pracy? Czy obliczenia na pomiarach, pokazywanie ich na wykresach XY i rozne rodzaje zapisu beda mogly byc bezproblemowo przeprowadzane ? Z pewnoscia macie doswiadczenie w tym zakresie, a ja wole wiedziec wczesniej, niz potem przerabiac caly program bo pomiar juz nie dziala jak powinien.
DC/RMS z sygnalow
Chodzi tutaj generalnie o to, że w oparciu o ilość próbek, które każdorazowo odczytuje kanał i częstotliwość próbkowania masz dane pomiarowe odświeżane co pewien określony czas. Przykładowo, jeśli masz 1kHz próbkowania i zbierasz 10000 pomiarów, to rezultaty otrzymujesz co 10 sekund i taki Waveform trafia na wejście funkcji obliczającej DC/RMS. Wówczas możesz obliczyć wartość średnią z każdej kolejnej sekundy pomiarów, ale już podanie na wejście wartości 20 sekund jest pozbawione sensu, gdyż ten okres czasu jest dłuższy niż długość trwania Twojego sygnału.
Z Twojego kodu wynika, że chcesz zbierać 15000 próbek z częstotliwością 15kHz, tak?
Monitorowanie wartości możesz bez problemu zrobić równolegle, myślę, że nie będzie to zbyt duże obciążenie.
Z Twojego kodu wynika, że chcesz zbierać 15000 próbek z częstotliwością 15kHz, tak?
Monitorowanie wartości możesz bez problemu zrobić równolegle, myślę, że nie będzie to zbyt duże obciążenie.
Certified LabVIEW Associate Developer
DC/RMS z sygnalow
Tak, max. czestotliwosci ustawiona na bloczku DAQmx Timing to 15 kHz. Na sekunde dostaje 15 000 probke. Zaleznie od doswiadczenia czestotliwosc ta moze byc mniejsza.
Zaraz sobie sprobuje zbudowac bufor na probki z ostatniej sekundy i obliczanie ich sredniej. Zobaczymy jak to bedzie dzialac. Bardzo dobrze by byloby, jakby petla while pracowala ze swoja maksymalna predkoscia.
Zaraz sobie sprobuje zbudowac bufor na probki z ostatniej sekundy i obliczanie ich sredniej. Zobaczymy jak to bedzie dzialac. Bardzo dobrze by byloby, jakby petla while pracowala ze swoja maksymalna predkoscia.
DC/RMS z sygnalow
W takim przypadku zawsze masz do dyspozycji dane z ostatniej sekundy, zatem wystarczy skorzystać z funkcji Basic DC/RMS i zawsze to będzie średnia z ostatniej sekundy. Gdy częstotliwość jest mniejsza, czyli akwizycja trwa dłużej, wówczas lepiej skorzystać z funkcji, której używasz do tej pory, w rezultacie otrzymasz tablicę z kolejnymi wartościami średnimi.
Załączam program, który pokazuje działanie dla prostych danych obu wspomnianych funkcji. Sygnał to 8 próbek odległych co 0,25 sekundy. Zmieniając Averagetime uzyskasz różne rezultaty.
Załączam program, który pokazuje działanie dla prostych danych obu wspomnianych funkcji. Sygnał to 8 próbek odległych co 0,25 sekundy. Zmieniając Averagetime uzyskasz różne rezultaty.
- Załączniki
-
- dc i rms.vi
- (16.29 KiB) Pobrany 476 razy
Certified LabVIEW Associate Developer
DC/RMS z sygnalow
Wrzuc prosze wersje pod LV 2009 ;)
Re: DC/RMS z sygnalow
Przepraszam, nie zwróciłem uwagi na wersję, z której korzystasz.
- Załączniki
-
- dc i rms.vi
- (15.33 KiB) Pobrany 462 razy
Certified LabVIEW Associate Developer
Re: DC/RMS z sygnalow
Zrobilem tak jak mi poradziles. Wydaje mi sie, ze problem nie jest w tym czy uzylem bloczka basic dc/rms czy average dc/rms, ale w ustawieniu "Availble sample per channel".
Program musi dzialac przy roznach czestotliwosciach. Min to 1000 Hz, max 15kHz.
Jezeli dolna granica na bloczku "Range or Coerce" to 0, czestotliwosc ustawiona jest na 1000 Hz, to na wskazniku waveform nic sie nie pokazuje a zadna srednia nie jest obliczana.
Przy czestotliwosci 10 000 Hz petla while przebiega wolniej niz czestotliwosc ktora jest ustawiona. Na wskazniku "waveform" pokazywane sa 3 pomiary. Na wskazniku "DC value 2" pokazana jest srednia z tych trzech wartosci. Wskaznik "DC value waveform 2" nie pokazuje nic. Przy czym wartosci ktore sa pokazywane zmienia sie z predkoscia petli while.
Co chcialbym osiagnac:
1. Niezaleznie od czestotliwosci probkowania i predkosci petli while obliczac srednia i odchylenie od sredniej dla probek z ostatniej sekundy. Wskazniki dla sredniej i odchylenia maja byc aktualizowane co sekunde, tak zeby osoba obslugujaca spokojnie widziala co sie dzieje. Jednoczesnie srednie dla kazdego kanalu oraz odchylenia beda zapisywane.
2. Pokazywac pozywac kazda probke i porownywac z ustawionymi przez uzytkownika wartosciami granicznymi. W razie potrzeby zapisywac kazda probke do odpowiedniego pliku.
Wiem jak zapisywac, wiem jak porownywac. Nie wiem jak zrobic, zeby niezaleznie od ustawionej czestotliwosci liczylo mi srednia dla ostatniej sekundy, pokazywalo ja i co sekunde aktualizowalo, przy okazji pokazujac tez aktualna probke.
Zalaczam screen z blockdiagrammu i VI
Program musi dzialac przy roznach czestotliwosciach. Min to 1000 Hz, max 15kHz.
Jezeli dolna granica na bloczku "Range or Coerce" to 0, czestotliwosc ustawiona jest na 1000 Hz, to na wskazniku waveform nic sie nie pokazuje a zadna srednia nie jest obliczana.
Przy czestotliwosci 10 000 Hz petla while przebiega wolniej niz czestotliwosc ktora jest ustawiona. Na wskazniku "waveform" pokazywane sa 3 pomiary. Na wskazniku "DC value 2" pokazana jest srednia z tych trzech wartosci. Wskaznik "DC value waveform 2" nie pokazuje nic. Przy czym wartosci ktore sa pokazywane zmienia sie z predkoscia petli while.
Co chcialbym osiagnac:
1. Niezaleznie od czestotliwosci probkowania i predkosci petli while obliczac srednia i odchylenie od sredniej dla probek z ostatniej sekundy. Wskazniki dla sredniej i odchylenia maja byc aktualizowane co sekunde, tak zeby osoba obslugujaca spokojnie widziala co sie dzieje. Jednoczesnie srednie dla kazdego kanalu oraz odchylenia beda zapisywane.
2. Pokazywac pozywac kazda probke i porownywac z ustawionymi przez uzytkownika wartosciami granicznymi. W razie potrzeby zapisywac kazda probke do odpowiedniego pliku.
Wiem jak zapisywac, wiem jak porownywac. Nie wiem jak zrobic, zeby niezaleznie od ustawionej czestotliwosci liczylo mi srednia dla ostatniej sekundy, pokazywalo ja i co sekunde aktualizowalo, przy okazji pokazujac tez aktualna probke.
Zalaczam screen z blockdiagrammu i VI
- Załączniki
-
- DC_RMS.vi
- (29.4 KiB) Pobrany 478 razy
Re: DC/RMS z sygnalow
Witam, gdzie sprawdzić częstotliwość próbkowania? Chodzi mi o to, że mam pomiary w Waveform'ie (temperatura od czasu. Czas jest podany nie w sekundach a właśnie zalezy mi na tym żeby mieć go w sek.) Muszę przeskalować wykres, jednakże nie bardzo wiem gdzie znaleźć Fs, które to muszę posiadać żeby przeskalować wykres.
DC/RMS z sygnalow
Z funkcji "Get Waveform Components" możesz wyciągnąć dt.