Czytanie bit po bicie. Modulacja BFSK.
Czytanie bit po bicie. Modulacja BFSK.
Witam,
mam do zrobienia modulacje BFSK czyli muszę zmodulować sygnał analogowy sygnałem binarnym. 0 przypisane jest częstotliwości f1, a 1 --->f2.
Problemem jest, jak sczytywać bit po bicie z danego stringa, aby wykonać kluczowanie?
Moja dotychczasowa koncepcja:
1. Otwieram plik w którym znajduje się dowolny tekst.
2. Następnie wybieram blok "read from text file"
3. 2 Przekazuje na "String to byte array". Na wyjściu otrzymuje [U8].
Teraz muszę z tego wyodrębniać poszczególne bity tak aby kluczować blokiem "Select", dwie częstotliwości dla stanów 0 i 1.
Czyli pytanie brzmi jak sczytywać z danej macierzy bit bo bicie? Czy należy tutaj skorzystać z macierzy Boolean? A może konwersja "Binary U8 to Digital Table"?
Z góry dziękuję za okazaną pomoc.
mam do zrobienia modulacje BFSK czyli muszę zmodulować sygnał analogowy sygnałem binarnym. 0 przypisane jest częstotliwości f1, a 1 --->f2.
Problemem jest, jak sczytywać bit po bicie z danego stringa, aby wykonać kluczowanie?
Moja dotychczasowa koncepcja:
1. Otwieram plik w którym znajduje się dowolny tekst.
2. Następnie wybieram blok "read from text file"
3. 2 Przekazuje na "String to byte array". Na wyjściu otrzymuje [U8].
Teraz muszę z tego wyodrębniać poszczególne bity tak aby kluczować blokiem "Select", dwie częstotliwości dla stanów 0 i 1.
Czyli pytanie brzmi jak sczytywać z danej macierzy bit bo bicie? Czy należy tutaj skorzystać z macierzy Boolean? A może konwersja "Binary U8 to Digital Table"?
Z góry dziękuję za okazaną pomoc.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: Czytanie bit po bicie. Modulacja BFSK.
Hej
Co rozumiesz przez 'dowolny tekst'? Jeśli jest to liczba w systemie dziesiętnym, to odczytujesz ją przy pomocy 'read from text file', następnie zamieniasz tekst na liczbę bloczkiem 'decimal string to number' a otrzymaną w ten sposób liczbę zamieniasz na tablicę bitową bloczkiem 'number to boolean array'. Indeksując tablicę wybierasz z niej interesujące Cię bity.
Jeśli liczba zapisana jest w pliku w postaci binarnej, to możesz np. odczytać tekst z pilu, przy pomocy 'string subset' wyłuskać z niego interesujący cię bit, sprawdzić czy jest równy 1 i na tej podstawie podjąć odpowiednie działanie.
Jeśli w pliku masz tablicę liczb, to zamiast 'read from text file' wykorzystaj 'read from spreadsheet file'.
Pozdrawiam
Ender
Co rozumiesz przez 'dowolny tekst'? Jeśli jest to liczba w systemie dziesiętnym, to odczytujesz ją przy pomocy 'read from text file', następnie zamieniasz tekst na liczbę bloczkiem 'decimal string to number' a otrzymaną w ten sposób liczbę zamieniasz na tablicę bitową bloczkiem 'number to boolean array'. Indeksując tablicę wybierasz z niej interesujące Cię bity.
Jeśli liczba zapisana jest w pliku w postaci binarnej, to możesz np. odczytać tekst z pilu, przy pomocy 'string subset' wyłuskać z niego interesujący cię bit, sprawdzić czy jest równy 1 i na tej podstawie podjąć odpowiednie działanie.
Jeśli w pliku masz tablicę liczb, to zamiast 'read from text file' wykorzystaj 'read from spreadsheet file'.
Pozdrawiam
Ender
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Czytanie bit po bicie. Modulacja BFSK.
Dzięki za odzew.
Pisząc "dowolny tekst" mam na myśli właśnie dowolną informację zamieszczoną w pliku tekstowym.
Załóżmy że jest to słowo "Ananas".
Teraz odczytuje ten plik i przekazuje go do bloku "String to Byte Array". Ponieważ każdemu znakowi alfanumerycznemu przyporządkowana jest pewna liczba z tablicy ASCII, to literze "A" zostanie przypisana liczba 65, czyli w zapisie binarnym bedzie to 01000001. Czyli w pierwszej komórce tablicy będę mial 8bitów i w każdej następnej tyle samo. Czyli dla tego przykładu mam tablicę 6 komórek po 8 bitów każda. Razem 48 bitów. Teraz potrzebuję po kolei wyciągać każdy bit. Czyli najpierw 0, potem 1, potem 0 itd. I pytanie jak to zrobić?
Bo rozumiem że jeśli będę indexował tą tablicę to będę wyciągał cały bajt, a ja potrzebuje tylko pojedynczy bit. Myślę że teraz jasno przedstawiłem o co mi chodzi. Jeśli chodzi o LV to jestem początkującym i nie wykluczam, że powyższy tok myślenia może być błędny
Pisząc "dowolny tekst" mam na myśli właśnie dowolną informację zamieszczoną w pliku tekstowym.
Załóżmy że jest to słowo "Ananas".
Teraz odczytuje ten plik i przekazuje go do bloku "String to Byte Array". Ponieważ każdemu znakowi alfanumerycznemu przyporządkowana jest pewna liczba z tablicy ASCII, to literze "A" zostanie przypisana liczba 65, czyli w zapisie binarnym bedzie to 01000001. Czyli w pierwszej komórce tablicy będę mial 8bitów i w każdej następnej tyle samo. Czyli dla tego przykładu mam tablicę 6 komórek po 8 bitów każda. Razem 48 bitów. Teraz potrzebuję po kolei wyciągać każdy bit. Czyli najpierw 0, potem 1, potem 0 itd. I pytanie jak to zrobić?
Bo rozumiem że jeśli będę indexował tą tablicę to będę wyciągał cały bajt, a ja potrzebuje tylko pojedynczy bit. Myślę że teraz jasno przedstawiłem o co mi chodzi. Jeśli chodzi o LV to jestem początkującym i nie wykluczam, że powyższy tok myślenia może być błędny

