gut-space / pulsar

Eksperyment mający na celu odbiór sygnału z pulsaru PSR 329+54.
4 stars 1 forks source link

Konwersja plików raw (z AirSpy) na filterbank #3

Open tomaszmrugalski opened 3 years ago

tomaszmrugalski commented 3 years ago

W celu użycia zestawu narzędzi Presto, konieczna jest konwersja plików raw (zawierających wartości IQ nagranych za pomocą gqrx) na format filterbank. Potencjalnie użyteczne są do tego następujące narzędzia:

  1. bin2fil-py
  2. AirSystem
  3. Pulsar filterbank, autorstwa Canadian Center for Experimental Radio Astronomy.
tomaszmrugalski commented 3 years ago

Próby konwersji za pomocą bin2fil-py były bardzo nieudane: 1, 2.

Natknąłem się na kilka problemów:

  1. Najpoważniejszy problem jest taki, że program bin2fil nie umożliwia podania, czy próbki są 8 czy 12 bitowe. Dlatego podejrzewam, że kompletnie nie obsługuje on 12-bitowych próbek z AirSpy mini.

  2. Dane wynikowe wyglądają jak śmieci. Tutaj próba analizy za pomocą rfifind, co wg tutoriala do PRESTO jest jednym z pierwszych kroków. Poniżej zawartość pliku dla obserwacji 2021-10-24: 2021-10-24-rfifind Na pierwszy rzut oka widać wiele problemów:

Wniosek: bin2fil jest nieużywalny w obecnej formie. Być może po odpowiedniej modyfikacji źródeł udałoby się uzdatnić go do użytku.

tomaszmrugalski commented 3 years ago

Kolejnym programem, którego próbowałem użyć do konwersji jest AirSystem. Jest on dedykowany do obserwacji pulsarów za pomocą AirSpy. Tutaj należy zaznaczyć, że dostępne są 2 wersje AirSpy: R2 oraz Mini. Wg producenta wspierają one 10MSPS (R2), a mini wspiera jeszcze dodatkowo 6 i 3 MSPS. Dostępne pliki zostały nagrane z 3 oraz 6 MSPS. Niestety, w konfiguracji programu AirSystem można wybrać 10 i 2,5MHz sampling rate. Zatem wygląda na to, że nie ma możliwości konwersji plików przy samplowaniu innym niż 10 lub 2,5MHz. Screenshot from 2021-10-31 18-25-57

tomaszmrugalski commented 3 years ago

Chyba udało mi się zmusić AirSystemSuite do pracy. Potrzebne są następujące kroki:

  1. uruchomić AirSystemSuite, kliknąć Recording (lewy górny przycisk). Zostanie zapisany plik AirSpyConf.xml z parametrami. W moim przypadku system nie miał podłączengo dongle'a AirSpy, ale nie ma to znaczenia. Utworzył się plik .xml.
  2. Zmodyfikować plik .xml, zwłaszcza następujące parametry:
    • <SampleRate xmlns:n9="ObservationParameters" n9:SampleRate="2.5e+06"/>
    • <BinfileName xmlns:n21="ObservationParameters" n21:BinFileName="/sciezka/do/plik.raw"/>
    • <FilFileName xmlns:n22="ObservationParameters" n22:FilFileName="/sciezka/do/pliku/plik.fil"/>
  3. kliknąć Conversion (prawy górny przycisk).

Niepokojące jest to, że zmiana Sample rate na 6MSPS została nadpisana na 2.5MSPS.

tomaszmrugalski commented 3 years ago

AirSpySuite przy konwersji stara się użyć katalogu psrcat. Program można pobrać stąd. UWAGA: Pulsar B0329+54 ma kilka oznaczeń w różnych katalogach (lista tutaj w sekcji identifiers. Katalog PSRCAT używa oznaczenia J0332+5434 i taką właśnie nazwę należy podać w pliku AirSpyConf.xml, żeby udało się wyciągnięcie danych z PSRCAT.

Dane z katalogu mogą być użyteczne do dobrania parametrów filtrów.

tomaszmrugalski commented 3 years ago

Trzeci program to Pulsar filterbank. Niestety, również ten na współczesnym Ubuntu wywala szereg problemów. Wygląda na to, że był pisany w pythonie 2. Spędziłem nad tym ładnych parę godzin, ale w końcu udało mi się go uruchomić. Przy okazji wysłałem autorom swoje poprawki.

Pulsar filterbank ma taką ogromną zaletę, że korzysta z GNU Radio, więc jest łatwo modyfikowalny i potencjalnie można go będzie używać do odbioru.

Jest wymagany jeszcze jeden krok - definiowany flow zakłada, że dane wejściowe odczytywane są z urządzenia (airspy, sdr-rtl lub USRP), a nie z pliku. Wydaje mi się, że to tylko kwestia podmiany bloczku wejściowego. To jednak zadanie na jakiś inny wieczór.

tomaszmrugalski commented 3 years ago

Jeszcze w ramach ciekawostki wrzucę zrzut flowu z Pulsar filterbank:

filterbank-flow

tomaszmrugalski commented 3 years ago

Ok, jest spory postęp. Zaczynam powoli ogarniać podstawy, jak działa pulsar_filterbank.

Próbowałem kilku ścieżek. Po pierwsze, trzeba zmodyfikować bloki wejściowe, żeby używało osmocom source zamiast usrp source. W parametrze device można podać "file=p4_626M_2M4.raw,rate=2.4e6,freq=626e6". To spowoduje, że osmocom zamiast czytać z urządzenia, będzie czytał z pliku. Niestety, wywalalo mi jakieś exception.

tomaszmrugalski commented 3 years ago

Udało mi się jednak zrobić coś innego. Trafiłem na ten wątek, gdzie csete (autor gqrx) wyjaśnia, jak oczytywać pliki raw z gqrxa w GNU Radio: trzeba dodać 2 bloczki: file reader i throttle. Wszystkie typy danych powinny być ustawione na complex.

Warto też w dwóch blokach FFT (zwłaszcza tego z fft size 2048k) zmienić ilość wątków na coś większego niż 1.

Zmieniałem też wartość runtime, która podaje w sekundach, ile danych wejściowych nagrania przetwarzać.

tomaszmrugalski commented 3 years ago

Wersja poprawiona na pythona 3 dostępna jest tutaj: https://github.com/tomaszmrugalski/pulsar_filterbank. Instrukcja użytkowania:

  1. ściągnąć z gita (git clone https://github.com/tomaszmrugalski/pulsar_filterbank.git)
  2. otworzyć w gnu radio companion i przedytować File Source, żeby wskazywał na lokalny plik.
  3. Zmienić blok Throttle, żeby odpowiadał próbkowaniu nagranego pliku.
  4. Zmienić blok Parameter freq, żeby odpowiadał częstotliwości nagrania.
  5. Warto zmienić Parameter runtime, żeby przetwarzać np. pierwsze 10 sekund, co znacznie przyspiesza eksperymenty.
  6. Można zmienić Parameter wide, żeby wynikowe pliki fil były 16 bitowe.

Program można uruchomić Generate the flow graph i potem execute flow graph w Gnu Radio Companion. Można też w konsoli skompilować za pomocą grcc. W obu przypadkach pod spodem generuje się plik pulsar_filterbank.py, z którym można dalej eksperymentować ręcznie.

Po zakończeniu pracy, flowgraph generuje kilka plików: .fil (który zawiera sam nagłówek) oraz .filtmp (dane). Zapewne należy je połączyć, ale póki co taki rozdział jest bardzo wygodny, bo można łatwo analizować ich zawartość.