<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.satnogs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matburnham</id>
	<title>SatNOGS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.satnogs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matburnham"/>
	<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/Special:Contributions/Matburnham"/>
	<updated>2026-04-05T23:06:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=How_to_bodge_an_immediate_observation_in_for_testing_purposes&amp;diff=3599</id>
		<title>How to bodge an immediate observation in for testing purposes</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=How_to_bodge_an_immediate_observation_in_for_testing_purposes&amp;diff=3599"/>
		<updated>2020-05-07T20:22:54Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;During development, I wanted a fake pass in my scheduler for an LRPT satellite. I grabbed the associated observation object from the network and then modified the start and end time. It's not perfect, but it works well enough to check for immediate gotchas.&lt;br /&gt;
&lt;br /&gt;
You need to modify satnogs-client's [https://gitlab.com/librespacefoundation/satnogs/satnogs-client/-/blob/master/satnogsclient/scheduler/tasks.py tasks.py]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
def status_listener():&lt;br /&gt;
    LOGGER.info('Starting scheduler...')&lt;br /&gt;
    SCHEDULER.start()&lt;br /&gt;
    SCHEDULER.remove_all_jobs()&lt;br /&gt;
    interval = settings.SATNOGS_NETWORK_API_QUERY_INTERVAL&lt;br /&gt;
    SCHEDULER.add_job(get_jobs, 'interval', minutes=interval)&lt;br /&gt;
    msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval)&lt;br /&gt;
    LOGGER.info(msg)&lt;br /&gt;
    interval = settings.SATNOGS_NETWORK_API_POST_INTERVAL&lt;br /&gt;
    msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval)&lt;br /&gt;
    LOGGER.info(msg)&lt;br /&gt;
    SCHEDULER.add_job(post_data, 'interval', minutes=interval)&lt;br /&gt;
&lt;br /&gt;
    # ADD THIS BODGE #&lt;br /&gt;
    obj = {'id': 2170286, 'start': '2020-05-07T18:32:06Z', 'end': '2020-05-07T18:42:06Z', 'ground_station': 1507, 'tle0': 'METEOR-M 2', 'tle1': '1 40069U 14037A   20128.41275588 -.00000023  00000-0  89535-5 0  9998', 'tle2': '2 40069  98.5069 167.4916 0006638  49.0804 311.0953 14.20672256302383', 'frequency': 137100000, 'mode': 'LRPT', 'transmitter': 'CojkGDaq3u42nRdLdfczng', 'baud': 80000.0}&lt;br /&gt;
    obj['start'] = (datetime.datetime.utcnow() + datetime.timedelta(seconds=30)).isoformat(timespec='seconds')&lt;br /&gt;
    obj['end'] = (datetime.datetime.utcnow() + datetime.timedelta(seconds=120)).isoformat(timespec='seconds')&lt;br /&gt;
    start = parser.parse(obj['start'])&lt;br /&gt;
    job_id = str(obj['id'])&lt;br /&gt;
    kwargs = {'obj': obj}&lt;br /&gt;
    SCHEDULER.add_job(spawn_observer,&lt;br /&gt;
                        'date',&lt;br /&gt;
                        run_date=start,&lt;br /&gt;
                        id='{0}'.format(job_id),&lt;br /&gt;
                        kwargs=kwargs,&lt;br /&gt;
                        replace_existing=True)&lt;br /&gt;
    # END BODGE #&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Develop]]&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=SatNOGS_Client_Development&amp;diff=3598</id>
		<title>SatNOGS Client Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=SatNOGS_Client_Development&amp;diff=3598"/>
		<updated>2020-05-07T17:41:37Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Add a link to some development bodge source code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Intro==&lt;br /&gt;
