Good day all,
I have been an early adapter when it comes to the Airspy SDR receivers, the R2 was my first buy and soon after there was also the Mini. The challenge with the Airspy is its high sample rate and USB communication, they will perform at there best if they have a dedicated USB interface with a good quality USB cable, if you don’t give this any attention you will be disappointed. That being said, I was really surprised about recent “bad” performance when using it with my SatNOGS client. This brought me to the following:
Maybe others already have seen my query via this community to get some idea on how other Airspy R2/Mini SDR users are experiencing it performance when using it with a SatNOGS ground-station.
There where not many responses, but looking at the ones that where there I saw similar issues in there reception.
As you know the SatNOGS client uses the Soapy framework in combination with gr-soapy to communicate with the SDR, this opens the possibility to have a generic way to build the software, you only need a Soapy 0.7 SDR module and you can use it your ground-station.
So if there is some SDR related issue, we need to look at the Soapy 0.7 Airspy driver. I already ran into issues before where I wanted to combine two Airspy receivers on the same computer and discovered that the serial=
function wasn’t available. Gain, as can be read on this wiki page is also an issue.
Then I saw a twitter posting that Albin Stigo was working on Soapy AirspyHF improvements and I asked if this was also possible with the R2 and Mini. So I shared some recent waterfall data, that was created when using the PothosWare SoapyAirspy master branch, his first response was, yes, this looks like buffer overruns and his AirspyHF upgrades could also be used with the R2 and Mini. The next couple of days he created a new git repository and came pretty soon with the initial release. Have a look at the repository and don’t forget the issue page.
After a couple of version I am now running with the latest v2 branch and after more then 48 hours I can see a clear difference in performance on both the R2 and the Mini.
So I am looking for others that will also try this new version.
There are a couple of steps that you need to take:
- Build the source
- Alter your satnogs-client configuration.
Build from source:
First make sure you have the latest Airspy library installed, this can be done by following the steps on this airspyone_host github page.
Then build the v2 SoapyAirspy library from Albin, this can be done in the following way.
Make sure the following dependencies are in place. sudo apt-get install libsoapysdr-dev
and maybe there are other for your specific environment.
mkdir source
cd source
git clone https://github.com/ast/SoapyAirspy.git
mkdir build
cmake -Wno-dev ../
make
This will produce a libairspySupport.so
to easily test this version and go back to to former release I just made a copy of the current one and after that copied the new version to the system location.
For x86 systems, this is done in the following way, arm users will have a different directory (/usr/lib/arm-linux-gnueabihf
)
sudo cp /usr/lib/x86_64-linux-gnu/SoapySDR/modules0.7/libairspySupport.so /usr/lib/x86_64-linux-gnu/SoapySDR/modules0.7/libairspySupport.so.deb
sudo cp libairspySupport.so /usr/lib/x86_64-linux-gnu/SoapySDR/modules0.7/libairspySupport.so
Now we also need to change the /etc/default/satnogs-client
file, I will first do this manually, so not with the help of sudo satnogs-setup
I guess it will currently look similar to the following example (serial and biastee are optional)
SATNOGS_SOAPY_RX_DEVICE="driver=airspy,serial=4a464c836701234,biastee=true"
SATNOGS_GAIN_MODE="Settings Field"
SATNOGS_OTHER_SETTINGS="LNA=9,MIX=6,VGA=11"
This is a so called manual gainmode when using the new driver and if you want to use it in this way, you need to device string in the following way:
Manual (gainmode=2) LNA, MIX and VGA values between 0 and 15 can be used
SATNOGS_SOAPY_RX_DEVICE="driver=airspy,serial=4a464c836701234,biastee=true,gainmode=2"
SATNOGS_GAIN_MODE="Settings Field"
SATNOGS_OTHER_SETTINGS="LNA=9,MIX=6,VGA=11"
Now with this release the Airspy native gain modes like linear and sensitive are also supported and these can be configured in the following way:
Linear (gainmode=0) LIN values between 0 and 21 can be used
SATNOGS_SOAPY_RX_DEVICE="driver=airspy,serial=4a464c836701234,biastee=true,gainmode=0"
SATNOGS_GAIN_MODE="Settings Field"
SATNOGS_OTHER_SETTINGS="LIN=14
Sensitive (gainmode=1) SENS values between 0 and 21 can be used
SATNOGS_SOAPY_RX_DEVICE="driver=airspy,serial=4a464c83670830b,biastee=true,gainmode=1"
SATNOGS_GAIN_MODE="Settings Field"
SATNOGS_OTHER_SETTINGS="SENS=14
When you copied the library and changed the values you can restart your satnogs-client sudo systemctl restart satnogs-client
and with the following command you can look at the logs created by the next observation that you created and that will be using the new installed library. sudo journalctl -f -u satnogs-client -n 512
When the observation starts you will see a information similar to this:
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] Found AirSpy device: serial = 306b65c7
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] SoapyAirspy::SoapyAirspy(biastee) = true
Nov 09 13:30:55 exomars satnogs-client[67448]: [INFO] airspy_set_rf_bias(1)
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] SoapyAirspy::SoapyAirspy(gainmode) = 0
Nov 09 13:30:55 exomars satnogs-client[67448]: [INFO] gainMode_ = 0
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] setGainMode(0)
Nov 09 13:30:55 exomars satnogs-client[67448]: [INFO] airspy_set_rf_bias(1)
Nov 09 13:30:55 exomars satnogs-client[67448]: [INFO] gainMode_ = 0
Nov 09 13:30:55 exomars satnogs-client[67448]: [INFO] Using format CF32.
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] sample type: 0, sample size 8
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] setGainMode(0)
Nov 09 13:30:55 exomars satnogs-client[67448]: [DEBUG] SoapyAirspy::setAntenna(RX)
Nov 09 13:30:56 exomars satnogs-client[67448]: [DEBUG] SoapyAirspy::activateStream() flags=0 timeNs=0 numElems=0
I hope this information is enough so that others will give this development a try and see if they also have a better experience when using the Airspy R2 and or Mini SDR.
Source:
- Albin his Soapy SDR plugin for Airspy R2 and Mini repository
- Airspyone_host gain airspy.h information