Budowa sygnału

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
mjcorp
Posty: 11
Rejestracja: 04 lip 2010 13:25
Wersja środowiska: LabVIEW 8.6

Budowa sygnału

Post autor: mjcorp »

Witam wszystkich, chciałbym prosić was ponownie o pomoc :) Okazuje się że to forum to jedno z niewielu konkretnych miejsc gdzie można się czegoś praktycznego nauczyć...

Posiadam dwie tablice jedno wymiarowe o tej samej długości. Pierwsza zawiera wartości czasów w milisekundach, a druga próbki sygnału. Ponieważ mamy nieregularne próbkowanie, nie mogę zbudować prostego waveformu. Najlepszym rozwiązaniem byłoby coś w rodzaju XYChart, ale w menu jest tylko XYgraph. Najkorzystniej dla mnie byłoby zbudowanie sygnału dynamicznego DDT ze względu na proste w obsłudze narzędzia. Wszystko działa w pętli while.

Z góry dziękuję za radę i pozdrawiam
Miłosz
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Budowa sygnału

Post autor: jogurt_owocowy »

Cześć,
Najlepszym rozwiązaniem byłoby coś w rodzaju XYChart, ale w menu jest tylko XYgraph.
Dlaczego tak sądzisz?
Najkorzystniej dla mnie byłoby zbudowanie sygnału dynamicznego DDT ze względu na proste w obsłudze narzędzia.
Jakich konkretnie narzędzi potrzebujesz? Co konkretnie chcesz zrobić z tymi sygnałami?
mjcorp
Posty: 11
Rejestracja: 04 lip 2010 13:25
Wersja środowiska: LabVIEW 8.6

Budowa sygnału

Post autor: mjcorp »

Witam,

XYGraph pozwala podłączyć inny sygnał na oś X. Niestety nie zapisuje poprzednich danych tylko wyświetla aktualne.

Z sygnałem chciałbym zrobić rzecz następującą,

Dane są nadawane partiami co dwie sekundy, ale w domenie czasu są ciągłe. Tworze dwie tablice, jedną z czasami a drugą z wartościami. Obie są równo długie ale z każdym cyklem mają różną długość, ponieważ dane są wyciągane z kolejki ( transmisja RS232) i to zależy od ilości danych w kolejce.

Chciałbym te dane na początek filtrować. Niestety tablica, która ma 17 próbek przy częstotliwości próbkowania 800Hz jest za krótka. Trzeba by pozbierać te tablice w jedną większą. Przygotowałem stosowny kod. Niestety napotkałem problem tego typu, że wyjściowa tablica np. zawierająca 400 skumulowanych próbek jest w każdym cylku pętli wrysowywana do charta i mam te same dane zkopiowane x razy ( w każdym cyklu pętli dokładane są kolejne krótkie tablice gdy tymczasem długa się jeszcze nie zmienia i cały czas chart dodaje te 400 próbek)

Dodatkowo jest problem z domeną czasu. Chart sam numeruje próbki. Ja mam przyporządkowany nr próbki do wartości i nie zawsze są to kolejne nr. Czasami jeden nr wypada.

Za chwilę równolegle do tych procesów będę miał akwizycję DAQ i sygnały będą w DDT.

Jestem w stanie tak zmontować kod aby próbki były oddalone od siebie w równej odległości czasowej. Niestety układ podczas nadawania robi co 2 sekundy przerwy, więc prosta konwersja 1D array to DDT gubi domenę czasu i chart wyświetla od nowa. Do tego stosując 1D array do DDT nie mogę wprowadzić własnej nr próbek czy podania czasu czy częstotliwości próbkowania...

Tymczasem idea którą chcę zrealizować jest śmiesznie prosta. Zamienić 2 tablicowy sygnał na taki, który umożliwi mi korzystanie z dobrodziejstw DSP oferowanych przez Labview.

Mam nadzieję, że udało mi się odpowiedzieć na pytanie :)

