Zapis i odczyt danych z plików tdms
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Zapis i odczyt danych z plików tdms
Witam,
Od jakiegoś czasu próbuje poradzić sobie z dość wydawało mi się błahym (chyba) problemem. Próbuję zapisać pewne dane online do pliku, a później odczytywać te dane z pliku i je analizować. Problem w tym że nie dane zapisane i odczytane nie są takie same. Zamieściłem programy które obrazują sytuację. Program jest bardziej rozbudowany jednak usunąłem części które nie mają w tym przypadku znaczenia. Zamiast rzeczywistych danych podpiąłem generator, zapisuję z niego dane jednak po odczycie i przepuszczeniu przez bloczek FFT nie pokazuje mi prawdziwej częstotliwości. Próbowałem przerabiać program na różne sposoby jednak nie mogę tego dobrze zrobić. Rzeczywisty sygnał pochodzi z LPT (8bitów). Proszę o pomoc.
Przy okazji nie rozumiem dlaczego po ustawieniu generatora na 10Hz nie mam przebiegu nawet na żywo?
Od jakiegoś czasu próbuje poradzić sobie z dość wydawało mi się błahym (chyba) problemem. Próbuję zapisać pewne dane online do pliku, a później odczytywać te dane z pliku i je analizować. Problem w tym że nie dane zapisane i odczytane nie są takie same. Zamieściłem programy które obrazują sytuację. Program jest bardziej rozbudowany jednak usunąłem części które nie mają w tym przypadku znaczenia. Zamiast rzeczywistych danych podpiąłem generator, zapisuję z niego dane jednak po odczycie i przepuszczeniu przez bloczek FFT nie pokazuje mi prawdziwej częstotliwości. Próbowałem przerabiać program na różne sposoby jednak nie mogę tego dobrze zrobić. Rzeczywisty sygnał pochodzi z LPT (8bitów). Proszę o pomoc.
Przy okazji nie rozumiem dlaczego po ustawieniu generatora na 10Hz nie mam przebiegu nawet na żywo?
- Załączniki
-
- tdms-odczyt.vi
- (65.3 KiB) Pobrany 376 razy
-
- tdms-zapis.vi
- (217.18 KiB) Pobrany 361 razy
-
- Posty: 109
- Rejestracja: 26 lut 2010 13:41
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: Zapis i odczyt danych z plików tdms
W twoim tdms-zapis.vi tak naprawdę zapisujesz po jednj próbce do pliku tdms bo stosujesz convert from dynamic data to DBL zaraz po simulate signal i też dlatego nie widzisz sinusa przy 10 Hz. Jest to bym powiedział doskonały przykład Aliasingu bo na twoim chart widoczny był co 100-ny punkt sinusa próbkowanego 1000 razy/s o częstotliwości sygnału 10 Hz. Tak naprawdę widziałeś i odczytywałeś sygnał o próbkowaniu 10 razy/s. Aliasing jest też odpowiedzią na to czemu w analizie w tdms-odczyt.vi dostajesz inne częstotliwości.
Ostatnio zmieniony 10 sty 2012 19:56 przez AGF, łącznie zmieniany 2 razy.
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Jeżeli chodzi o te 10Hz to faktycznie wytłumaczenie jest dość oczywiste, aż się dziwię że o tym nie pomyślałem. Dziękuję za wytłumaczenie. Mnie jednak zdecydowanie bardziej zależy nad zrozumieniem właściwego problemu. Zamiast bloczka generatora podaję w rzeczywistości dane 8 lub 16-bitowe które pobieram z portu równoległego. Chcę zapisywać do pliku odczytane z portu wartości np. z częstotliwością 500Hz, a później odczytywać te dane z pliku innym programem i obliczać częstotliwość własną za pomocą FFT. W takim układzie właśnie wychodzą mi głupoty tzn. na wykresie mam wartości rzędu 0,05~0,2Hz niezależnie od danych wejściowych. Proszę o pomoc w tym temacie.
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Trochę czasu minęło ale nie widzę żadnej odpowiedzi. Zależy mi na rozwiązaniu tego problemu. Proszę chociaż o jakieś wskazówki które mi pomogą. Odczytuje dane z portu równoległego powiedzmy 100 razy na sekundę i potrzebuję je na bieżąco zapisywać do pliku z możliwością ich późniejszego odczytu, wyświetlenia i użycia np. FFT. Podczas moich prób rozjeżdża mi się czas przez co FFT nie pokazuje prawidłowej wartości.
Jeszcze raz proszę o jakąkolwiek pomoc.
Jeszcze raz proszę o jakąkolwiek pomoc.
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: Zapis i odczyt danych z plików tdms
Radziłbym sprawdzić jak to się zachwuje dla mniejszych częstotlwiości np. 10 Hz. Przy 100 Hz jest to jeszcze teoretycznie realne ale więcej to na pewno będą problemy (rozumiem, że dzieje się to w windowsie).
Zapsiujesz za każdym razem pojedyncze próbki a to niestety wymaga czasu.
Zapsiujesz za każdym razem pojedyncze próbki a to niestety wymaga czasu.
Ostatnio zmieniony 13 sty 2012 09:49 przez smiglo, łącznie zmieniany 1 raz.
smiglo
- Krzysztof Szewczyk
- Posty: 37
- Rejestracja: 19 maja 2011 02:48
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Koszyce
- Kontakt:
Re: Zapis i odczyt danych z plików tdms
uzyj RAM-Disk nie bedzie problemu z szybkim zapisem. Problem jest taki ze jestes limitowany rozmiarem ram-dysku
http://www.dobreprogramy.pl/RAMDisk,Pro ... 23779.html
http://www.dobreprogramy.pl/RAMDisk,Pro ... 23779.html
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Tym się na razie nie martwię chociaż pomysł z ram-dyskiem jest interesujący. Na wolnym laptopie który używam do testów przy użyciu bloczka "Write To Measurement File" (który jest jak wiadomo wolny) udaje mi się zapisywać około 100 próbek na sekundę. Wykorzystując dostęp do plików na niższym poziomie szybkość zapisu jest znacznie większa. Ten problem będę rozpatrywał jak opanuję problem opisany wcześniej. Dziękuję za te uwagi i proszę oczywiście o następne.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Zapis i odczyt danych z plików tdms
Jak sobie podejrzysz, co odczytałeś z tego pliku, to stamtąd wynika, że operujesz na waveformie o kroku czasowym 1 s. Czyli widmo jest poprawne (swoją drogą, czemu używasz wersji Re-Im, zamiast zwykłego PSD?), tylko twoje odczytane dane mają nieprawidłowy czas. Sugeruję zapewnić stały okres próbkowania w pętli i z danych generować sobie waveforma zapisywanego do TDMSa. Idea pokazana na rysunku.
Okres 2 ms nie powinien być problemem, ale sugeruję jeszcze oddzielenie próbkowania i zapisu poprzez równoległe pętle. Do tego można jeszcze wykorzystać Timed Loop, która sama może informować o przekroczeniu zadanego okresu - i będzie wiadomo, czy pomiar się rozjechał.
Aha, a tak w ogóle to nie możesz na przykład najpierw zebrać próbek, a potem dopiero zapisać do pliku?
Okres 2 ms nie powinien być problemem, ale sugeruję jeszcze oddzielenie próbkowania i zapisu poprzez równoległe pętle. Do tego można jeszcze wykorzystać Timed Loop, która sama może informować o przekroczeniu zadanego okresu - i będzie wiadomo, czy pomiar się rozjechał.
Aha, a tak w ogóle to nie możesz na przykład najpierw zebrać próbek, a potem dopiero zapisać do pliku?
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Robiłem doświadczenia wg wcześniejszego pomysłu ale problem nie ustąpił. Wciąż rozmijam się z czasem. Co ja źle robię? Bez doświadczenia można stracić naprawdę dużo czasu rozwiązując takie problemy. Co do pytań to przypadek że użyłem wersji Re-Im - tak naprawdę próbowałem różnych bloczków sprawdzając czy nie ma różnic. Jeśli chodzi o wcześniejsze zbieranie próbek to taki miałem pomysł. Może nie jest to rozwiązanie najlepsze ale nie mam niestety doświadczenia. Proszę pamiętać że pokazałem tylko część programu.
Jak zwykle proszę o następne wskazówki.- Załączniki
-
- zapis2_tdms.vi
- (77.52 KiB) Pobrany 353 razy
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Zapis i odczyt danych z plików tdms
A, oczywiście dt w waveformie jest w sekundach, więc te 14 musisz podzielić przez 1000 jeszcze. Mój błąd.
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Nie w tym rzecz.
Nawet jak dzielę przez 1000 to i tak mi źle pokazuje FFT, np. jeśli ustawię szybkość na 1ms i sinusoidę na 37Hz to po odczycie pliku FFT pokazuje mi 300Hz, jeśli dam 5ms i 37Hz to w wyniku mam 60Hz a przy 10ms i 37Hz FFT daje wynik 30Hz.
W pliku nie jest przechowywany czas każdej próbki ale parametr "wf_increment" ma wartość która jest taka sama jak ustawiona przez mnie ilością próbek. Dalej jestem w kropce.
Nawet jak dzielę przez 1000 to i tak mi źle pokazuje FFT, np. jeśli ustawię szybkość na 1ms i sinusoidę na 37Hz to po odczycie pliku FFT pokazuje mi 300Hz, jeśli dam 5ms i 37Hz to w wyniku mam 60Hz a przy 10ms i 37Hz FFT daje wynik 30Hz.
W pliku nie jest przechowywany czas każdej próbki ale parametr "wf_increment" ma wartość która jest taka sama jak ustawiona przez mnie ilością próbek. Dalej jestem w kropce.
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Jest dość małe zainteresowanie próbie rozwiązania problemu który opisałem. Zastanawiam się czy to nie jest przypadkiem wina umieszczenia tematu w złym dziale? Chyba że nie jest to takie proste jak sądziłem.
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Zapis i odczyt danych z plików tdms
Spokojnie, to nie jest forum onetu gdzie tysiące ludzi pisze co 1s. Widocznie osoby zainteresowane są na urlopie/chorobowym albo po prostu nie mają czasu. Inni najwyraźniej też nie mają czasu żeby od początku się wdrożyć w temat. Cierpliwości.
-
- Posty: 109
- Rejestracja: 26 lut 2010 13:41
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: Zapis i odczyt danych z plików tdms
sanay:
A skąd się tam bierze ta wartość?W pliku nie jest przechowywany czas każdej próbki ale parametr "wf_increment" ma wartość która jest taka sama jak ustawiona przez mnie ilością próbek. Dalej jestem w kropce.
-
- Posty: 15
- Rejestracja: 08 wrz 2011 11:03
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Ruda Śląska
Re: Zapis i odczyt danych z plików tdms
Do Pitol:
Nie chciałem być nie miły. Przypominam się bo mam mało czasu. Sam dużo czasu poświęciłem na rozwiązanie tego problemu, a ponieważ mam jeszcze do zrobienia dużo z innymi elementami w moim projekcie, więc rzuciłem tematem na forum żeby nie zmarnować nie potrzebnie zbyt dużo czasu. Wydawało mi się że to nie powinno być trudne. Niestety mocno się to rozciąga w czasie więc nie wiem już czy mogę liczyć na pomoc z forum.
Do AGF:
Przepraszam ale nie rozumiem czy to było pytanie do mnie czy raczej wskazówka do przemyślenia. Tak czy inaczej nie rozumiem. Zapisuję dane w sposób jaki przedstawiłeś na obrazku. Proszę o wyjaśnienie.
Nie chciałem być nie miły. Przypominam się bo mam mało czasu. Sam dużo czasu poświęciłem na rozwiązanie tego problemu, a ponieważ mam jeszcze do zrobienia dużo z innymi elementami w moim projekcie, więc rzuciłem tematem na forum żeby nie zmarnować nie potrzebnie zbyt dużo czasu. Wydawało mi się że to nie powinno być trudne. Niestety mocno się to rozciąga w czasie więc nie wiem już czy mogę liczyć na pomoc z forum.
Do AGF:
Przepraszam ale nie rozumiem czy to było pytanie do mnie czy raczej wskazówka do przemyślenia. Tak czy inaczej nie rozumiem. Zapisuję dane w sposób jaki przedstawiłeś na obrazku. Proszę o wyjaśnienie.