-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Czytanie bit po bicie. Modulacja BFSK.
Ender już Ci w zasadzie odpowiedział - bloczek Number to Boolean Array. Zwróć tylko uwagę na kolejność bitów (pierwszy jest LSB).
Czytanie bit po bicie. Modulacja BFSK.
Dzięki za pomoc, już teraz wiem jak zrobić 
Ostatnie pytanie. Czy da się zrobić tak, żeby w czasie rzeczywistym wypuszczać bity po za pętlę FOR?
Czyli w czasie kiedy wybierane są kolejne bajty i bity z tablicy, to aktualnie wskazywany bit w tym samym momencie wychodzi po za pętlę i oddzaiłuje na bloki po za pętlą. Bo jak próbuję coś takiego zrobić, to dopóki nie skończy się pętla to bity nie mogą zostać wysłane po za nią, nawet gdy przy wyjściu sygnału z pętli wyłączę automatyczne indeksowanie.

Ostatnie pytanie. Czy da się zrobić tak, żeby w czasie rzeczywistym wypuszczać bity po za pętlę FOR?
Czyli w czasie kiedy wybierane są kolejne bajty i bity z tablicy, to aktualnie wskazywany bit w tym samym momencie wychodzi po za pętlę i oddzaiłuje na bloki po za pętlą. Bo jak próbuję coś takiego zrobić, to dopóki nie skończy się pętla to bity nie mogą zostać wysłane po za nią, nawet gdy przy wyjściu sygnału z pętli wyłączę automatyczne indeksowanie.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Czytanie bit po bicie. Modulacja BFSK.
Kolejność wykonywania bloczków jest w LabVIEW określona przez dataflow - czyli przez przepływ danych przez druty. To, co jest podpięte za pętlą, wykona się dopiero po jej zakończeniu. Z drugiej strony równoległość można uzyskać bardzo łatwo, tworząc oddzielną pętlę while i przesyłając do niej dane np. kolejką. Z trzeciej strony, konwersja treści wszystkich postów z tego tematu (ok. 3000 znaków) na postać bitową zajmuje u mnie 1-2 ms, więc zrównoleglanie czegokolwiek wydaje mi się tu sporym przestrzeleniem ;)
Czytanie bit po bicie. Modulacja BFSK.
Dzięki za odpowiedź.
Jednak chciałbym wiedzieć czy da się wyłuskiwać kolejne bity z tablicy, bez użycia pętli FOR.
Konkretny przykład.
Mam tablicę 1D, która zawiera n elementów. Chciałbym żeby w czasie rzeczywistym wyciągać kolejno bit po bicie i od razu przekazywać je na następne bloki. Gdybym użył pętli FOR to musiałbym w niej zamknąć również pozostałe bloki, a teraz jeżeli symuluje transmisję pomiędzy stroną nadawczą i odbiorczą to zamknięcie obu stron w jednej pętli FOR jest trochę bezsensowne. Co prawda będzie to działać, jednak wolałbym, żeby strona nadawcza i odbiorcza nie były powiązane ze sobą tą samą pętlą FOR.
Jednak chciałbym wiedzieć czy da się wyłuskiwać kolejne bity z tablicy, bez użycia pętli FOR.
Konkretny przykład.
Mam tablicę 1D, która zawiera n elementów. Chciałbym żeby w czasie rzeczywistym wyciągać kolejno bit po bicie i od razu przekazywać je na następne bloki. Gdybym użył pętli FOR to musiałbym w niej zamknąć również pozostałe bloki, a teraz jeżeli symuluje transmisję pomiędzy stroną nadawczą i odbiorczą to zamknięcie obu stron w jednej pętli FOR jest trochę bezsensowne. Co prawda będzie to działać, jednak wolałbym, żeby strona nadawcza i odbiorcza nie były powiązane ze sobą tą samą pętlą FOR.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Czytanie bit po bicie. Modulacja BFSK.
To nie do końca rozumiem, w czym leży problem. Uściślijmy, w jakim kontekście mówisz o "czasie rzeczywistym", bo żadna znana mi definicja tego pojęcia nie za bardzo pasuje do twojego rozumowania.
Ustalmy sobie dwie podstawowe (i chyba jedyne sensowne możliwości), jakie masz: W wersji 1 pojawi się opóźnienie związane z konwertowaniem najpierw całego stringa do reprezentacji binarnej, zanim zaczniesz coś więcej z tymi bitami robić. Plusem jest wyraźne rozdzielenie funkcjonalności na najniższym poziomie (najpierw konwertuję coś do pożądanej przeze mnie postaci, potem używam pożądanej postaci do dalszych działań).
Wersja 2 powinna wykonywać się nieco szybciej, bo obsługujesz bity od razu - po każdej konwersji.
Jeśli chcesz symulować taką komunikację, to rozsądnie by było stworzyć zupełnie oddzielny program nadawcy i oddzielny odbiorcy. Przesyłanie danych między vi można zrealizować na przykład za pomocą nazwanych kolejek (queue), shared variables, tudzież bardziej wyszukanych środków pokroju komunikacji po tcp.
Ustalmy sobie dwie podstawowe (i chyba jedyne sensowne możliwości), jakie masz: W wersji 1 pojawi się opóźnienie związane z konwertowaniem najpierw całego stringa do reprezentacji binarnej, zanim zaczniesz coś więcej z tymi bitami robić. Plusem jest wyraźne rozdzielenie funkcjonalności na najniższym poziomie (najpierw konwertuję coś do pożądanej przeze mnie postaci, potem używam pożądanej postaci do dalszych działań).
Wersja 2 powinna wykonywać się nieco szybciej, bo obsługujesz bity od razu - po każdej konwersji.
Jeśli chcesz symulować taką komunikację, to rozsądnie by było stworzyć zupełnie oddzielny program nadawcy i oddzielny odbiorcy. Przesyłanie danych między vi można zrealizować na przykład za pomocą nazwanych kolejek (queue), shared variables, tudzież bardziej wyszukanych środków pokroju komunikacji po tcp.
Czytanie bit po bicie. Modulacja BFSK.
Bardziej mi chodziło o to, że te wybierane kolejno bity oddziałują na bloki za pętlę FOR. Czyli, że pętla FOR wybiera jeszcze bity, ale te które już zostały wybrane oddziałują na to co sie dzieje za pętlą zanim ta pętla się skończy
. W sumie pewnym rozwiązaniem tutaj też jest rejestr przesuwny, który można wybrać w pętli FOR zamiast automatycznie indeksowanych tuneli. Chociaż w zasadzie efekt jest podobny do tego co zaprezentowałeś. Narazie zrobie według tego mniej więcej, jak będę miał kiedyś więcej czasu i coś wymyślę to odświeżę temat, może komuś się przyda 
Już jakoś sobie z tym poradzę, dzięki za pomoc


Już jakoś sobie z tym poradzę, dzięki za pomoc

-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Czytanie bit po bicie. Modulacja BFSK.
Ok... Przyznaję, że teraz już kompletnie nie rozumiem, o co chodzi z tym "oddziaływaniem na bloki poza pętlą w czasie, kiedy pętla wybiera jeszcze bity"
Mógłbyś tę myśl jeszcze jaśniej wytłumaczyć? Narysować może jakiś schemat, rozpisać krok po kroku, czy coś takiego?

- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Czytanie bit po bicie. Modulacja BFSK.
Przyznam że ja też nie bardzo rozumiem w czym problem i co kolega chce osiągnąć. Skoro pętla for i jej zachowanie jest problemem, to ... może ją wyrzucić? Zamiast tego użyj indeksowania tablicy - możesz wtedy z tablicy wyciągnąć konkretnie interesujący Cię bit w odpowiednim momencie.
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- set-han
- Posty: 17
- Rejestracja: 31 lip 2009 04:10
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Krakow
Re: Czytanie bit po bicie. Modulacja BFSK.
Kolega chyba chce osiągnąć funkcjonalność z wersji 2 zaprezentowanej przez PiDi'ego, ale żeby konwersja i działanie właściwe było oddzielone jak w wersji 1 
