Problem z pętlą while
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Problem z pętlą while
Witam,
Powiedźcie jak poprawić poniższą pętlę(w prawym dolnym rogu) , aby wartość minimalna była wyświetlana w każdym okresie. Teraz wyświetla mi tylko w jednym okresie i w dodatku najmniejszy min z wszystkich okresów branych pod uwagę. Okres w tym przypadku to odległość miedzy dwoma sąsiednimi maxami (fioletowe krzyżyki na grafie). Zielone kropki na przebiegu to valleys(minima) z których chcę wybrać najmniejszy. Żółty krzyżyk to najmniejszy min z zielonych min-ów w konkretnym okresie.
Dodam jeszcze, że próbka n i próbka n+1 to nie że różnica pomiedzy nimi to 1 tylko one są już wyselekcjonowane np. 102, 334, 500, 799 itp. n+1 to następna poprostu.
W porównaniu iteracji z constant wstawiłem 4 bo narazie wystarczyłoby mi 3 lub 4 okresy w zależności czy ostatni uwzględni czy nie, ale to już szczegół.
Jeśli czegoś jeszcze nie sprecyzowałem to powiedźcie.
Liczę na pomoc, z góry dzieki.
Powiedźcie jak poprawić poniższą pętlę(w prawym dolnym rogu) , aby wartość minimalna była wyświetlana w każdym okresie. Teraz wyświetla mi tylko w jednym okresie i w dodatku najmniejszy min z wszystkich okresów branych pod uwagę. Okres w tym przypadku to odległość miedzy dwoma sąsiednimi maxami (fioletowe krzyżyki na grafie). Zielone kropki na przebiegu to valleys(minima) z których chcę wybrać najmniejszy. Żółty krzyżyk to najmniejszy min z zielonych min-ów w konkretnym okresie.
Dodam jeszcze, że próbka n i próbka n+1 to nie że różnica pomiedzy nimi to 1 tylko one są już wyselekcjonowane np. 102, 334, 500, 799 itp. n+1 to następna poprostu.
W porównaniu iteracji z constant wstawiłem 4 bo narazie wystarczyłoby mi 3 lub 4 okresy w zależności czy ostatni uwzględni czy nie, ale to już szczegół.
Jeśli czegoś jeszcze nie sprecyzowałem to powiedźcie.
Liczę na pomoc, z góry dzieki.
- Załączniki
-
- 19 lis forum.vi
- program v7.1
- (196.97 KiB) Pobrany 267 razy
-
- w.txt
- dane do załadowania w programie
- (74.17 KiB) Pobrany 279 razy
Ostatnio zmieniony 19 lis 2012 16:27 przez plejek, łącznie zmieniany 2 razy.
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Problem z pętlą while
Napisz algorytm działania tej pętli krok po kroku. Wypisz wejścia i wyjścia. Co to za dane w rejestrze krążą? Jakieś próbki? Indeksy? Opisz każde wejście.
Na podstawie tego będziemy Ci w stanie pomóc znaleźć błąd bo dla mnie w tym momencie nie jest jasne, co ta pętla ma robić i na jakich danych operować.
EDIT: Co do samego programu to proponuję pozamykać poszczególne funkcjonalności w SubVI. Będzie lepiej wyglądało, łatwiej będzie kod przeglądać.
Na podstawie tego będziemy Ci w stanie pomóc znaleźć błąd bo dla mnie w tym momencie nie jest jasne, co ta pętla ma robić i na jakich danych operować.
EDIT: Co do samego programu to proponuję pozamykać poszczególne funkcjonalności w SubVI. Będzie lepiej wyglądało, łatwiej będzie kod przeglądać.
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Do pętli z lewej strony wchodzi numer próbki n i numer próbki następnej.Próbka n to początek, a próbka n+1 to koniec zakresu w którym ma mi znaleźć minimum. Wiec przypuszczam ze w Array Subset znajdują sie wszystkie minima z tego zakresu. Wiec powinno mi znaleźć min i wyswietlic go na grafie.Następnie próbka n+1 za pomocą ShiftRegister wchodzi do pętli ponownie ale jak próbka n. itd itd.
Taki jest zamysł.
Zaaktualizowałem screena.
Jak by co to mozesz pisać na gg 5697547. Łatwiej sie prozumiemy.
Taki jest zamysł.
Zaaktualizowałem screena.
Jak by co to mozesz pisać na gg 5697547. Łatwiej sie prozumiemy.
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Problem z pętlą while
Niepotrzebnie zamotałeś się w tym wszystkim.
Jeśli dobrze zrozumiałem to Twoim oczekiwaniem jest pętla, która znajdzie minima między kolejnymi punktami.
Rozwiązaniem Twojego problemu jest stworzenie pętli FOR, która będzie pracowała n-1 razy, gdzie n jest liczbą znalezionych indeksów maksymalnych.
Dlaczego n-1? Bo skoro punktów masz n, to zakresów między nimi jest n-1.
Następnie należy skorzystać z iteratora pętli FOR. Pozwoli on z użyciem bloczka Index Array wyciągnąć kolejne elementy (indeksy) z tablicy indeksów maksymalnych.
Reszta już jak w Twoim rozwiązaniu, czyli wycięcie odpowiedniej paczki z oryginalnego sygnału, znalezienie minimum i zbudowanie wykresu.
Zrzut ekranu masz poniżej. Proponuję dogłębnie przeanalizować to rozwiązanie, byćmoże odpalić z żarówką. Na przyszłość unikniesz niepotrzebnych "tworów" jeśli dobrze ogarniesz pętle, iteratory, itp.
Jeśli dobrze zrozumiałem to Twoim oczekiwaniem jest pętla, która znajdzie minima między kolejnymi punktami.
Rozwiązaniem Twojego problemu jest stworzenie pętli FOR, która będzie pracowała n-1 razy, gdzie n jest liczbą znalezionych indeksów maksymalnych.
Dlaczego n-1? Bo skoro punktów masz n, to zakresów między nimi jest n-1.
Następnie należy skorzystać z iteratora pętli FOR. Pozwoli on z użyciem bloczka Index Array wyciągnąć kolejne elementy (indeksy) z tablicy indeksów maksymalnych.
Reszta już jak w Twoim rozwiązaniu, czyli wycięcie odpowiedniej paczki z oryginalnego sygnału, znalezienie minimum i zbudowanie wykresu.
Zrzut ekranu masz poniżej. Proponuję dogłębnie przeanalizować to rozwiązanie, byćmoże odpalić z żarówką. Na przyszłość unikniesz niepotrzebnych "tworów" jeśli dobrze ogarniesz pętle, iteratory, itp.
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Połączyłem tak jak wyżej podałeś i efekt jest niezadowalający. Co jest nie tak? Bez Shift registerów da sie to wykonać?
Dodatkowo musiałem skorzystać z dwóch Build Array (co widać na screenie), bo bez tego wywalało złe połączenia w pętli - dziwne.
Screen nr 1 po lekkiej przeróbce twojego pomysłu
Screen nr 2 to twój pomysł, ale niestety bez powodzenia.
Dodatkowo musiałem skorzystać z dwóch Build Array (co widać na screenie), bo bez tego wywalało złe połączenia w pętli - dziwne.
Screen nr 1 po lekkiej przeróbce twojego pomysłu
Screen nr 2 to twój pomysł, ale niestety bez powodzenia.
Re: Problem z pętlą while
Hmmm..., wywalało Ci złe połączenia ze względu na domyślnie włączone autoindeksowanie na brzegu pętli.
Nie musisz robić z tego tablic bloczkiem Build Array. Wystarczy kliknąć na tym połączeniu na brzegu pętli i wybrać Disable Indexing. ;)
Nie musisz robić z tego tablic bloczkiem Build Array. Wystarczy kliknąć na tym połączeniu na brzegu pętli i wybrać Disable Indexing. ;)
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Problem z pętlą while
Popatrz na moje rozwiązanie, a potem na swoje i znajdź różnice (pomijając te build array, które dodałeś).
Już znalazłeś?
Świetnie... zatem kliknij prawym klawiszem na wejściowe terminale i kliknij Disable Indexing. Po tym cudownym zabiegu powinno wszystko działać.
Na przyszłość polecam przyglądać się uważnie obrazom!!!
Już znalazłeś?
Świetnie... zatem kliknij prawym klawiszem na wejściowe terminale i kliknij Disable Indexing. Po tym cudownym zabiegu powinno wszystko działać.
Na przyszłość polecam przyglądać się uważnie obrazom!!!

