DC/RMS z sygnalow

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

DC/RMS z sygnalow

Post autor: Harnas »

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 ?
Załączniki
przyklad ustawien.
przyklad ustawien.
DC RMS.PNG (10.13 KiB) Przejrzano 14807 razy
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

DC/RMS z sygnalow

Post autor: MicMac89 »

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
Awatar użytkownika
darkon
Posty: 26
Rejestracja: 13 lut 2011 14:21
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Krk

DC/RMS z sygnalow

Post autor: darkon »

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.
Pomogłem?... pochwal mnie :)
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: DC/RMS z sygnalow

Post autor: Harnas »

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.
Załączniki
DC RMS.PNG
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

DC/RMS z sygnalow

Post autor: MicMac89 »

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.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

DC/RMS z sygnalow

Post autor: Harnas »

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.
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

DC/RMS z sygnalow

Post autor: MicMac89 »

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łączniki
dc i rms.vi
(16.29 KiB) Pobrany 419 razy
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

DC/RMS z sygnalow

Post autor: Harnas »

Wrzuc prosze wersje pod LV 2009 ;)
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Re: DC/RMS z sygnalow

Post autor: MicMac89 »

Przepraszam, nie zwróciłem uwagi na wersję, z której korzystasz.
Załączniki
dc i rms.vi
(15.33 KiB) Pobrany 422 razy
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: DC/RMS z sygnalow

Post autor: Harnas »

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
Załączniki
DC_RMS.vi
(29.4 KiB) Pobrany 432 razy
DC RMS.PNG
niedzia
Posty: 6
Rejestracja: 28 mar 2014 16:01
Wersja środowiska: LabVIEW 2014

Re: DC/RMS z sygnalow

Post autor: niedzia »

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.
Awatar użytkownika
koofaya
Posty: 38
Rejestracja: 23 sty 2014 14:51
Wersja środowiska: LabVIEW 2014

DC/RMS z sygnalow

Post autor: koofaya »

Z funkcji "Get Waveform Components" możesz wyciągnąć dt.
ODPOWIEDZ