Strona 1 z 2

Zapis i odczyt danych z plików tdms

: 09 sty 2012 19:07
autor: sanay
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?
zapis do pliku
zapis do pliku
odczyt z pliku
odczyt z pliku

Re: Zapis i odczyt danych z plików tdms

: 10 sty 2012 19:36
autor: AGF
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.

Re: Zapis i odczyt danych z plików tdms

: 10 sty 2012 21:56
autor: sanay
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.

Re: Zapis i odczyt danych z plików tdms

: 12 sty 2012 21:24
autor: sanay
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.
In port.jpg
In port.jpg (2.85 KiB) Przejrzano 18307 razy

Re: Zapis i odczyt danych z plików tdms

: 13 sty 2012 09:46
autor: smiglo
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.

Re: Zapis i odczyt danych z plików tdms

: 13 sty 2012 09:50
autor: Krzysztof Szewczyk
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

Re: Zapis i odczyt danych z plików tdms

: 13 sty 2012 20:41
autor: sanay
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.

Re: Zapis i odczyt danych z plików tdms

: 14 sty 2012 00:39
autor: PiDi
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?

Re: Zapis i odczyt danych z plików tdms

: 14 sty 2012 12:09
autor: sanay
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.
zapis2_tdms.jpg
Jak zwykle proszę o następne wskazówki.

Re: Zapis i odczyt danych z plików tdms

: 14 sty 2012 13:17
autor: PiDi
A, oczywiście dt w waveformie jest w sekundach, więc te 14 musisz podzielić przez 1000 jeszcze. Mój błąd.

Re: Zapis i odczyt danych z plików tdms

: 14 sty 2012 14:57
autor: sanay
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.

Re: Zapis i odczyt danych z plików tdms

: 18 sty 2012 15:27
autor: sanay
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. :)

Zapis i odczyt danych z plików tdms

: 18 sty 2012 15:58
autor: Pitol
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.

Re: Zapis i odczyt danych z plików tdms

: 18 sty 2012 19:04
autor: AGF
sanay:
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.
A skąd się tam bierze ta wartość?

Re: Zapis i odczyt danych z plików tdms

: 19 sty 2012 13:38
autor: sanay
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.