This page describes the setup of a development environment for the&lt;br /&gt;
SatNOGS ground station reference setup based on [https://gitlab.com/librespacefoundation/satnogs/satnogs-client-ansible satnogs-client-ansible].&lt;br /&gt;
It is assumed you have already setup your ground station as explained in [[SatNOGS_Client_Setup]].&lt;br /&gt;
&lt;br /&gt;
==satnogs-flowgraphs==&lt;br /&gt;
For each Satellite Transmitter Mode there is a specific flowgraph in this package. There are generic (e.g. CW) and satellite-specific flowgraphs. The Satellite-Transmitter-Mode-to-flowgraph mapping is defined in satnogs-client. This package is using gr-soapy for SDR hardware support and gr-satnogs for required GNURadio blocks.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
==gr-satnogs==&lt;br /&gt;
&lt;br /&gt;
The gnuradio Out-Of-Tree module [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs gr-satnogs] provides blocks required by satnogs-flowgraphs. The gitlab-CI automatically builds the package in docker containers, configured by the [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs/blob/master/.gitlab-ci.yml .gitlab-ci.yml]. The built packages for releases are pushed to the librespace:satnogs package repository, the built package for the latest development version on master is pushed to the librespace:satnogs-unstable package repository.&lt;br /&gt;
&lt;br /&gt;
To use a modified gr-satnogs module on a SatNOGS ground station, it’s recommended to clone your fork on your station, build the patched gr-satnogs packages and install it.&lt;br /&gt;
&lt;br /&gt;
To install the latest development version of gr-satnogs on your station, set &amp;lt;code&amp;gt;experimental=True&amp;lt;/code&amp;gt; or configure  in &amp;lt;code&amp;gt;satnogs-setup&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting up a gr-satnogs development environment===&lt;br /&gt;
&lt;br /&gt;
*Fork gr-satnogs&lt;br /&gt;
*Fork gr-satnogs-package&lt;br /&gt;
*Adjust the repository url of gr-satnogs in [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs-package/blob/master/debian/debian/rules#L22 gr-satnogs-package/debian/debian/rules#L22]&lt;br /&gt;
*Adjust the repository url in the version detection in [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs-package/blob/master/.gitlab-ci.yml#L13 gr-satnogs-package/.gitlab-ci.yml#L13] ,[https://gitlab.com/librespacefoundation/satnogs/gr-satnogs-package/blob/master/.gitlab-ci.yml#L30 #L30] ,[https://gitlab.com/librespacefoundation/satnogs/gr-satnogs-package/blob/master/.gitlab-ci.yml#L47 #L47]&lt;br /&gt;
*Wait for the gitlab-CI to build your first version of gr-satnogs-package (~45 min)&lt;br /&gt;
*Install your freshly built gr-satnogs-package by pointing the &amp;lt;code&amp;gt;SATNOGS_RADIO_GR_SATNOGS_PACKAGE&amp;lt;/code&amp;gt; in satnogs-setup to the built artifact/debian package of your architecture (e.g. &amp;lt;code&amp;gt;armhf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;amd64&amp;lt;/code&amp;gt;). The build artifacts are available in your gr-satnogs-package fork by clicking CI/CD, selecting there the latest pipeline, the latest build-job and then in the right column &amp;lt;code&amp;gt;Browse&amp;lt;/code&amp;gt;, path &amp;lt;code&amp;gt;build/debian/output/$your_arch/gr-satnogs_$your_arch.deb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==satnogs-client==&lt;br /&gt;
The [https://gitlab.com/librespacefoundation/satnogs/satnogs-client satnogs-client] is a python package, and gets installed by satnogs-setup in a python virtual environment using [https://pip.pypa.io/ pip]. The development is done in the  &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
Please note that satnogs-client and satnogs-flowgraphs must be installed in compatible versions, due to (frequent) changes in the arguments available in the demodulation scripts, see [[Compatibility]].&lt;br /&gt;
===Setting up a satnogs-client development environment===&lt;br /&gt;
&lt;br /&gt;
#Fork [https://gitlab.com/librespacefoundation/satnogs/satnogs-client satnogs-client]&lt;br /&gt;
#Clone the repository on your development machine&lt;br /&gt;
#Create a new branch (e.g. station123) with your changes &amp;amp; push it&lt;br /&gt;
#Run satnogs-setup and change the value of &amp;lt;code&amp;gt;SATNOGS_CLIENT_URL&amp;lt;/code&amp;gt; to point to your repository and branch as described in [[SatNOGS_Client_Setup#Advanced_Setup]]&lt;br /&gt;
#Hit &amp;quot;Apply&amp;quot; in satnogs-setup to finally install your satnogs-client version&lt;br /&gt;
#Profit.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous development notes ===&lt;br /&gt;
&lt;br /&gt;
* [[How to bodge an immediate observation in for testing purposes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Develop]]&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=How_to_bodge_an_immediate_observation_in_for_testing_purposes&amp;diff=3597</id>
		<title>How to bodge an immediate observation in for testing purposes</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=How_to_bodge_an_immediate_observation_in_for_testing_purposes&amp;diff=3597"/>
		<updated>2020-05-07T17:40:00Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Created page with &amp;quot;During development, I wanted a fake pass in my scheduler for an LRPT satellite. I grabbed the associated observation object from the network and then modified the start and en...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;During development, I wanted a fake pass in my scheduler for an LRPT satellite. I grabbed the associated observation object from the network and then modified the start and end time. It's not perfect, but it works well enough to check for immediate gotchas.&lt;br /&gt;
&lt;br /&gt;
You need to modify satnogs-client's [https://gitlab.com/librespacefoundation/satnogs/satnogs-client/-/blob/master/satnogsclient/scheduler/tasks.py tasks.py]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
def status_listener():&lt;br /&gt;
    LOGGER.info('Starting scheduler...')&lt;br /&gt;
    SCHEDULER.start()&lt;br /&gt;
    SCHEDULER.remove_all_jobs()&lt;br /&gt;
    interval = settings.SATNOGS_NETWORK_API_QUERY_INTERVAL&lt;br /&gt;
    SCHEDULER.add_job(get_jobs, 'interval', minutes=interval)&lt;br /&gt;
    msg = 'Registering `get_jobs` periodic task ({0} min. interval)'.format(interval)&lt;br /&gt;
    LOGGER.info(msg)&lt;br /&gt;
    interval = settings.SATNOGS_NETWORK_API_POST_INTERVAL&lt;br /&gt;
    msg = 'Registering `post_data` periodic task ({0} min. interval)'.format(interval)&lt;br /&gt;
    LOGGER.info(msg)&lt;br /&gt;
    SCHEDULER.add_job(post_data, 'interval', minutes=interval)&lt;br /&gt;
&lt;br /&gt;
    # ADD THIS BODGE #&lt;br /&gt;
    obj = {'id': 2170286, 'start': '2020-05-07T18:32:06Z', 'end': '2020-05-07T18:42:06Z', 'ground_station': 1507, 'tle0': 'METEOR-M 2', 'tle1': '1 40069U 14037A   20128.41275588 -.00000023  00000-0  89535-5 0  9998', 'tle2': '2 40069  98.5069 167.4916 0006638  49.0804 311.0953 14.20672256302383', 'frequency': 137100000, 'mode': 'LRPT', 'transmitter': 'CojkGDaq3u42nRdLdfczng', 'baud': 80000.0}&lt;br /&gt;
    obj['start'] = (datetime.datetime.utcnow() + datetime.timedelta(seconds=30)).isoformat(timespec='seconds')&lt;br /&gt;
    obj['end'] = (datetime.datetime.utcnow() + datetime.timedelta(seconds=120)).isoformat(timespec='seconds')&lt;br /&gt;
    start = parser.parse(obj['start'])&lt;br /&gt;
    job_id = str(obj['id'])&lt;br /&gt;
    kwargs = {'obj': obj}&lt;br /&gt;
    SCHEDULER.add_job(spawn_observer,&lt;br /&gt;
                        'date',&lt;br /&gt;
                        run_date=start,&lt;br /&gt;
                        id='{0}'.format(job_id),&lt;br /&gt;
                        kwargs=kwargs,&lt;br /&gt;
                        replace_existing=True)&lt;br /&gt;
    # END BODGE #&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3590</id>
		<title>Understanding satnogs-flowgraphs</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3590"/>
		<updated>2020-05-06T16:19:36Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Sample rate calculation workings - raw, probably needs a tidy-up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''I'm not entirely sure where to put this, but perhaps someone more experienced can move and link this from a sensible location. This started as a question continuing the [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] thread but as I worked through after picking things up after initially having a problem I realised everything I'd described now magically worked! Typical. Worth documenting.''&lt;br /&gt;
&lt;br /&gt;
==Setting yourself up==&lt;br /&gt;
&lt;br /&gt;
See elsewhere, but get GNU Radio up and running and a copy of satnogs-flowgraphs from GitLab.&lt;br /&gt;
&lt;br /&gt;
I'm using a virtual Ubuntu 19.10 machine grabbed from osboxes.org, but you can use whatever you like. I imagine you could even do it on the Raspberry Pi itself. I did end up setting this VM up as a 'development station' but you should only need to install GNU Radio, and any pre-requisites needed by satnogs-flowgraphs - so probably gr-satnogs, I can't quite remember. As you find out please edit this :-)&lt;br /&gt;
&lt;br /&gt;
==Storing an IQ recording==&lt;br /&gt;
&lt;br /&gt;
There are options in satnogs-setup under Advanced &amp;gt; Radio to store IQ files:&lt;br /&gt;
&lt;br /&gt;
*ENABLE_IQ_DUMP: Enable IQ dump&lt;br /&gt;
*IQ_DUMP_FILENAME: Define IQ dump filename [/tmp/.satnogs/iq.raw]&lt;br /&gt;
&lt;br /&gt;
Beware, IQ files are huge (220MB for my APT pass example below). They're stored in /tmp so therefore in RAM and are overwritten with each pass. You can do [https://community.libre.space/t/uploading-compressed-iq-files-to-dropbox-or-any-other-cloud-storage-provider/5395 something clever] to upload them elsewhere, but for playing just grab a copy immediately after a pass.&lt;br /&gt;
&lt;br /&gt;
Don't worry about storing much else (which also vanishes quickly). You can easily grab waterfalls and OGG recording from the database via [https://github.com/deckbsd/glouton-satnogs-data-downloader Glouton].&lt;br /&gt;
&lt;br /&gt;
==GNU Radio Companion==&lt;br /&gt;
&lt;br /&gt;
Here I'm working with [https://network.satnogs.org/observations/2073316/ Observation #2073316] as an example. I've saved a copy of the IQ recording my station briefly stored at `/tmp/.satnogs/iq.raw`. This is about 220 MB. I even remembered to turn the IQ collection off afterwards or it would be storing stuff on top of each other forever.&lt;br /&gt;
&lt;br /&gt;
===So where did the IQ come from?===&lt;br /&gt;
&lt;br /&gt;
In my case, I'm playing with an APT pass. It is therefore processed by [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/satellites/noaa_apt_decoder.grc satnogs-flowgraphs/satellites/noaa_apt_decoder.grc]. Other signals use other flowgraphs. The default where nothing else is suitable appears to be [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/generic/fsk.grc satnogs-flowgraphs/generic/fsk.grc].&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_save.png|600px]]&lt;br /&gt;
&lt;br /&gt;
That is, it's post Doppler correction, which includes an LO offset; and the values are scaled to shorts, although 16768 seems an weird number as I'd have expected a power of two - 16384? I don't imagine it makes a lot of difference as it'll still fit in the short just lose a little bit of dynamic range.&lt;br /&gt;
&lt;br /&gt;
===Feeding your IQ in===&lt;br /&gt;
&lt;br /&gt;
Loading the IQ into beginning of the flowgraph in requires some GNU Radio modules chaining together. Starting with [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] you'll end up with something beginning like the below. It takes the file source, throttles the output to real-time, then converts the short values to complex real including reversing the scaling division. This feeds then into the existing flowgraph exactly where it left off.&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_open.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Sample rate ===&lt;br /&gt;
It took some time for me to work out the appropriate sample rate. Here's my methodology:&lt;br /&gt;
&lt;br /&gt;
The IQ recording is generated by the flowgraph in use. If there's no particular decoder in use then that's &amp;lt;code&amp;gt;GNURADIO_DEFAULT_SCRIPT_FILENAME&amp;lt;/code&amp;gt; (see [https://gitlab.com/librespacefoundation/satnogs/satnogs-client/-/blob/master/satnogsclient/settings.py#L66 &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt;] as it keeps changing in HEAD - &amp;lt;code&amp;gt;satnogs_fsk_ax25.py&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;fsk.grc&amp;lt;/code&amp;gt; and now &amp;lt;code&amp;gt;fm.grc&amp;lt;/code&amp;gt;). The flowgraph can vary, but it's probably fairly similar for each on the front end.&lt;br /&gt;
&lt;br /&gt;
From &amp;lt;code&amp;gt;fsk.grc&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Soapy Source collects data at &amp;lt;code&amp;gt;samp_rate_rx&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Doppler Compensation takes &amp;lt;code&amp;gt;samp_rate_rx&amp;lt;/code&amp;gt; and aims for a Target Sampling Rate of &amp;lt;code&amp;gt;baudrate*decimation&amp;lt;/code&amp;gt; (in &amp;lt;code&amp;gt;fsk.grc&amp;lt;/code&amp;gt;) or &amp;lt;code&amp;gt;audio_samp_rate&amp;lt;/code&amp;gt; (in &amp;lt;code&amp;gt;fm.grc&amp;lt;/code&amp;gt;). One assumes these should normally be identical, but perhaps someone brighter can explain the difference and how Doppler Compensation converts - decimation?&lt;br /&gt;
# IQ sink stores the data to &amp;lt;code&amp;gt;iq_file_path&amp;lt;/code&amp;gt;, with a scaling factor of &amp;lt;code&amp;gt;16768&amp;lt;/code&amp;gt; applied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Where do these parameters come from?'''&lt;br /&gt;
&lt;br /&gt;
All jobs come via [https://gitlab.com/librespacefoundation/satnogs/satnogs-client/-/blob/master/satnogsclient/scheduler/tasks.py#L47 scheduler/tasks.py]. This grabs scheduled jobs from the Satnogs network. In JSON format, this looks something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;    {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;id&amp;quot;: 2164959,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;start&amp;quot;: &amp;quot;2020-05-06T18:53:17Z&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;end&amp;quot;: &amp;quot;2020-05-06T19:00:30Z&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;ground_station&amp;quot;: 1450,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle0&amp;quot;: &amp;quot;0 METEOR M2&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle1&amp;quot;: &amp;quot;1 40069U 14037A   20126.65202808 -.00000042  00000-0  13670-6 0  9996&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle2&amp;quot;: &amp;quot;2 40069  98.5071 165.7965 0006707  53.4504 306.7289 14.20671999302133&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;frequency&amp;quot;: 137100000,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;mode&amp;quot;: &amp;quot;LRPT&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;transmitter&amp;quot;: &amp;quot;CojkGDaq3u42nRdLdfczng&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;baud&amp;quot;: 80000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;    },&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;    {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;id&amp;quot;: 2164887,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;start&amp;quot;: &amp;quot;2020-05-06T15:51:13Z&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;end&amp;quot;: &amp;quot;2020-05-06T16:06:30Z&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;ground_station&amp;quot;: 1450,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle0&amp;quot;: &amp;quot;0 NOAA 19&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle1&amp;quot;: &amp;quot;1 33591U 09005A   20126.94623650 +.00000063 +00000-0 +59678-4 0  9999&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;tle2&amp;quot;: &amp;quot;2 33591 099.1965 131.1873 0013769 190.9197 169.1677 14.12406430579135&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;frequency&amp;quot;: 137100000,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;mode&amp;quot;: &amp;quot;APT&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;transmitter&amp;quot;: &amp;quot;kE4VaYKpnFmzEquEjKKi8D&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;        &amp;quot;baud&amp;quot;: null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;    }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clearly, there's no sample rate in that blob, but there is a mode and a baudrate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How do these parameters get to the flowgraph?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exec_gnuradio&amp;lt;/code&amp;gt; in [https://gitlab.com/librespacefoundation/satnogs/satnogs-client/-/blob/master/satnogsclient/upsat/gnuradio_handler.py#L60 satnogsclient/upsat/gnuradio_handler.py#L60] takes all the parameters collected and passes them as command line arguments to the relevant flowgraph. It looks like the samp-rate-rx comes from SATNOGS_RX_SAMP_RATE in settings.py.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''So where does the sample rate actually come from!?'''&lt;br /&gt;
&lt;br /&gt;
Ah, it looks like it's actually static and stored in /etc/ansible/host_vars/localhost:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;satnogs_rx_samp_rate: 2.048e6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So it's a static sample rate regardless of flowgraph. Okay, that might explain why the Doppler Compensation has different output sample rate and does some kind of decimation.&lt;br /&gt;
&lt;br /&gt;
''Note: it looks like the new fm.grc doesn't pass a baudrate - what effect will this have on things like LPRT that don't have their own flowgraph handled at present?''&lt;br /&gt;
&lt;br /&gt;
'''Summary'''&lt;br /&gt;
&lt;br /&gt;
The key value is the Doppler Compensation ''Target Sampling Rate''.&lt;br /&gt;
&lt;br /&gt;
For the simple case of APT imaging through [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/satellites/noaa_apt_decoder.grc noaa_apt_decoder.grc] this is pretty simple. it's a static value 4*4160*4 or 66,560.&lt;br /&gt;
&lt;br /&gt;
It's a more complicated case for say an LRPT signal from [https://db.satnogs.org/satellite/40069/ METEOR M2] for example. This runs through &amp;lt;code&amp;gt;satnogs_fsk_ax25.py&amp;lt;/code&amp;gt; at least in my live system. One needs to look at the database page and get the Baud rate of the relevant transmitter (80,000 in this case). Then look at the Doppler Compensation ''Target Sampling Rate'' again which turns out to be &amp;lt;code&amp;gt;baudrate*decimation&amp;lt;/code&amp;gt;. Argh! Decimation turns out to be &amp;lt;code&amp;gt;max(4,satnogs.find_decimation(baudrate, 2, audio_samp_rate))&amp;lt;/code&amp;gt;. So what's &amp;lt;code&amp;gt;audio_samp_rate&amp;lt;/code&amp;gt;? Luckily it's static and set in &amp;lt;code&amp;gt;satnogs_fsk_ax25.py&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;48e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Using gr-satnogs/python/utils.py, this is easy to calculate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt; import utils as satnogs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt; baudrate = 80000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt; audio_samp_rate = 48000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt; max(4,satnogs.find_decimation(baudrate, 2, audio_samp_rate))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, by my calculation, my IQ should be at 4 * 80,000 = 320,000. Hopefully.&lt;br /&gt;
&lt;br /&gt;
'''Alternative route'''&lt;br /&gt;
&lt;br /&gt;
After all this hassle, I think the easy fix is the put in a pre-observation script to dump to the logfile! Looks like the following will give me most of what I need, although I'll still need to do some maths.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;lt;nowiki&amp;gt;{{ID}}&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;{{BAUD}}&amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;{{SCRIPT_NAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Results===&lt;br /&gt;
&lt;br /&gt;
Initially, the waterfall may look a bit busy compared to the one from the [https://network.satnogs.org/observations/2073316/ observation]. There's obviously some gain setting within the waterfall I've not yet mastered, or the Satnogs ones does something slightly cleverer.&lt;br /&gt;
&lt;br /&gt;
[[File:Waterfall.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Yep. It turns out you can set the intesity min and max to better reflect the signal and get a cleaner display. Still not as good as the observation page one, but maybe that fiddles with the FFT size too.&lt;br /&gt;
&lt;br /&gt;
[[File:Better.png|200px]] &lt;br /&gt;
&lt;br /&gt;
However, if you peer closer you can just about make out the feint telltales of an APT signal.&lt;br /&gt;
&lt;br /&gt;
Following the flowgraph through to output shows an identical output to that on the observation. Result!&lt;br /&gt;
&lt;br /&gt;
[[File:visual.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===OGG===&lt;br /&gt;
&lt;br /&gt;
For completeness, you can do the same thing using the OGG file as a source. Again, you need to reverse any resampling or other changes that were done before saving to file before feeding back into the flowgraph at an appropriate point. The throttle is optional, and in the screenshot bypassed:&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_all.png|800px]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3589</id>
		<title>Understanding satnogs-flowgraphs</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3589"/>
		<updated>2020-04-30T13:51:18Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not entirely sure where to put this, but perhaps someone more experienced can move and link this from a sensible location. This started as a question continuing the [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] thread but as I worked through after picking things up after initially having a problem I realised everything I'd described now magically worked! Typical. Worth documenting.&lt;br /&gt;
&lt;br /&gt;
==Setting yourself up==&lt;br /&gt;
&lt;br /&gt;
See elsewhere, but get GNU Radio up and running and a copy of satnogs-flowgraphs from GitLab.&lt;br /&gt;
&lt;br /&gt;
I'm using a virtual Ubuntu 19.10 machine grabbed from osboxes.org, but you can use whatever you like. I imagine you could even do it on the Raspberry Pi itself. I did end up setting this VM up as a 'development station' but you should only need to install GNU Radio, and any pre-requisites needed by satnogs-flowgraphs - so probably gr-satnogs, I can't quite remember. As you find out please edit this :-)&lt;br /&gt;
&lt;br /&gt;
==Storing an IQ recording==&lt;br /&gt;
&lt;br /&gt;
There are options in satnogs-setup under Advanced &amp;gt; Radio to store IQ files:&lt;br /&gt;
&lt;br /&gt;
*ENABLE_IQ_DUMP: Enable IQ dump&lt;br /&gt;
*IQ_DUMP_FILENAME: Define IQ dump filename [/tmp/.satnogs/iq.raw]&lt;br /&gt;
&lt;br /&gt;
Beware, IQ files are huge (220MB for my APT pass example below). They're stored in /tmp so therefore in RAM and are overwritten with each pass. You can do [https://community.libre.space/t/uploading-compressed-iq-files-to-dropbox-or-any-other-cloud-storage-provider/5395 something clever] to upload them elsewhere, but for playing just grab a copy immediately after a pass.&lt;br /&gt;
&lt;br /&gt;
Don't worry about storing much else (which also vanishes quickly). You can easily grab waterfalls and OGG recording from the database via [https://github.com/deckbsd/glouton-satnogs-data-downloader Glouton].&lt;br /&gt;
&lt;br /&gt;
==GNU Radio Companion==&lt;br /&gt;
&lt;br /&gt;
Here I'm working with [https://network.satnogs.org/observations/2073316/ Observation #2073316] as an example. I've saved a copy of the IQ recording my station briefly stored at `/tmp/.satnogs/iq.raw`. This is about 220 MB. I even remembered to turn the IQ collection off afterwards or it would be storing stuff on top of each other forever.&lt;br /&gt;
&lt;br /&gt;
===So where did the IQ come from?===&lt;br /&gt;
&lt;br /&gt;
In my case, I'm playing with an APT pass. It is therefore processed by [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/satellites/noaa_apt_decoder.grc satnogs-flowgraphs/satellites/noaa_apt_decoder.grc]. Other signals use other flowgraphs. The default where nothing else is suitable appears to be [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/generic/fsk.grc satnogs-flowgraphs/generic/fsk.grc].&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_save.png|600px]]&lt;br /&gt;
&lt;br /&gt;
That is, it's post Doppler correction, which includes an LO offset; and the values are scaled to shorts, although 16768 seems an weird number as I'd have expected a power of two - 16384? I don't imagine it makes a lot of difference as it'll still fit in the short just lose a little bit of dynamic range.&lt;br /&gt;
&lt;br /&gt;
===Feeding your IQ in===&lt;br /&gt;
&lt;br /&gt;
Loading the flowgraph in requires some GNU Radio modules chaining together. Starting with [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] you'll end up with something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_open.png|800px]]&lt;br /&gt;
&lt;br /&gt;
It took some time for me to work out the appropriate samples rates but I can't remember exactly how now. Scheduling a pass will generate them and then you can work it from there. Maybe I'll come back and update this later.&lt;br /&gt;
&lt;br /&gt;
The rest just reverses throttles the output to real-time, and converts the short values to complex real including the scaling division.&lt;br /&gt;
&lt;br /&gt;
===Results===&lt;br /&gt;
&lt;br /&gt;
Initially, the waterfall may look a bit busy compared to the one from the [https://network.satnogs.org/observations/2073316/ observation]. There's obviously some gain setting within the waterfall I've not yet mastered, or the Satnogs ones does something slightly cleverer.&lt;br /&gt;
&lt;br /&gt;
[[File:Waterfall.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Yep. It turns out you can set the intesity min and max to better reflect the signal and get a cleaner display. Still not as good as the observation page one, but maybe that fiddles with the FFT size too.&lt;br /&gt;
&lt;br /&gt;
[[File:Better.png|200px]] &lt;br /&gt;
&lt;br /&gt;
However, if you peer closer you can just about make out the feint telltales of an APT signal.&lt;br /&gt;
&lt;br /&gt;
Following the flowgraph through to output shows an identical output to that on the observation. Result!&lt;br /&gt;
&lt;br /&gt;
[[File:visual.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===OGG===&lt;br /&gt;
&lt;br /&gt;
For completeness, you can do the same thing using the OGG file as a source. Again, you need to reverse any resampling or other changes that were done before saving to file before feeding back into the flowgraph at an appropriate point. The throttle is optional, and in the screenshot bypassed:&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_all.png|800px]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Better.png&amp;diff=3588</id>
		<title>File:Better.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Better.png&amp;diff=3588"/>
		<updated>2020-04-30T13:49:47Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Matburnham uploaded a new version of File:Better.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Better.png&amp;diff=3587</id>
		<title>File:Better.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Better.png&amp;diff=3587"/>
		<updated>2020-04-30T13:46:56Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3586</id>
		<title>Understanding satnogs-flowgraphs</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Understanding_satnogs-flowgraphs&amp;diff=3586"/>
		<updated>2020-04-30T13:25:31Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Created page with &amp;quot;I'm not entirely sure where to put this, but perhaps someone more experienced can move and link this from a sensible location. This started as a question continuing the [https...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not entirely sure where to put this, but perhaps someone more experienced can move and link this from a sensible location. This started as a question continuing the [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] thread but as I worked through after picking things up after initially having a problem I realised everything I'd described now magically worked! Typical. Worth documenting.&lt;br /&gt;
&lt;br /&gt;
== Setting yourself up ==&lt;br /&gt;
&lt;br /&gt;
See elsewhere, but get GNU Radio up and running and a copy of satnogs-flowgraphs from GitLab.&lt;br /&gt;
&lt;br /&gt;
I'm using a virtual Ubuntu 19.10 machine grabbed from osboxes.org, but you can use whatever you like. I imagine you could even do it on the Raspberry Pi itself. I did end up setting this VM up as a 'development station' but you should only need to install GNU Radio, and any pre-requisites needed by satnogs-flowgraphs - so probably gr-satnogs, I can't quite remember. As you find out please edit this :-)&lt;br /&gt;
&lt;br /&gt;
== Storing an IQ recording ==&lt;br /&gt;
&lt;br /&gt;
There are options in satnogs-setup under Advanced &amp;gt; Radio to store IQ files:&lt;br /&gt;
&lt;br /&gt;
* ENABLE_IQ_DUMP: Enable IQ dump&lt;br /&gt;
* IQ_DUMP_FILENAME: Define IQ dump filename [/tmp/.satnogs/iq.raw]&lt;br /&gt;
&lt;br /&gt;
Beware, IQ files are huge (220MB for my APT pass example below). They're stored in /tmp so therefore in RAM and are overwritten with each pass. You can do [https://community.libre.space/t/uploading-compressed-iq-files-to-dropbox-or-any-other-cloud-storage-provider/5395 something clever] to upload them elsewhere, but for playing just grab a copy immediately after a pass.&lt;br /&gt;
&lt;br /&gt;
Don't worry about storing much else (which also vanishes quickly). You can easily grab waterfalls and OGG recording from the database via [https://github.com/deckbsd/glouton-satnogs-data-downloader Glouton].&lt;br /&gt;
&lt;br /&gt;
== GNU Radio Companion ==&lt;br /&gt;
&lt;br /&gt;
Here I'm working with [https://network.satnogs.org/observations/2073316/ Observation #2073316] as an example. I've saved a copy of the IQ recording my station briefly stored at `/tmp/.satnogs/iq.raw`. This is about 220 MB. I even remembered to turn the IQ collection off afterwards or it would be storing stuff on top of each other forever.&lt;br /&gt;
&lt;br /&gt;
=== So where did the IQ come from? ===&lt;br /&gt;
&lt;br /&gt;
In my case, I'm playing with an APT pass. It is therefore processed by [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/satellites/noaa_apt_decoder.grc satnogs-flowgraphs/satellites/noaa_apt_decoder.grc]. Other signals use other flowgraphs. The default where nothing else is suitable appears to be [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs/-/blob/master/generic/fsk.grc satnogs-flowgraphs/generic/fsk.grc].&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_save.png|600px]]&lt;br /&gt;
&lt;br /&gt;
That is, it's post Doppler correction, which includes an LO offset; and the values are scaled to shorts, although 16768 seems an weird number as I'd have expected a power of two - 16384? I don't imagine it makes a lot of difference as it'll still fit in the short just lose a little bit of dynamic range.&lt;br /&gt;
&lt;br /&gt;
=== Feeding your IQ in ===&lt;br /&gt;
&lt;br /&gt;
Loading the flowgraph in requires some GNU Radio modules chaining together. Starting with [https://community.libre.space/t/how-to-open-satnogs-iq-dat-files/3793 How to open satnogs iq.dat files] you'll end up with something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_open.png|800px]]&lt;br /&gt;
&lt;br /&gt;
It took some time for me to work out the appropriate samples rates but I can't remember exactly how now. Scheduling a pass will generate them and then you can work it from there. Maybe I'll come back and update this later.&lt;br /&gt;
&lt;br /&gt;
The rest just reverses throttles the output to real-time, and converts the short values to complex real including the scaling division.&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&lt;br /&gt;
Initially, the waterfall may look a bit busy compared to the one from the [https://network.satnogs.org/observations/2073316/ observation]. There's obviously some gain setting within the waterfall I've not yet mastered, or the Satnogs ones does something slightly cleverer.&lt;br /&gt;
&lt;br /&gt;
[[File:Waterfall.png|200px]]&lt;br /&gt;
&lt;br /&gt;
However, if you peer closer you can just about make out the feint telltales of an APT signal.&lt;br /&gt;
&lt;br /&gt;
Following the flowgraph through to output shows an identical output to that on the observation. Result!&lt;br /&gt;
&lt;br /&gt;
[[File:visual.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== OGG ===&lt;br /&gt;
&lt;br /&gt;
For completeness, you can do the same thing using the OGG file as a source. Again, you need to reverse any resampling or other changes that were done before saving to file before feeding back into the flowgraph at an appropriate point. The throttle is optional, and in the screenshot bypassed:&lt;br /&gt;
&lt;br /&gt;
[[File:flowgraph_all.png|800px]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Flowgraph_all.png&amp;diff=3585</id>
		<title>File:Flowgraph all.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Flowgraph_all.png&amp;diff=3585"/>
		<updated>2020-04-30T13:24:19Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Visual.png&amp;diff=3584</id>
		<title>File:Visual.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Visual.png&amp;diff=3584"/>
		<updated>2020-04-30T13:18:43Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Waterfall.png&amp;diff=3583</id>
		<title>File:Waterfall.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Waterfall.png&amp;diff=3583"/>
		<updated>2020-04-30T13:14:35Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Flowgraph_open.png&amp;diff=3582</id>
		<title>File:Flowgraph open.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Flowgraph_open.png&amp;diff=3582"/>
		<updated>2020-04-30T13:10:15Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=File:Flowgraph_save.png&amp;diff=3581</id>
		<title>File:Flowgraph save.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=File:Flowgraph_save.png&amp;diff=3581"/>
		<updated>2020-04-30T13:06:55Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Software_Defined_Radio&amp;diff=3560</id>
		<title>Software Defined Radio</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Software_Defined_Radio&amp;diff=3560"/>
		<updated>2020-04-05T00:18:03Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Fix instructions for bias-t to reflect use of SATNOGS_PRE_OBSERVATION_SCRIPT, and remove warning as per discussion at https://community.libre.space/t/satnogs-2-0-1-0-rtlsdr-v3-bias-t/5640. I've confirmed this works and lights up my LNA for an observation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Built upon [https://gnuradio.org/ GNU Radio] and [https://github.com/pothosware/SoapySDR/wiki SoapySDR] by using the [https://gitlab.com/librespacefoundation/gr-soapy gr-soapy] module SatNOGS supports a large variety of Software-Defined Radios (SDRs). The gr-soapy module was developed in the [https://sdrmaker.space/ SDR Makerspace] and is maintained by Libre Space Foundation to bring the vendor-neutral SDR support by SoapySDR to the flexible gnuradio ecosystem.&lt;br /&gt;
&lt;br /&gt;
The most cost-effective solution is to use an RTL-SDR with a Raspberry Pi.  More advanced SDRs are also used, but they require more processing power and thus might require a more powerful computing platform than the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==Supported Devices==&lt;br /&gt;
&lt;br /&gt;
SoapySDR supports SDR devices through runtime-loadable modules [https://github.com/pothosware/SoapySDR/wiki#plugin-architecture]. You can find all available modules in the [https://github.com/pothosware/SoapySDR/wiki#modules SoapySDR wiki] (see right column). Most SDR modules are installed by default when setting up a SatNOGS station.&lt;br /&gt;
&lt;br /&gt;
The following SDRs are supported by SatNOGS. SatNOGS uses the RTL-SDR as the recommended beginner signal receiver and tuner.  &lt;br /&gt;
The more advanced SDRs may require more processing power than a Raspberry Pi 3b or 4 can offer. &lt;br /&gt;
&lt;br /&gt;
*[[Software Defined Radio#RTL-SDR Support|RTL-SDR]]&lt;br /&gt;
**[https://www.nooelec.com/store/sdr/sdr-receivers.html NooElec NESDR SMArt]&lt;br /&gt;
**[https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/ RTL-SDR Blog R820T2 RTL2832U]&lt;br /&gt;
**Full band UV HF RTL-SDR USB Tuner Receiver&lt;br /&gt;
&lt;br /&gt;
*[[Software Defined Radio#USRP support|USRP devices]]&lt;br /&gt;
**[https://www.ettus.com/product/category/USRP-Bus-Series USRP B200]&lt;br /&gt;
&lt;br /&gt;
*[[Software Defined Radio#Airspy support|Airspy]]&lt;br /&gt;
&lt;br /&gt;
{{Message|There are probably a lot more devices supported since the transition from gr-osmosdr to gr-soapy. Please update this list when you were able to successfully run a SatNOGS station with a new radio family or model. You can also link your station as an example to give others the ability to compare performance.}}&lt;br /&gt;
&lt;br /&gt;
==Supported Devices with closed-source drivers==&lt;br /&gt;
Unfortunately some vendors require closed-source drivers in their SoapySDR modules and thus those modules or dependencies can't be redistributed by others. Thus they must be manually installed by the user. The following devices require closed-source drivers:&lt;br /&gt;
&lt;br /&gt;
*[[Software Defined Radio#SDRPlay support|SDRPlay]]&lt;br /&gt;
&lt;br /&gt;
==Unsupported Devices==&lt;br /&gt;
{{Warning|This section might be outdated due to the transition to gr-soapy. Please update when possible.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[https://greatscottgadgets.com/hackrf/ HackRF One] (not compatible with the SatNOGS client on Raspberry Pi)&lt;br /&gt;
*USRP2 (not compatible with the SatNOGS client on Raspberry Pi)&lt;br /&gt;
&lt;br /&gt;
==RTL-SDR Support==&lt;br /&gt;
The RTL-SDR is based on two chips -- the versatile [http://www.realtek.com.tw/products/productsView.aspx?Langid=1&amp;amp;PFid=35&amp;amp;Level=4&amp;amp;Conn=3&amp;amp;ProdID=257 RTL2832U chip] and the [https://rtl-sdr.com/wp-content/uploads/2013/04/R820T_datasheet-Non_R-20111130_unlocked.pdf R820T tuner]. The RTL-SDR is currently the cheapest, most common, and most performing solution available in terms of general sensitivity having a frequency range of 24 – 1766 MHz.  A metal enclosure with SMA connector is preferred, along with a stable TCXO (low ppm).  HF coverage is optional.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using RTL-SDR.com V3 Dongle's Bias-T Power Supply===&lt;br /&gt;
The RTL-SDR.com V3 dongle has a built in software activated Bias-T voltage supply intended to be used for applications such as powering inline LNAs (Low Noise Amplifiers).   There are several ways to turn on the voltage, but through initial testing (as of this writing, 17 Aug 2019) it seems that the following procedure works best.&lt;br /&gt;
&lt;br /&gt;
The below relates to Raspberry Pi installs only.   No testing has been performed on other systems as of yet.&lt;br /&gt;
&lt;br /&gt;
{{Warning|Turning on the Bias-T with no LNA installed and a &amp;quot;shorted&amp;quot; style antenna (such as loops, egg-beaters, etc.) can damage the RTL-SDR.com V3 dongle.   Never activate the bias-t with no LNA installed between the antenna and the SDR dongle.}}&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
#Raspberry Pi running Raspbian Buster or newer (latest release of SatNogs image, [https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/-/tags 2019091100], is demonstrated to work)&lt;br /&gt;
#[https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/ RTL-SDR.com V3 SDR dongle]&lt;br /&gt;
#[https://www.rtl-sdr.com/rtl-sdr-blog-v-3-dongles-user-guide/ RTL-SDR.com Bias-T Software Switch] for linux systems&lt;br /&gt;
#LNA capable of being powered via feedline coax (note that some LNAs need modifications to be powered by the coax, and some cannot be powered by the coax at all.  Check the specifications for your LNA prior to attempting to turn on the Bias-T power supply)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Instructions for installing RTL-SDR.com Bias-T Software Switch====&lt;br /&gt;
&lt;br /&gt;
#Log into your SatNogs station either directly or via SSH&lt;br /&gt;
#If your station does not have cmake installed (SatNogs Image 2019091100 does not), install cmake with &amp;lt;code&amp;gt;sudo apt install cmake&amp;lt;/code&amp;gt;&lt;br /&gt;
#Clone the source for the Bias-T software switch with &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/rtlsdrblog/rtl_biast&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;cd rtl_biast&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;mkdir build&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;cd build&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;cmake ..&amp;lt;/code&amp;gt;  (if you get a &amp;lt;code&amp;gt;LibUSB 1.0 required to compile rtl-sdr&amp;lt;/code&amp;gt; error here, then do &amp;lt;code&amp;gt;sudo apt install libusb-1.0-0-dev&amp;lt;/code&amp;gt; prior to attempting &amp;lt;code&amp;gt;cmake ..&amp;lt;/code&amp;gt; again)&lt;br /&gt;
#&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The software switch should now be installed in the &amp;quot;src&amp;quot; directory.    If you &amp;lt;code&amp;gt;cd src&amp;lt;/code&amp;gt;, you can turn on the bias-t with the command &amp;lt;code&amp;gt;./rtl_biast -b 1&amp;lt;/code&amp;gt; and turn it off with &amp;lt;code&amp;gt;./rtl_biast -b 0&amp;lt;/code&amp;gt;.   Note that the developers of this switch have warned against attempting to &amp;lt;code&amp;gt;sudo make install&amp;lt;/code&amp;gt; so that this command can be executed from ouside the src directory.   Testing has shown this warning to be accurate, so don't plan on running these commands from anywhere but the src directory, or else be sure to use the full path.&lt;br /&gt;
&lt;br /&gt;
Switching the Bias-T on should yield between 4.5V and 5.0V across the center conductor and shield of the coax.   The voltage should rise almost instantly.   When switched off, the voltage seems to decrease gradually, over 5 to 10 seconds.&lt;br /&gt;
&lt;br /&gt;
====Instructions to activate the bias-t for SatNogs Observations automatically:====&lt;br /&gt;
&lt;br /&gt;
#Log into your SatNogs station either directly or via SSH&lt;br /&gt;
#&amp;lt;code&amp;gt;sudo satnogs-setup&amp;lt;/code&amp;gt;&lt;br /&gt;
#select &amp;lt;code&amp;gt;Advanced&amp;lt;/code&amp;gt;&lt;br /&gt;
#for &amp;lt;code&amp;gt;Radio&amp;lt;/code&amp;gt; -&amp;gt;&amp;lt;code&amp;gt;SATNOGS_RF_GAIN&amp;lt;/code&amp;gt;, enter a low gain value supported by your RTL-SDR.com V3 dongle (entering &amp;lt;code&amp;gt;rtl_test&amp;lt;/code&amp;gt; at the command line prior to starting &amp;lt;code&amp;gt;satnogs-setup&amp;lt;/code&amp;gt; will give you all allowable values of RF gain) and select &amp;lt;code&amp;gt;Ok&amp;lt;/code&amp;gt;&lt;br /&gt;
#for &amp;lt;code&amp;gt;Scripts&amp;lt;/code&amp;gt; -&amp;gt;&amp;lt;code&amp;gt;SATNOGS_PRE_OBSERVATION_SCRIPT,&amp;lt;/code&amp;gt; enter &amp;lt;code&amp;gt;/home/pi/rtl_biast/build/src/rtl_biast -b 1&amp;lt;/code&amp;gt; and select &amp;lt;code&amp;gt;Ok&amp;lt;/code&amp;gt;&lt;br /&gt;
#for &amp;lt;code&amp;gt;Scripts&amp;lt;/code&amp;gt; -&amp;gt;&amp;lt;code&amp;gt;SATNOGS_POST_OBSERVATION_SCRIPT,&amp;lt;/code&amp;gt; enter &amp;lt;code&amp;gt;/home/pi/rtl_biast/build/src/rtl_biast -b 0&amp;lt;/code&amp;gt; and select &amp;lt;code&amp;gt;Ok&amp;lt;/code&amp;gt;&lt;br /&gt;
#Select &amp;lt;code&amp;gt;Back&amp;lt;/code&amp;gt;&lt;br /&gt;
#Select &amp;lt;code&amp;gt;Apply&amp;lt;/code&amp;gt; (allow system to update and hit enter when prompted)&lt;br /&gt;
#Select &amp;lt;code&amp;gt;Back&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your station is now set up to turn the Bias-T on for each scheduled observation (using the &amp;lt;code&amp;gt;SATNOGS_PRE_OBSERVATION_SCRIPT&amp;lt;/code&amp;gt; string) and then turn it off at the conclusion of each observation (using the &amp;lt;code&amp;gt;SATNOGS_POST_OBSERVATION_SCRIPT&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
You should now schedule several observations to fine tune the &amp;lt;code&amp;gt;SATNOGS_RF_GAIN&amp;lt;/code&amp;gt; value to get the best S/N performance for your station.   Some have reported needing zero RF gain, others have reported low RF gain required (between 5 and 10 db), and others have said they see little benefit even with very high gain. Each station will be different.&lt;br /&gt;
&lt;br /&gt;
==Airspy support==&lt;br /&gt;
Vendor: [https://airspy.com/ Airspy]&lt;br /&gt;
&lt;br /&gt;
required SoapySDR module: [https://github.com/pothosware/SoapyAirspy/wiki SoapyAirspy]&lt;br /&gt;
&lt;br /&gt;
===Gain settings===&lt;br /&gt;
There are two possible gain modes:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_GAIN_MODE&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;Overall&amp;quot;&amp;lt;/code&amp;gt;: (default) Use a single gain value.  Set the overall gain with &amp;lt;code&amp;gt;SATNOGS_RF_GAIN&amp;lt;/code&amp;gt;,e.g. &amp;lt;code&amp;gt;SATNOGS_RF_GAIN&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;43&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_GAIN_MODE&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;Settings Field&amp;quot;&amp;lt;/code&amp;gt;: Use granular gain values.  Set the different gain stages separately:&lt;br /&gt;
**without pre-amp: &amp;lt;code&amp;gt;SATNOGS_OTHER_SETTINGS&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;LNA=12,MIX=8,VGA=11&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
**with pre-amp: &amp;lt;code&amp;gt;SATNOGS_OTHER_SETTINGS&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;LNA=9,MIX=6,VGA=11&amp;quot;&amp;lt;/code&amp;gt; (used in [https://network.satnogs.org/stations/49/ 49 - OZ7SAT])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For reference see also the Airspy driver library linearity gain settings in [https://github.com/airspy/airspyone_host/blob/bceca18f9e3a5f89cff78c4d949c71771d92dfd3/libairspy/src/airspy.c#L117-L122 libairspy/src/airspy.c#L117-L122].&lt;br /&gt;
&lt;br /&gt;
===Sample rates===&lt;br /&gt;
&lt;br /&gt;
*Airspy R2: &amp;lt;code&amp;gt;SATNOGS_RX_SAMPLE_RATE&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;2.5e6 or 10e6&amp;lt;/code&amp;gt;&lt;br /&gt;
*Airspy Mini: &amp;lt;code&amp;gt;SATNOGS_RX_SAMPLE_RATE&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;3e6 or 6e6&amp;lt;/code&amp;gt;&lt;br /&gt;
*Airspy HF+: &amp;lt;code&amp;gt;SATNOGS_RX_SAMPLE_RATE&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;768e3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
source: [https://twitter.com/DutchSpace/status/1241305651168661504]&lt;br /&gt;
&lt;br /&gt;
If you want to activate the integrated bias tee, set &amp;lt;code&amp;gt;SATNOGS_DEV_ARGS&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;biastee=true&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Bit packing (&amp;quot;Enable packing 4 12-bit samples into 3 16-bit words for 25% less USB trafic.&amp;quot;) could be enabled with &amp;lt;code&amp;gt;SATNOGS_DEV_ARGS&amp;lt;/code&amp;gt;=&amp;lt;code&amp;gt;&amp;quot;bitpacking=true&amp;quot;&amp;lt;/code&amp;gt; (untested). Device arguments can be concatenated with comma as delimiter.&lt;br /&gt;
&lt;br /&gt;
==SDRPlay support==&lt;br /&gt;
Vendor: [http://www.sdrplay.com/ SDRPlay]&lt;br /&gt;
&lt;br /&gt;
required SoapySDR module: [https://github.com/pothosware/SoapySDRPlay SoapySDRPlay]&lt;br /&gt;
&lt;br /&gt;
The following settings [https://network.satnogs.org/observations/?norad=&amp;amp;observer=&amp;amp;station=1354&amp;amp;results=d1&amp;amp;start=2020-02-20+00%3A00&amp;amp;end=2020-02-24+23%3A59 worked well] for an [https://www.sdrplay.com/rspduo/ SDRplay RSPduo] when using cross-yagis and good [https://www.ssb.de/en/amplifiers/preamplifier/vox/100w SSB low-noise amplifiers]:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_SOAPY_RX_DEVICE=&amp;quot;driver=sdrplay&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RX_SAMP_RATE=2e6&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RX_BANDWIDTH=600e3&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RF_GAIN=34&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_ANTENNA=&amp;quot;Tuner 1 50 ohm&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that 14-bits ADC resolution is only available when using sample rates below 6.048 MSPS, above which the resolution is reduced gradually to 12, 10, and 8 bits.&lt;br /&gt;
&lt;br /&gt;
==USRP support==&lt;br /&gt;
Vendor: [https://ettus.com Ettus Research]&lt;br /&gt;
&lt;br /&gt;
required SoapySDR module: [https://github.com/pothosware/SoapyUHD/wiki SoapyUHD]&lt;br /&gt;
&lt;br /&gt;
Recent USRPs that use the Analog Devices [https://www.analog.com/en/products/ad9361.html AD9361 RFIC] can use almost arbitrary sample rates and analog bandwidth settings. It can be an advantage to set the sample rate as high as the host computer can handle and the analog bandwidth to as narrow as meaningful. The following settings [https://network.satnogs.org/observations/?norad=&amp;amp;observer=&amp;amp;station=1353&amp;amp;results=d1&amp;amp;start=2020-02-20+00%3A00&amp;amp;end=2020-02-24+23%3A59 worked well] for a [https://www.ettus.com/all-products/ub210-kit/ USRP B210] when using cross-yagis and good [https://www.ssb.de/en/amplifiers/preamplifier/vox/100w SSB low-noise amplifiers]:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_SOAPY_RX_DEVICE=&amp;quot;uhd&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RX_SAMP_RATE=2e6&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RX_BANDWIDTH=600e3&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_RF_GAIN=50&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;SATNOGS_ANTENNA=&amp;quot;RX2&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
*[https://www.rtl-sdr.com/rtlsdr4everyone-review-of-5-rtl-sdr-dongles/ Review of 5 RTL-SDR Dongles]&lt;br /&gt;
*[https://hackaday.com/2017/09/05/19-rtl-sdr-dongles-reviewed/ 19 RTL-SDR Dongles Reviewed]&lt;br /&gt;
*[https://www.rtl-sdr.com/review-airspy-vs-sdrplay-rsp-vs-hackrf/ Review: Airspy VS. SDRplay RSP VS. HackRF]&lt;br /&gt;
&lt;br /&gt;
[[Category:Build]]&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=SatNOGS_Monitor&amp;diff=3558</id>
		<title>SatNOGS Monitor</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=SatNOGS_Monitor&amp;diff=3558"/>
		<updated>2020-04-02T11:13:34Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Add -p to mkdir so it works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
[[File:Satnogs-monitor.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''SatNOGS Monitor''' is a terminal ui to monitor your and/or other ground stations of the SatNOGS network. It is written in [https://www.rust-lang.org/ Rust] and runs on Linux and has been reported to run on MacOS[https://community.libre.space/t/satnogs-station-monitor/2802/13]. Windows is currently not supported by the underlying terminal library, but might be added at some point in the future.  '''SatNOGS Monitor''' does not need to be installed on an actual SatNOGS station computer (although there are benefits to doing so as discussed below). &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Dependencies===&lt;br /&gt;
'''SatNOGS Monitor''' uses bindings to '''libgpredict'''[https://github.com/cubehub/libgpredict]. This library is not available as installable package and you'll have to build it yourself.&lt;br /&gt;
&lt;br /&gt;
====Install libgpredict dependencies====&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libglib2.0-dev cmake build-essential git&lt;br /&gt;
&lt;br /&gt;
====Build and install libgpredict====&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/cubehub/libgpredict.git&lt;br /&gt;
 cd libgpredict&lt;br /&gt;
 mkdir build&lt;br /&gt;
 cd build&lt;br /&gt;
 cmake ../&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig # for linux&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi (armhf)===&lt;br /&gt;
You can run the SatNOGS Monitor on the same Raspberry Pi as your ground station. You'll need to build and install libgpredict as shown above and can build the monitor from source (see [#Hacking]) or use the prebuild Raspbian package.&lt;br /&gt;
&lt;br /&gt;
 wget https://github.com/wose/satnogs-monitor/releases/download/0.3.1/satnogs-monitor_0.3.1_armhf.deb&lt;br /&gt;
 sudo dpkg -i satnogs-monitor_0.3.1_armhf.deb&lt;br /&gt;
&lt;br /&gt;
You can then run the monitor over any ssh connection to your ground station or view it directly on a display attached to your RPi. See [https://community.libre.space/t/stegoboard-satnogs-ground-station/4640 this thread] for some inspiration.&lt;br /&gt;
&lt;br /&gt;
===Linux (x86_64)===&lt;br /&gt;
If you're running an Debian like distribution you can install the prebuild package after building and installing libgpredict.&lt;br /&gt;
&lt;br /&gt;
 wget https://github.com/wose/satnogs-monitor/releases/download/0.3.1/satnogs-monitor_0.3.1_amd64.deb&lt;br /&gt;
 sudo dpkg -i satnogs-monitor_0.3.1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
See [#Hacking] if you're running another distribution.&lt;br /&gt;
&lt;br /&gt;
==Running it==&lt;br /&gt;
The monitor makes heavy usage of braille unicode characters so make sure your terminal emulator uses a font which includes those glyphs. The screenshot at the top shows alacritty[https://github.com/jwilm/alacritty] with the tewi-font[https://github.com/lucy/tewi-font]. Take a look at nerd-fonts[https://github.com/ryanoasis/nerd-fonts/] if you're unsure about which font to use. You could also use a forked version of yaft[https://github.com/wose/yaft] created by the same person as SatNOGS Monitor, which uses the Lucy Tewi font by default. &lt;br /&gt;
&lt;br /&gt;
Monitor single station:&lt;br /&gt;
 satnogs-monitor -s 175&lt;br /&gt;
Multiple stations:&lt;br /&gt;
 satnogs-monitor -s 175 -s 227&lt;br /&gt;
Monitor a station on the same machine as the monitor runs (gets you more system infos):&lt;br /&gt;
 satnogs-monitor -l 175&lt;br /&gt;
Monitor a local station and multiple remote stations:&lt;br /&gt;
 satnogs-monitor -l 175 -s 227 -s 2&lt;br /&gt;
&lt;br /&gt;
If satnogs-montor runs on the same machine as satnogs-client (typically a Raspberry Pi) you can set the satnogs client data path and enable the spectrum and/or waterfall plot to get a visualization of the received signal of the current observation.&lt;br /&gt;
 satnogs-monitor -l 175 --data-path /tmp/.satnogs/data/ --waterfall --spectrum&lt;br /&gt;
&lt;br /&gt;
If you have a rotator setup you can monitor the current rotator position by configuring the rotctld address:&lt;br /&gt;
 satnogs-monitor -l 175 --rotctld-address 127.0.0.1:4533&lt;br /&gt;
&lt;br /&gt;
You can also create a config file with all those informations:&lt;br /&gt;
 mkdir ~/config/satnogs-monitor&lt;br /&gt;
 cd ~/config/satnogs-monitor&lt;br /&gt;
 wget https://raw.githubusercontent.com/wose/satnogs-monitor/master/monitor/examples/config.toml&lt;br /&gt;
 edit config.toml&lt;br /&gt;
&lt;br /&gt;
Check the help for more command line arguments:&lt;br /&gt;
 $ satnogs-monitor -h&lt;br /&gt;
 satnogs-monitor 0.3.1&lt;br /&gt;
 Monitors the current and future jobs of SatNOGS ground stations.&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
     satnogs-monitor [FLAGS] [OPTIONS]&lt;br /&gt;
 &lt;br /&gt;
 FLAGS:&lt;br /&gt;
     -h, --help         Prints help information&lt;br /&gt;
         --spectrum     Enables the spectrum plot&lt;br /&gt;
     -V, --version      Prints version information&lt;br /&gt;
     -v                 Sets the level of log verbosity&lt;br /&gt;
         --waterfall    Enables the waterfall plot&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
     -a, --api &amp;lt;URL&amp;gt;                    Sets the SatNOGS network api endpoint url&lt;br /&gt;
     -c, --config &amp;lt;FILE&amp;gt;                Sets custom config file&lt;br /&gt;
         --data-path &amp;lt;PATH&amp;gt;             Enables the spectrum and waterfall plot if set to the SatNOGS&lt;br /&gt;
                                        client data path (/tmp/.satnogs/data/)&lt;br /&gt;
         --db-max &amp;lt;DB&amp;gt;                  Sets the upper dB bound of the spectrum and waterfall plot&lt;br /&gt;
                                        (0)&lt;br /&gt;
         --db-min &amp;lt;DB&amp;gt;                  Sets the lower dB bound of the spectrum and waterfall plot&lt;br /&gt;
                                        (-100)&lt;br /&gt;
     -l, --local &amp;lt;ID&amp;gt;...                Adds a station running on the same machine as this monitor&lt;br /&gt;
                                        with this SatNOGS network id to to the list of monitored&lt;br /&gt;
                                        stations&lt;br /&gt;
     -o, --orbits &amp;lt;NUM&amp;gt;                 Sets the number of orbits plotted on the map&lt;br /&gt;
         --rotctld-address &amp;lt;IP:PORT&amp;gt;    Enables rotator monitoring if set to a rotctld address&lt;br /&gt;
     -s, --station &amp;lt;ID&amp;gt;...              Adds a station with this SatNOGS network id to the list of&lt;br /&gt;
                                        monitored stations&lt;br /&gt;
         --waterfall-zoom &amp;lt;FACTOR&amp;gt;      Zooms the spectrum and waterfall plot (1.0 - 10.0)&lt;br /&gt;
&lt;br /&gt;
'''TAB''' key will cycle through available stations while SatNOGS Monitor is running.&lt;br /&gt;
&lt;br /&gt;
==Hacking==&lt;br /&gt;
&lt;br /&gt;
To build the monitor from source you'll need to install the Rust. Use your package manager or follow [https://www.rust-lang.org/tools/install this site]. &lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wose/satnogs-monitor.git&lt;br /&gt;
 cd satnogs-monitor/monitor&lt;br /&gt;
 mkdir -p ~/.config/satnogs-monitor&lt;br /&gt;
 cp examples/config.toml ~/.config/satnogs-monitor/&lt;br /&gt;
 edit ~/.config/satnogs-monitor/config.toml&lt;br /&gt;
 cargo run --release -- -s 175&lt;br /&gt;
 &lt;br /&gt;
[[Category:Operate]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Develop]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Raspberry_Pi&amp;diff=3557</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Raspberry_Pi&amp;diff=3557"/>
		<updated>2020-04-01T19:45:53Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Clarify where to find UTC timezone and expand filesystem menu options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:B3342fcc865731d69e0c9d7a8b1abb887185bc13 1 531x500.jpg|alt=Libre Space Foundation Raspberry Pi Case|thumb|Libre Space Foundation Raspberry Pi Case, [https://www.thingiverse.com/thing:3233687 on thingiverse]]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi (version 3 and 4) is the reference platform for SatNOGS (see our [[SatNOGS Client Ansible|Ansible guide]] to install SatNOGS on other Linux machines). You can try using various distributions for this (eg. Debian/Armbian, Arch, Fedora), but the one we suggest is our custom image based on latest Raspbian.&lt;br /&gt;
&lt;br /&gt;
{{Message|This page assumes you have an account and a ground station registered on either network.satnogs.org or network-dev.satnogs.org. Make note of your station ID and API Key.}}&lt;br /&gt;
==[https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/-/jobs/artifacts/2019091100/download?job=release &amp;lt;span class=&amp;quot;glyphicon glyphicon-save&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;][https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/-/jobs/artifacts/2020030400/download?job=release Download]==&lt;br /&gt;
&lt;br /&gt;
You can download the latest Raspbian SatNOGS image following the links from the [https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/tags latest tag on GitLab]. This image has the SatNOGS setup script installed, the SSH server enabled and all required packages preinstalled. Click on the cloud icon and then click &amp;quot;Download release&amp;quot;. You will get an Artifacts.zip file:&lt;br /&gt;
&lt;br /&gt;
==Artifacts list==&lt;br /&gt;
&lt;br /&gt;
The current artifacts list consists of:&lt;br /&gt;
&lt;br /&gt;
*A Zipped image file&lt;br /&gt;
*An Image info file&lt;br /&gt;
*A SHA256 checksums file&lt;br /&gt;
&lt;br /&gt;
===Data integrity verification===&lt;br /&gt;
&lt;br /&gt;
You should verify the data integrity of the artifacts by checking the SHA256 checksums. On Linux, run &amp;lt;code&amp;gt;sha256sum -c sha256sums&amp;lt;/code&amp;gt; in the directory where the artifacts are downloaded and unzipped.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sha256sum -c sha256sums &lt;br /&gt;
2017-09-29-Raspbian-SatNOGS-master-lite.info: OK&lt;br /&gt;
image_2017-09-29-Raspbian-SatNOGS-master-lite.zip: OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flashing==&lt;br /&gt;
[https://www.raspberrypi.org/documentation/installation/installing-images/README.md Follow the usual Raspbian flashing instructions], and boot your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==Getting console access==&lt;br /&gt;
You can log in the Raspberry Pi by connecting it to a keyboard and monitor or through network via an SSH connection.&lt;br /&gt;
&lt;br /&gt;
===Keyboard and monitor===&lt;br /&gt;
Once your Raspberry Pi is booted, log in with username &amp;quot;'''pi'''&amp;quot; password &amp;quot;'''raspberry'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Ethernet===&lt;br /&gt;
If you are using wired Ethernet you should get connectivity right away. You just need to find the IP address of Raspberry Pi (e.g. in your router management interface). Log in with SSH using username &amp;quot;'''pi'''&amp;quot; password &amp;quot;'''raspberry'''&amp;quot;, for example:&lt;br /&gt;
 $ ssh pi@192.168.1.2&lt;br /&gt;
If your network supports [[wikipedia:Zero-configuration_networking|&amp;lt;code&amp;gt;zeroconf&amp;lt;/code&amp;gt;]], then you can use the hostname of your Pi:&lt;br /&gt;
 $ ssh pi@raspberrypi.local&lt;br /&gt;
&lt;br /&gt;
===Pre-boot wireless configuration===&lt;br /&gt;
If neither keyboard/monitor, nor a wired Ethernet are available, you can set up a WiFi connection before boot by mounting the boot partition of the flashed SD card and editing files directly. Note your OS may mount boot partition in a different location. [https://raspberrypi.stackexchange.com/questions/10251/prepare-sd-card-for-wifi-on-headless-pi#comment98121_57023 Windows users have line ending problems]. Suggested actions:&lt;br /&gt;
&lt;br /&gt;
 $ $EDITOR /media/Raspbian_SatNOGS-boot/wpa_supplicant.conf&lt;br /&gt;
&lt;br /&gt;
contents: (note key_mgmt options include NONE, WPA-PSK, WPA-EAP)&lt;br /&gt;
&lt;br /&gt;
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
    update_config=1&lt;br /&gt;
    country=US&lt;br /&gt;
    &lt;br /&gt;
    network={&lt;br /&gt;
        ssid=&amp;quot;NETWORK_NAME&amp;quot;&lt;br /&gt;
        psk=&amp;quot;password&amp;quot;&lt;br /&gt;
        key_mgmt=WPA-PSK&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Setup===&lt;br /&gt;
Once your Raspberry Pi is booted, log in with username &amp;quot;'''pi'''&amp;quot; password &amp;quot;'''raspberry'''&amp;quot; and run: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to be sure to do the following:&lt;br /&gt;
&lt;br /&gt;
*Set a strong, unique password&lt;br /&gt;
*Change localization settings:&lt;br /&gt;
**by default the rpi locale is configured for EN-GB, change as appropriate (ie: to EN_US.UTF-8)&lt;br /&gt;
**set timezone (we recommend UTC so your logs match the times in Network; UTC is under the 'none of the above' submenu)&lt;br /&gt;
**set keyboard layout, again this is defaulting to a UK layout&lt;br /&gt;
**set wifi country&lt;br /&gt;
**expand filesystem (under the Advanced menu)&lt;br /&gt;
*Configure network or WiFi (see [https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md this doc for network configuration instructions])&lt;br /&gt;
*Finish and reboot&lt;br /&gt;
&lt;br /&gt;
===SatNOGS Setup===&lt;br /&gt;
SSH to the Raspberry Pi with user &amp;quot;'''pi'''&amp;quot; and your new password.&lt;br /&gt;
&lt;br /&gt;
Follow [[SatNOGS Client Setup]] instructions to configure the system.&lt;br /&gt;
&lt;br /&gt;
[[Category:Build]]&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Talk:Raspberry_Pi&amp;diff=3556</id>
		<title>Talk:Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Talk:Raspberry_Pi&amp;diff=3556"/>
		<updated>2020-04-01T18:36:10Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download ==&lt;br /&gt;
&lt;br /&gt;
I'm not familiar enough to just edit the page itself, but in grabbing the initial image to set up my station, I noted this doesn't make sense:&lt;br /&gt;
&lt;br /&gt;
: ''You can download the latest Raspbian SatNOGS image following the links from the [https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/tags latest tag on GitLab]. This image has the SatNOGS setup script installed, the SSH server enabled and all required packages preinstalled. Click on the cloud icon and then click &amp;quot;Download release&amp;quot;. You will get an Artifacts.zip file:''&lt;br /&gt;
&lt;br /&gt;
Clicking the big Download link gives me an artifacts.zip file. I can't find the cloud icon or &amp;quot;Download release&amp;quot; link after clicking through to GitLab.&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.satnogs.org/index.php?title=Talk:Raspberry_Pi&amp;diff=3555</id>
		<title>Talk:Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.satnogs.org/index.php?title=Talk:Raspberry_Pi&amp;diff=3555"/>
		<updated>2020-04-01T18:35:29Z</updated>

		<summary type="html">&lt;p&gt;Matburnham: Initial download text doesn't make sense&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not familiar enough to just edit the page itself, but in grabbing the initial image to set up my station, I noted this doesn't make sense:&lt;br /&gt;
&lt;br /&gt;
: ''You can download the latest Raspbian SatNOGS image following the links from the [https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/tags latest tag on GitLab]. This image has the SatNOGS setup script installed, the SSH server enabled and all required packages preinstalled. Click on the cloud icon and then click &amp;quot;Download release&amp;quot;. You will get an Artifacts.zip file:''&lt;br /&gt;
&lt;br /&gt;
Clicking the big Download link gives me an artifacts.zip file. I can't find the cloud icon or &amp;quot;Download release&amp;quot; link after clicking through to GitLab.&lt;/div&gt;</summary>
		<author><name>Matburnham</name></author>
		
	</entry>
</feed>