qs1r-multirelay source code

As promised, I released the source code of my program. Nothing exceptional, just some lines of code to dispatch the multiplexed IQ output of the receiver into 7 audio channels. For this, I used the qs1r framework from Phil (N8VB) and the Verilog part written by Alex (VE3NEA).

My prog needs few more features and bugs correction, but I already corrected a major bug about a buffer leak. The QS1R buffer and the audio buffer are not perfectly synchronised and moreover, the Window (MME) audio buffers jams sometimes and skips some data. Instead to try to compensate this with an adaptive buffer (which grow rapidly), I simply drop some frames 🙂

The source code & binary (version 0.1 alpha) can be downloaded here, or on my Github : http://github.com/Guenael

The audio relay could be modified to work directly with CwSkimmer. It’s not interesting for the Linux users, but the community that uses CwSkimmer to contribute to ReverseBeaconNetwork could spot CW QSO as usual, and in the same time, take some QRSS captures. The CWSL projet (OL5Q) allows to duplicate the data flow to another application (ex: HDSDR, an audio file recorder) and my qs1r-multirelay could be rewritten to read the shared memory. The RBN community is larger than the QRSS community and some hams could be interested to participate and share their receiver. Unfortunately, I have no feedback about multi-channels grabbers on the KnightsQrss mailing list and I won’t spend more time on this project. The source code is available, anyone can play with 🙂

qs1r receiver board

Grabber 7 bandes et programmation

Je sais pourquoi je n’aime pas la programmation, c’est toujours des prises de têtes sur fond de thread, mutex, références et ça fini à point d’heure… Je me suis encore torturé l’esprit, j’ai peu dormi, mais ça y est, j’ai gagné ! Mon dernier petit prog’ tourne au poil =)

J’ai écrit une application pour le qs1r, un récepteur SDR à conversion directe. Pour faire court, le programme relaye 7 réceptions différentes dans des câbles audio virtuels. Ceci permet de faire tourner derrière des programmes comme SpectrumLab, et ainsi générer des captures de waterfall QRSS.

Le gros du travail avait déjà été fait en amont par Alex (VE3NEA) qui à écrit le code Verilog pour le FPGA qui permet de downsampler 7 streams (cordic, décimation cic & filtrage). Lui-même à utilisé le framework open source de Phil (N8VB) qui à conçu et commercialisé le qs1r.

Le récepteur qs1r

Au passage, un gros merci à Alex, a qui j’avais demandé l’année passée de publier une partie de son code verilog. Depuis ce moment, je n’avais pas trouvé le temps de réaliser ces quelques lignes de code, mais j’ai enfin fini par m’y attaquer.

Un peu plus techniquement, j’utilise le framework QT avec GCC. La compilation est faite pour le moment pour Windows, mais le code est facilement portable sur Linux ou Mac (merci QT ! 🙂

Actuellement, je teste la stabilité du programme sur une semaine et ceci pour 3 bandes. Ensuite, après quelques petits correctifs (méthode push plutôt que pull, nettoyage du code et commentaire, etc…) je mettrais le source sur mon github ainsi qu’une release pour les binaires.

Voici un petit aperçu : (initialement 40m, 30m et 20m, mais les fréquences changent en fonction des demandes)

Dans les possibles évolutions, le programme pourrait être modifié pour fonctionner derrière CwSkimmer et sortir en plus des spots CW, des captures QRSS. Comme la communauté Skimmer/ReverseBeaconNetwork est assez peuplée et que le qs1r est largement utilisé, ceci pourrait donner un coup de boost aux activités QRSS.

Par ailleurs, le soft QRSS VD (de Scott, AJ4VD) pourrait être modifié pour accepter directement les données du qs1r sans passer par des câbles audio virtuels (VAC pour Windows, Jack pour Linux).

L’interface de configuration

Pour terminer, un rappel de la page du grabber installé à Foulab (VA2LTF). Pour le moment, je laisse tourner 3 bandes, et prochainement, plein pot sur 7 bandes 🙂

Multiband QRSS grabber

Update : Je l’ai passé en 7 bandes, ça fait plaisir à voir sur une seule page 🙂