-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Ok zadziałało ale w 50% powiedzmy, spójrz na screna. Ciekawe dlaczego pomija niektóre przedziały hmm...
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Problem z pętlą while
Na przykładowych danych, które załączyłeś w pierwszym poście działało.
Załącz te dane co masz, to coś poradzimy.
Załącz te dane co masz, to coś poradzimy.
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Problem w tym, że ładuje te same dane hmm...
Dla pewności wrzucam jeszcze screena z programu.
Dla pewności wrzucam jeszcze screena z programu.
Ostatnio zmieniony 19 lis 2012 21:30 przez plejek, łącznie zmieniany 1 raz.
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Dalej to samo...rozkładam ręce
- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Problem z pętlą while
Ok, pomyliłem się...
Musisz odjąć od siebie dwa wyjścia z Index Array (drugi index od pierwszego) i wynik podpiąć do wejścia Length bloczka Array Subset (tak jak to miałeś w jednym z przykładów parę postów wyżej).
Umknęło mi to jakoś... Przepraszam. Po zmianach powinno działać prawidłowo.
Musisz odjąć od siebie dwa wyjścia z Index Array (drugi index od pierwszego) i wynik podpiąć do wejścia Length bloczka Array Subset (tak jak to miałeś w jednym z przykładów parę postów wyżej).
Umknęło mi to jakoś... Przepraszam. Po zmianach powinno działać prawidłowo.
-
- Posty: 25
- Rejestracja: 17 lis 2012 19:30
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Rzeszów
Re: Problem z pętlą while
Dzieki wielkie. Hula jak sie patrzy. Masz piwo u mnie ;) Dobrze, że są jeszcze tacy ludzie jak Ty 

- Pitol
- Moderator
- Posty: 987
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Problem z pętlą while
Zamiast piwa zrób dla mnie coś: posprzątaj diagram.
Pozamykaj części kodu do SubVI, staraj się nie kłaść przewodów od prawej do lewej. Ogólnie porządek ma być! Diagram ma się mieścić na jednym ekranie.
Chcesz się potem tym chwalić gdzieś? To niech to wygląda porządnie...
Pozamykaj części kodu do SubVI, staraj się nie kłaść przewodów od prawej do lewej. Ogólnie porządek ma być! Diagram ma się mieścić na jednym ekranie.
Chcesz się potem tym chwalić gdzieś? To niech to wygląda porządnie...