06 aprile 2009

Quicksilver, SDR modulare e multipiattaforma


I continui progressi e i riconoscimenti internazionali che il progetto SDR di Nico Palermo, Perseus, continua instancabilmente a macinare non devono oscurare del tutto un secondo progetto di ricevitore software di grande interesse. Quicksilver, (copertura da 15 kHz a 55 MHz) progetto portato avanti da Phil Covington, ha parecchie cose in comune con Perseus, inclusa il suo fondamento architetturale: la conversione diretta. Entrambi i front end di questi due ricevitori operano per conversione diretta: la radiofrequenza viene campionata da un convertitore e le operazioni di conversione del segnale sono svolte in logica cablata con una FPGA. Le differenze (ce ne sono anche a livello di front end hardware ma lasciamole per il momento da parte) riguardano tutto quello che avviene dopo: mentre Nico ha sviluppato un software di controllo e demodulazione proprietario per Windows, Phil ha seguito una strada diversa, con un progetto open source che sta producendo risultati non meno interessanti. Io seguo queste evoluzioni con particolare trepidazione perché gli sviluppatori per Quicksilver stanno sfornando soluzioni native o comunque compilabili per Mac OS X.
Quando parliamo di software di controllo, nel caso di Quicksilver bisogna fare diverse precisazioni. Nella concezione di Covington l'approccio del Quicksilver è altamente modulare e impone una netta separazione tra la parte di gestione delle interfacce front end-computer e la demodulazione da un lato e l'interfaccia grafica sul computer dall'altro. Tutto quanto pertiene alle attività fino alla demodulazione è svolta da un programma server che è anche in grado di distribuire via Internet i dati grezzi generati dall'abbinata sul front end (conversione diretta e downconversion numerica cablata). Demodulazione, filtraggio e rendering sono implementati con apposite librerie FFT (Fast Fourier Transform) e DSP. Il rendering viene realizzato da una GUI (interfaccia grafica utente) chiamata fino a poco fa SDRMAX e oggi ribattezzata Panopos, interfacciata ad alto livello con il cosiddetto qs-server.
In questi giorni, grazie ai messaggi del Yahoo Group di supporto al Quicksilver, sto studiando gli ultimi sviluppi che riguardano SDRMax/Panoptos e i risultati ottenuti sono affascinanti. Tra l'altro molti contributi vengono da una programmatrice inglese, Cathy Moss, che sforna continuamente nuove versioni dell'interfaccia grafica e del server QSR1. Nei messaggi e nelle aree file, dopo un lavoro di squadra di impressionante efficacia, si trovano sorgenti, librerie, precompilati anche per piattaforma Mac (ecco le istruzioni per quest'ultima, da scaricare dopo l'iscrtuzione al gruppo) e Linux. La modularità di QuickSilver aiuta perché tra le varie cose è possibile utilizzare il front end e il server su una macchina e l'interfaccia grafica di controllo e rendering su una piattaforma diversa, anche remota, connessa in TCP/IP. Panoptos utilizza un framework di programmazione chiamato QT, che è disponibile in versione commerciale o public domain (QT è il nuovo nome del framework sviluppato da Trolltech e successivamente acquisito da Nokia per lo sviluppo di applicazioni su dispositivi mobili, trovate i downoload Win/Linux/Mac a questo indirizzo). La libreria FFT utilizzata è la FFTW, anch'essa compilabile in diversi ambienti. Un campo giochi davvero illimitato per chi si diverte a trasformare in software quello che prima doveva essere costruito con bobine, condenstatori e transistor (anche una FPGA ha dentro transistor e condensatori ma l'approccio generale è molto diverso rispetto alla elettronica discreta). Personalmente faccio un po' di fatica a spiegare cose che non capisco del tutto, ma ho messo insieme due brevi testi che descrivono l'architettura modulare hardware e software di Quicksilver e le principali tappe (delineate da Ken Hopper, N9VV) del percorso evolutivo maturato in circa 15 mesi di lavoro dagli iscritti al gruppo di supporto (creato nel dicembre del 2007). Tra gli obiettivi per quest'anno c'è anche l'idea di integrare una scheda della nuova generazione di microPC (per esempio basati su Atom) per avere finalmente un Quicksilver almeno in parte stand alone. Sul sito di Ken trovate diversi filmati che illustrano il funzionamento dell'interfaccia grafica. Anche un radioamatore italiano, Andrea Montefusco IW0HDV, sta dando molti contributi per la compilazione e l'installazione di sorgenti e librerie in Linux.
Parts of the Whole

A time-tested way to understand any complex system is to break it into components. The QS1R is no exception, although my own lack of time and attention lately have been holding back my own exploration of its structure. Regardless, here's a first attempt at laying out the relevant parts:

Hardware

70 Mhz Low-pass filter and balun
Reduces or eliminates aliases and undersampling images at the ADC
Converts unbalanced input signal into differential signal for input into ADC

Analog Devices ADC (LTC2208) and low-jitter clock
Converts the ~50 Mhz analog input signal into two 16 bits/sample I and Q channels at ~125 Mhz (500 MBytes/sec, 4 Gbits/sec!!).

Altera Cyclone III FPGA
Decimates the samples from the ADC down to a rate that can be handled by the USB interface and PC
Implements one or more CORDIC numerically controlled oscillators (NCO) to provide tuning for one or more (virtual) receivers

USB 2.0 Interface
Provides a channel to the PC for final processing of the signal(s)
Provides an interface to the FPGA so that it can be programmed and controlled

8051 CPU and EEPROM
Initializes hardware and USB interface so that qs-server can control and configure it

PC
Performs final filtering and demodulation of decimated signal from QS1R
Controls and configures QS1R hardware
Plays demodulated audio
Provides user interface

Software

This is no doubt a somewhat abbreviated and simplified list. But what I am really interested in decomposing is the software on the PC, so here is a list of the relevant software components:

libusb
Provides access to USB control and transport functions without requiring a custom device driver
Written in C

FFTW
Provides high-performance portable FFT functions for various CPUs
Written in C

qs-library
Provides functions to create and manipulate configuration and control commands for the QS1R hardware
Written in C

qs-server
Uses the qs-library to provide a high-level interface for the GUI
Implements the final filtering, AGC and demodulation using FFTW and DSP algorithms (SharpDSP in the C# version)
Receives "baseband" data from and sends commands to the QS1R hardware using libusb
Receives commands from the GUI via UDP (or TCP) socket
Sends demodulated signal to system audio interface for playback
Originally written in C# and .NET, but migrating towards C++ and Qt (it is a CLI application, why is Qt needed?)

qs-firmware
This contains the bootstrap software in EEPROM on the QS1R hardware that brings up the USB port and initializes the hardware (FPGA, I2C, ADC, etc.) so that the qs-server can talk to it using libusb
Written in C and 8051 assembler
Does not execute on the PC

qs-fpga
This the FPGA code that does the decimation, filtering and CORDIC oscillator. It is loaded into the FPGA by the qs-server
Written in Verilog for the Altera Cyclone-III FPGA
Does not execute on the PC, it is only loaded onto the FPGA by the PC

qs-gui
Sends commands to qs-server via UDP (or TCP) sockets
Receives and displays spectrum data from qs-server (also using sockets)
Provides user controls and displays current operating status
Originally written in C# and .NET, but migrating towards C++ and Qt

The beauty of the architecture that Phil has created is that the user interface (qs-gui) is nicely separated from the engine (qs-server et al). At least in theory, this allows the choice of implementation for both to be completely independent, even to the point where they don't have to be on the same computer.

Data Flows

Another part of decomposing a system is looking at the various data flows in it. Any system that does meaningful work must contain at least one data flow. For the QS1R, there are quite a few involved:

ADC - FPGA
Two channels (I and Q) of 16 bit sample data from the ADC at ~125 Mhz, so a big data flow of 2 Gbit/second for each of the I and Q channels.

FPGA - FX2/USB
(TBD - The I and Q channels are heavily decimated by the FPGA)

USB/PC
(TBD - There are at least two data flows here: One to control the QS1R hardware, and one to carry the I/Q data to the PC for final processing and demodulation.

usblib
All data to/from the QS1R is carried via this library

qs-server
The QS1R command data originates here, and the I/Q data from the QS1R ends up here

qs-gui
The GUI receives at least two data flows from the qs-server: The panadapter data stream and the S-Meter data stream

***

QS1RServer and (SDRMAX) Panoptos project achievements:

[1] separation of DSP server and GUI using sockets architecture delivers innovation for Internet connectivity and code portability

[2] separation of panadapter and audio data USB end-points delivers innovation that cuts CPU load, and leads to new display capabilities

[3] panadapter widths selectable from 50Khz to 50Mhz

[4] panadapter display is now flat as a board due to special FPGA code enhancement

[5] Center noise hump eliminated by clever mathematical algorithm in FPGA

[6] Automated DC Offset calculation eliminates manual offset settings

[7] Interoperability with the popular WinRad software.

[8] 25khz to 50mhz panadapter bandwidth instantly selected by simple slider control

[9] on board audio DAC implemented to totally simplify the audio chain and reduce latency.

[10] First QS1RServer port to Linux using Mono July 26, 2008

[11] First GUI port of SDRMAX-II to Linux using Mono 1.9 - July 27, 2008.

[12] First demonstration of SDRMAX-II on XP in VirtualBox on Linux (server running on Ubuntu using Mono port)

[13] First demonstration of SDRMAX-II on QEMU on FreeBSD7

[14] QS1RServer with TCP/IPC/HTTP support on user selected ports.

[15] Cathy has created a test 3D OpenGL waterfall that is truly awesome.

[16] Cathy invented SDRMAX-III to demonstrate and test Qt/C++
programming options and approaches.

[17] Phil announced continuation of the QuickSilver Project with expectations for delivery of the RFFE1 bandpass/preamp board in Q1 2009, and the exciting new QS1T Transmitter board in early 2009.

[18] Phil announced that in 2009 the QuickSilver Project may include a small computer board to take over all the server and possibly the display duties to give us a stand-alone transceiver with a separate control head. Phil is stressing the MODULARITY of his designs.

[19] Phil has successfully made a transition from the original SVN server to the Google server where everyone has equal and unambiguous download access: http://qssdrcode.googlecode.com/svn/

[20] Please don't bug Phil about SVN access. If you are not familiar with source version numbering schemes, ask someone on the list. The SVN has branches for those individuals who own a QS1R and have demonstrated a serious effort to contribute to the software base.

[21] December 2008 Jean-Jacques in France has successfully ported server version 2.0.0.2.0 to his MAC and I have confirmed that it compiles correctly on WinXP using Qt-4.4.3. There is a high expectation for a Linux version as well. On December 22 I was able to run Jean-Jacques server in TCP mode on my Dell desktop and watch Cathy's new SDRMAX-III GUI on my little mITX over my LAN. Remote operation was very smooth.

[22] Group formed on December 20 2007 and grows to over 840 members in February 2009.

[23] Alex VE3NEA announced in December 2008 that he has successfully hand rewritten the Cyclone-III FPGA code to process seven (7) simultaneous independent receivers. There is no server code or GUI presently available to process and display the 7 streams. Alex remarked that he had to squeeze every element out of the FPGA. Perhaps in the future a larger FPGA will yield even more impressive and amazing results.

[24] Phil's server 2.0.0.5 successfully communicates over Internet to England, Italy, and across the US using new UDP streaming methodology and Cathy's experimental SDRMAXIII GUI.

[25] http://www.n9vv.com/QuickSilver-Movies.html with demonstration movies and still images from WindowsXP, Linux, and Windows-7 http://www.n9vv.com/QuickSilver-Movies.html

[26] Cathy Moss renames her experimental GUI "Panoptos" meaning viewing all at once. The new menu structure is very appealing.

[27] The server and GUI are so well done that performance over the Internet is excellent. People have viewed my receiver in Chicago, IL from Italy, Croatia, the UK, and Germany as well as the US.

[28] Cathy has demonstrated her new "INBAND" higher resolution spectrum display in 1.0.0.5beta Panoptos. This is a new feature for all of us to get used to. We are hopeful that Phil or Cathy will write an end-user level explanation of the benefits of this new feature.

[29] March 31, 2009 Phil has announced the new 2.2.0.0 C++ server using no Qt functions of any kind and adding the "Boost" libraries for better network, debugging, and threading performance. Andrea helped with his eagle-eye to find various Linux syntax issues and
patch them. Phil then incorporated the patches in SVN 547.

***
Link utili:

http://www.philcovington.com/QuickSilver/ (http://www.srl-llc.com/)
http://quicksilver-sdr.blogspot.com/
http://pcovington.blogspot.com/
http://www.n9vv.com/hamradio.html
http://groups.yahoo.com/group/qs1r/join

Nessun commento: