Introducing gr-satellites

This post is to present my gr-satellites project. The goal of this project is to make a collection of GNUradio decoders for the telemetry of different satellites. The decoders support submitting telemetry in real time to the PE0SAT telemetry server. Another goal is that the decoders are as easy to use as possible, to try to make more people interested in receiving digital telemetry from satellites and collaborating in online telemetry submission.

The decoders can be used with the Gqrx SDR software, using its UDP audio streaming capabilities. This is the easiest way to use the decoders. It is also possible to use the GNUradio frontends in the companion project gr-frontends. These support several different SDR hardware, WAV and IQ recordings, and conventional receivers connected through a soundcard. They are design to be flexible and to allow its use in headless and automated receiving configurations.

The long-term goal of this project is to provide an alternative software chain to the UZ7HO soundmodem, AGW packet engine and DK3WN telemetry forwarder. The use of GNUradio makes these decoders more configurable and flexible and eases programming decoders for non-AX.25 satellites, which usually employ strong forward error correction.

Currently, the satellites supported by gr-satellites are 3CAT-2, AAUSAT-4 and GOMX-3. I plan to continue adding support for more satellites in the future.

12 Replies to “Introducing gr-satellites”

  1. It is a great development and the first tests are going great. There is some tweaking and tuning going on. If you want to test, please make sure that the parameter blocks are correct. If in doubt, send me an email so you can test on the TLM db development server. (Contact via the http://www.pe0sat.vgnet.nl website)

    Regards, Jan – PE0SAT

  2. I’m up for testing that Dani, Jan. I’ll bring home my Linux laptop to give it a go.

    Been editing gr-kiss to add Horyu-4 to too as there’s hamming everywhere. The frame starts with dd dd rather than the c0 / 7e formating, and ends with aa. Joy.

    Not heard of gr-frontends though. 73s Chris

    1. About Horyu-4: How weird. Does it transmit regular AX.25 apart from using different flags to mark the start and end of frame? Can you give more details? I guess the bit-stuffing that AX.25 uses doesn’t make sense if you don’t use 0x7e as a flag (the whole idea is that 6 consecutive 1’s can’t occur inside a frame). AX.25 is also peculiar in that it transmit each byte starting with the least significant bit. How much of this is true for Horyu-4?

      About gr-frontends, you have the info in the post body.

    1. Hi Gianfranco,
      I’m using GNUradio 3.7.10 here. I’ve also used 3.7.8 before without problems. I haven’t tested in something as old as 3.6. It may or may not work.
      73,
      Dani.

  3. Hi Daniel,

    I am new to use the gr-satellite module which is great! I tried to fix some bugs by myself, but at the last step I still got some errors when I run the grc in the /apps directory as shown below:
    ———————————————–
    yq@yq-LIFEBOOK-E751:~/gr-satellites/apps$ gnuradio-companion ca03.grc
    NameError(“name ‘BitsInteger’ is not defined”,)
    <<>>

    Block paths:
    /home/yq/.grc_gnuradio
    /usr/share/gnuradio/grc/blocks

    Loading: “/home/yq/gr-satellites/apps/ca03.grc”
    >>> Done
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)
    NameError(“name ‘BitsInteger’ is not defined”,)

    Generating: ‘/home/yq/gr-satellites/apps/ca03.py’

    Generating: ‘/home/yq/gr-satellites/apps/ca03.py’

    Executing: /usr/bin/python -u /home/yq/gr-satellites/apps/ca03.py

    Traceback (most recent call last):
    File “/home/yq/gr-satellites/apps/ca03.py”, line 23, in
    from sync_to_pdu_packed import sync_to_pdu_packed # grc-generated hier_block
    File “/home/yq/.grc_gnuradio/sync_to_pdu_packed.py”, line 15, in
    import satellites
    File “/usr/lib/python2.7/dist-packages/satellites/__init__.py”, line 56, in
    from funcube_telemetry_parser import funcube_telemetry_parser
    File “/usr/lib/python2.7/dist-packages/satellites/funcube_telemetry_parser.py”, line 25, in
    import funcube_telemetry
    File “/usr/lib/python2.7/dist-packages/satellites/funcube_telemetry.py”, line 23, in
    SatID = Enum(BitsInteger(2),\
    NameError: name ‘BitsInteger’ is not defined

    >>> Done (return code 1)
    yq@yq-LIFEBOOK-E751:~/gr-satellites/apps$ uname -a
    Linux yq-LIFEBOOK-E751 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    ——————————————–
    Could you give me some hints to resolve the “NameError: name ‘BitsInteger’ is not defined” error? Thanks 😀

  4. Hola Daniel,

    Recientemente mi grupo de investigación adquirió un USRP N210 y lo que queriamos era utilizar GNU RADIO y el SDR para recibir, demodular y decodificar la telemetría de los varios satélites de baja órbita que existen. En un principio pensamos utilizar par la parte de la demodulación, esos bloques PSK Demod, GMSK Demod, etc, pero al buscar en internet y encontrar tus trabajos realizados vimos que tu no haces uso de ellos.

    Sinceramente somos nuevos en esto de la Radio Definida por Software y queriamos preguntarte si crees que utilizar estos bloques nos daría buenos resultados.

    Muchísimas gracias.

    1. Hola Álvaro,

      Como puedes ver aquí, los bloques MPSK Demod, etc. son bloques que están compuestos por otros bloques más básicos como los que se usan directamente en gr-satellites (Costas, Polyphase Clock sync, etc.). Usar una cosa u otra es cuestión de conveniencia. Los bloques compuestos son más compactos y más estándar, pero hacer la cadena de recepción con bloques simples es más flexible.

      En cualquier caso, uséis una cosa u otra debéis saber lo que estáis haciendo (de lo que no estoy seguro por tu comentario de que sois nuevos en SDR). Aunque uséis un bloque compuesto, debéis saber cómo funciona por dentro. Para empezar, os recomiendo este tutorial.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.