Strona 1 z 1

Śledzenie dnych i funkcja Waveform Peak Detection

: 21 sie 2009 20:44
autor: karpik
Witam!
Chciałbym się dowiedzieć czy dzięki funkcji Waveform Peak Detection można wyznaczyć szczyt charakterystyki, która jest rysowana na bieżąco?
Tzn. sczytuje dane z karty pomiarowej i chciałbym żeby LV na bieżąco wyszukiwało punktu ustalenia się charakterystyki. Mam podobne rozwiązanie zrobione dla danych zapisanych w pliku, ale jak próbuję zaadoptować to na bieżąco to program nie widzi żadnych zmian. Chciałbym żeby po osiągnięciu stanu ustalonego program zaznaczył ten punkt na wykresie,ale żeby nie odbywało się to z zapisanego pliku tylko żeby szukał na bieżąco.

Poza tym nie zawsze punkty są wyznaczone dobrze. Często dolna charakterystyka zatrzymuje się na punkcie 0. Używam funkcji threshold i width ale nie zawsze przynosi to skutek. Może lepiej byłoby zastosować jakąś interpolacje charakterystyk?


Uproszczony podgląd programu umieściłem w załączniku. jeżeli case ustawione jest na True to mamy odczyt z pliku,a jeśli na false to zapis. Niestety zapis działa tylko po podpięciu karty. Czy tak wykonany program działa prawidłowo,czy robię coś źle?