Pozdrawiam
Miłosz
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Budowa sygnału

Post autor: jogurt_owocowy »

XYGraph pozwala podłączyć inny sygnał na oś X. Niestety nie zapisuje poprzednich danych tylko wyświetla aktualne.
A Ty chciałbyś wyświetlać dane skumulowane tj. wszystkie, jakie do tej pory odebrałeś?
Chciałbym te dane na początek filtrować. Niestety tablica, która ma 17 próbek przy częstotliwości próbkowania 800Hz jest za krótka.
Nie jest za krótka. W LV masz dostęp do funkcji pozwalających filtrować sygnały fragmentami, przy zachowaniu ciągłości sygnału. Są to funkcje pozwalające ustawić warunki początkowe filtru (np. IIR Filter with I.C.) albo funkcje filtrujące próbka po próbce (np. IIR Filter PtByPt).
Jestem w stanie tak zmontować kod aby próbki były oddalone od siebie w równej odległości czasowej. Niestety układ podczas nadawania robi co 2 sekundy przerwy, więc prosta konwersja 1D array to DDT gubi domenę czasu i chart wyświetla od nowa. Do tego stosując 1D array do DDT nie mogę wprowadzić własnej nr próbek czy podania czasu czy częstotliwości próbkowania...
Tymczasem idea którą chcę zrealizować jest śmiesznie prosta. Zamienić 2 tablicowy sygnał na taki, który umożliwi mi korzystanie z dobrodziejstw DSP oferowanych przez Labview.
Napisałeś, że masz już zmontowany kod resamplujący sygnał do postaci równomiernej (albo czegoś nie zrozumiałem). Pokaż ten kod.

I jeszcze jedno pytanie natury bardziej ogólnej. Co to za urządzenie, które wysyła Ci te nierównomierne próbki?
mjcorp
Posty: 11
Rejestracja: 04 lip 2010 13:25
Wersja środowiska: LabVIEW 8.6

Budowa sygnału

Post autor: mjcorp »

Witam,

Mam lepszy pomysł. Uproszczę problem. Załączyłem programik i dwa pliki z danymi.

Po rozpakowaniu trzeba w Diagramach zmienić położenie plików z danymi.

Plik Tablica.txt zawiera dane zapisane przez mój program pomiarowy. Dane te są zapisaną tablicą, która po konwersji do DDT i użyciu expres VI "Repack Value" ( przepakowanie do 400 próbek) została zapisana do pliku pomiarowego "po repack.lvm". Jak widać na przebiegach czasowych, co jakiś czas obraz z Charta jest czyszczony i rozpoczyna się wyświetlanie od nowa. Jest to spowodowane faktem, że krótkie tablice ( max 70 próbek) przy konwertowaniu do DDT za każdym razem zerują licznik czasu sygnału Dynamicznego. Przepakowanie "Repack Value" powoduje, że rozpoczęcie wyświetlania od nowa pojawia się rzadziej. W chwili takiego zaburzenia filtr powoduje powstanie artefaktu. Poniżej w tej samej pętli znajduje się algorytm obliczania numeru i czasu próbki pierwszej każdej partii danych (każdych kolejnych 400 próbek).

Chciałbym w jakiś sposób zmodyfikować sygnał dynamiczny tak aby zawierał sygnał z prawidłową numeracją próbek, aby nie było artefaktów po filtracji i chart nie startował z wyświetlaniem od nowa.

Pozdrawiam
Miłosz Jamroży
Załączniki
problem.rar
(277.36 KiB) Pobrany 302 razy
mjcorp
Posty: 11
Rejestracja: 04 lip 2010 13:25
Wersja środowiska: LabVIEW 8.6

Budowa sygnału

Post autor: mjcorp »

Witam wszystkich.

Rozwiązaniem problemu jest wstawienie Collector.Vi między źródło a wyświetlanie i ustawienie odpowiedniego długiego bufora.

Pozdrawiam
Miłosz Jamroży
ODPOWIEDZ