Będę wdzięczny za jakąś podpowiedź.
Pozdrawiam!

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 22 sie 2009 15:42
autor: jogurt_owocowy
Chciałbym się dowiedzieć czy dzięki funkcji Waveform Peak Detection można wyznaczyć szczyt charakterystyki, która jest rysowana na bieżąco?
Pewnie, że można, tylko trzeba pokombinować. Najprościej dokleić nowo odczytaną paczkę próbek do próbek odczytanych wcześniej i wyszukać piki od nowa.
Oczywiście takie nonszalanckie programowanie sprawdza się w przypadku mniejszej ilości danych/szybszego komputera.
Rozsądniejszą alternatywą jest funkcja Peak Detector PtByPt wykrywająca górki/dołki na bieżąco. Podajesz na jej wejście odczytaną próbkę, a na wyjściu dostajesz informację czy jest górka/dołek na tej próbce.
Pozdrawiam

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 23 sie 2009 12:57
autor: karpik
Niestety program muszę zrobić w LV 7.1,a tam nie mogę znaleźć tej funkcji:(
Próbki są odczytywane co pół sekundy, ostatecznie wychodzi maksymalnie jakieś 1500-1600 próbek,ale można to skrócić do jakiś 700. Jak można zrobić tą pętlę o której pisałeś?

Pozdrawiam!

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 23 sie 2009 15:09
autor: jogurt_owocowy
Niestety program muszę zrobić w LV 7.1,a tam nie mogę znaleźć tej funkcji(
Dziwne... Powinna być w Functions -> Analyze -> Point by Point -> Time Domain PtByPt.
Ale nic to... jeśli to są takie ilości danych o jakich piszesz, to spokojnie możesz wykorzystać Waveform Peak Detection, tylko co dokładnie chcesz wyznaczyć, bo stanu szczególnie ustalonego to tu za bardzo nie widać.
Chodzi Ci o ten punkt przegięcia, do którego charakterystyka (czerwona) rośnie, a po którym maleje?

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 23 sie 2009 16:05
autor: karpik
Masz racje znalazłem tą funkcję,ale chętnie spróbowałbym tez tego drugiego sposobu. Nie patrz na tą opadającą część charakterystyki-ona się nie liczy.Chodzi mi o wyznaczenie punktu w którym temperatura się ustala na stałym poziomie. Tzn. w przypadku czerwonej jest to około 140s,a po stronie białej jakieś 250s. Jeżeli wykonuję pomiary to czasem program nie widzi tych zmian. Zatrzymuje się wtedy na 0. Znieczulam go trochę threshold i width,ale nie wiem jak duży wpływ ma to na poprawność wyniku. Wyczytałem, że width najlepiej wykrywa przy 3 próbkach,ale wtedy prawie zawsze pojawiają się błędy. Z kolei treshold reguluje się wielkością amplitudy,tylko nie wiem w jakich jednostkach jest to wymiar.

Pozdrawiam!

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 23 sie 2009 17:03
autor: jogurt_owocowy
Chodzi mi o wyznaczenie punktu w którym temperatura się ustala na stałym poziomie.
To akurat w tym funkcja Waveform Peak Detection Ci nie za bardzo pomoże.
Lepiej oblicz pochodne tych sygnałów (Derivative x(t) albo Derivative x(t) PtByPt - jak wolisz), wygładź je (bo zapewne będą dość zaszumione) i wykryj moment kiedy zbliżają się do zera.

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 23 sie 2009 17:16
autor: karpik
OK zrobiłem tak jak mówiłeś,ale pojawił się kolejny problem. Pierwsze próbki są na stałym poziomie i pochodna wychodzi 0. Używam Derivative x(t), czy można zrobić tak żeby zaczął wyszukiwać wartość minimalną dopiero od którejś próbki? wiem,że na bieżąco można to łatwo zrobić,ale nie wiem czy da się takie coś zrobić z danymi zapisanymi w pliku.
Poza tym jak rozbić te dane wychodzące z karty,aby można było zastosować
Derivative x(t) PtByPt?
Pozdrawiam!

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 24 sie 2009 16:19
autor: jogurt_owocowy
na bieżąco można to łatwo zrobić,ale nie wiem czy da się takie coś zrobić z danymi zapisanymi w pliku.
Najlepiej zrobić to w sposób uniwersalny, żeby nie musieć się zastanawiać skąd pochodzą dane. Skoro nie masz tych danych tak dużo i są odczytywane powoli, to spokojnie możesz po odczytaniu nowej próbki (próbek) dokleić ją do wcześniejszych za pomocą Build Array i na powstałej tablicy od nowa zrobić wszystkie operacje związane z wyszukiwaniem stanu ustalonego.
Dzięki temu przetwarzanie danych czy to z karty, czy to odczytanych z pliku, nie różni się od siebie (i tu i tu pracujesz na wektorze próbek)
Używam Derivative x(t), czy można zrobić tak żeby zaczął wyszukiwać wartość minimalną dopiero od którejś próbki?
Można, przy czym nie szukaj wartości minimalnej, a pierwszej wartości będącej poniżej pewnego progu (np. dla górnego, czerwonego sygnału stan ustalony rozpoczyna się, gdy pochodna spada poniżej ok. 0,025). Na końcu tego wątku znajdziesz przepis, jak to zrobić. Różnica jest taka, że Ty zamiast szukać wartości większych, niż 180, będziesz szukać wartości mniejszych, niż 0,025 (czyli zamiast funkcji Greater? użyjesz funkcji Less?). Zauważ, że na wejście funkcji Search 1D Array możesz podać indeks elementu, od którego funkcja ma rozpocząć wyszukiwanie - to pozwoli Ci ominąć problem początkowych zer w pochodnej.
Pozdrawiam

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 27 sie 2009 22:33
autor: karpik
No to pojawił się kolejny problem. Charakterystykę rysuję w XY Graph. Przy obliczonym czasie ustalenia odpowiedzi mam wyznaczyć czas 0,5 i 0,9 wartości ustalonej. Zrobiłem bloczek obliczający to,ale na charakterystyce źle zaznacza:/ Używałem funkcji cursor position Y,program dobrze wyznaczył wartość, ale źle zaznaczył na wykresie ( zwykle ok. 1 st. C) za mało. Teraz spróbowałem z search waveform i wcale nie jest dużo lepiej. Program znajduje odpowiedni indeks,ale zaznacz jakieś 2-3 punkty niżej:/
W załączniku zrobiłem mały symulator. Przy małej ilości próbek wszystko jest OK,ale jak już da się więcej niż 100 to program głupieje. Jakieś pomysły co z tym zrobić?
Poradziłem sobie robiąc zwykłego Grapha,ale zastanawiające jest dlaczego program zaczyna się mylić przy większej ilości próbek.

Re: Śledzenie dnych i funkcja Waveform Peak Detection

: 29 sie 2009 03:26
autor: jogurt_owocowy
Niestety, jest to bug w LV polegający na niepoprawnym ustawianiu kursorów związanych z wykresem w XY Graph za pomocą własności Cursor.PosY i Cursor.PosX (niestety też). Na obejście tego problemu jest prosty sposób - własność Cursor Index.
Działa ona trochę podobnie jak Cursor.PosX, ale w przypadku Cursor Index podajesz nie wartość zmiennej X, a numer próbki, na której ma zostać ustawiony kursor. Jeśli chcesz ustawić kursor na określonej wartości Y, musisz samemu znaleźć numer próbki o wartości najbliższej tej zadanej, a potem skorzystać z Cursor Index właśnie.
Pozdrawiam