Software Defined Radio: de zachte kant Jan van Katwijk
Even voorstellen Typische jaren 50/60-er: Radio's bouwen met buizen en stevige 1 Watt weerstanden MG/KG: van 1 tot N buizen FM (Radio Electronics) In de jaren 70 en 80 aandacht voor gezin en werk Minicomputers: PDP-8, PDP-9, PDP-11 Veel programmeerwerk: Algol 60, Lisp, BCPL, C en Ada Begin jaren '90 kleine opleving van radiotechniek Aanschaf van een Plessey PRG155A programma's voor decoderen van weerkaarten (JVFax,...), RTTY en PSK onder DOS (seriele poort). Al snel weer geabsorbeerd door werk, dus...
Even voorstellen (II) Vanaf 2009 tijd voor een hobby: pensioen Begonnen met een eenvoudige radio met transistoren: componenten te klein, Serie artikelen (Signals samples and stuff (QEX 1998)) en boek (What every engineer should known about DSP): Dus maar wat gaan programmeren: spectrumscope, filters, etc Tools: Laptop met Linux, Qt voor de GUI, Portaudio voor de geluidskaart. Dus werd het C en C++
Even voorstellen (III) Al snel een spectrumscope om via de geluidskaart naar CD's te kijken, In 2009 interface naar Elektor kaart: een radio om de korte golf te beluisteren am, usb, lsb (resultaat vergelijkbaar met de gewone Plessey), In 2009/2010 uitgebreid met verschillende Modes (RTTY, PSK, etc), In 2011 uitgebreid met file handling en pmsdr kit, Januari 2012 eerste versie op pmsdr site, In 2011/2012 FM decoders erbij en de software cross-compiled voor Windows, <www.sdr-j.tk> gaat up, In 2012/2013 uitgebreid met DAB sticks en DAB, In 2014 uitbreiden met DRM decoder en porten naar Raspberry.
Huidige Stand van Zaken 32 bits set voor Windows en Linux SW radio met support voor Elektorkaart (0.. 30 Mhz), Pmsdr (0.. 165 Mhz), dabsticks (24.. 2000 MHz) voor Windows: soundcard-based Winrad-compatible dll's, Analoge en digitale modes (am ssb rtty, (b)psk, mfsk, cw, hell, amtor(b),...). Swbackend met support voor File and soundcard input, Alle beschikbare decoders. AM/FM radio met support voor Elektorkaart (< 30 MHz), pmsdr (0.. 165 Mhz), Dabsticks (24.. 2000 Mhz) en Mirics dongle 64 bits set voor Windows en Linux FM radio met support voor Dabsticks en Mirics dongle DAB radio met support voor DABsticks en Mirics dongle Eenvoudige spectrumviewer
SW ontvanger
FM ontvanger
Spectrum viewer (Mirics dongle)
DAB decoder
Demo tijd Demo 1: DAB: 64 bits Mode II Demo 2: DAB: 64 bits Mode I Demo 3: Swreceiver: 32 bits: lsb Demo 4: Swreceiver: 32 bits: psk
SDR 50-er jaren: systemen met analoge dataverwerking, digitaal/mechanisme verwerking 70-er jaren: analoge dataverwerking met digitale backends 80-er jaren: analoge dataverwerking met digitale backends en digitale control 00-er jaren: (bijna) volledig digitale dataverwerking met digitale control
SDR Er vindt dus een verschuiving plaats waarbij zo VROEG ALS MOGELIJK de analoge data omgezet wordt in digitale data, waarna de verdere bewerking digitaal is Verdere digitale verwerking kan met dedicated hardware (denk aan filteren, convolutional en Reed Solomon decoding en FFT's) of met een PC, mijn voorkeur is een PC Ultieme SDR: antenne direct aan AD converter, alle bewerking digitaal USRP biedt high speed AD conversie (tot in de Ghz) VLF direct aan de geluidskaart (wel protectie nodig) Meeste SDR: downconversie en analoge output voor soundcard (of externe AD converter) ( Normale geluidskaart: tot 192KS/seconde (16/24 bits)) Duurdere SDR: downconversie en eigen sampler.
Eenvoudigste hardware Ontwerp van Kainka: Downconversie naar Zero IF Werkt ook met 402N spoel, afstemcondensator en (bijna) willekeurige transistor Ook leuk voor de buren
Kenmerk serieuze Hardware Programmeerbare VCO (bijvoorbeeld Si570 als gebruikt bij o.a. pmsdr Programmeerbaar bandfilter I/Q samples als output Hetzij analoog, dan bijv. Via de geluidskaart de computer in Hetzij eigen AD converter, bijv DABstick Twee oscillatoren, zelfde freq, 90 graden in fase gedraaid, bij de downconversie naar Zero IF
I/Q Samples Nyquist: een signaal met een breedte van N Hz kan volledig worden beschreven met 2* N equidistante samples per seconde I/Q samples: I is de Inphase (cos) component, Q is de Quadratuur (sin) component Met N (equidistante) I/Q samples per seconde kan een signaal met een breedte van N hz volledig worden beschreven. 6 db per Bit
Real vs I/Q samples Duidelijk is te zien dat bij het gebruik van mono samples er een spiegeling optreedt. Bij gebalanceerde I/Q samples is die spiegel weg.
Bestaande hardware Pappradio Pre-built 150 khz 30 MHz (210 MHz using harmonics) External ADC required (I/Q output)? USB Yes Yes? $85 http://pappradio.de/ http://code.google.com/p/libpappradio/ Soft66AD / Soft66ADD / Soft66LC Pre-built 2.5 30 MHz (70 MHz with Soft66ADD) External ADC required (I/Q output) 0/1 USB Yes Unofficially? $18 http://zao.jp/radio/soft66ad/ easysdr USB Dongle Pre-built 64 1,700 MHz 48, 96 khz 0/1 USB Yes No No $110 http://microsat.com.pl/product_info.php?products_id=35 FUNcube Dongle Pre-built 64 1,700 MHz 96 khz 0/1 USB Yes Yes Yes $160 http://www.funcubedongle.com/ FUNcube Dongle Pro+ Pre-built 0.15 240MHz, 420-1,900 MHz 192 khz 0/1 USB Yes Yes Yes $200 http://www.funcubedongle.com/ FiFi-SDR Pre-built 200 khz 30 MHz 96 khz (integrated soundcard) 0/1 USB Yes Yes? $150 ( 120;[1] converted 2012-09-03) http://o28.sischa.net/fifisdr/trac SDR-IQ PnP 0.1 khz 30 MHz 66.666 MHz 1/1? USB Yes Yes Yes $525 http://www.rfspace.com/rfspace/sdr-iq.html SDR-IP PnP 0.1 khz 34 MHz 80.0 MHz 1/1? Ethernet Yes Yes Yes $2999 http://www.rfspace.com/rfspace/sdr-ip.html NetSDR PnP 0.1 khz 34 MHz 80.0 MHz 0/1? Ethernet Yes Yes Yes $1,450 http://www.rfspace.com/rfspace/netsdr.html SDR-1 Kit and pre-built 530 khz 30 MHz up to 192kHz depending on soundcard 0/1 USB Yes No No $200 http://www.electronicsisfun.com/sdr-1/ website is gone Elektor SDR Kit and pre-built 30 khz 30 MHz Soundcard ADC: 48, 96, and 192 khz 0/1 USB Yes Yes Yes $145 http://www.elektor.com/magazines/2007/may/software-defined-radio.91527.lynkx Elektor AVR SDR Kit and pre-built??????? $160 http://www.elektor.com/magazines/2012/march/avr-software-defined-radio-%281%29.2084135.lynkx DRB 30 Pre-built 30 khz 30 MHz External ADC required (I/Q output)? LPT parallel port Up to XP?? $390 http://www.nti-online.de/edirabox.htm
Goedkope Hardware DABsticks: Downconversie van 24.. 2000 Mhz, per Hz instelbaar Interne AD converter Veel (schema's voor) upconverters (Ne62/605) voor 0.. 50 MHz ==> 100.. 150 Mhz Softrock, PappRadio (0.. 30 Mhz, 0.. 210 Mhz, 85 Euro) Elektor (0.. 30 Mhz, ca 100 Euro) PmSDR (0.. 55 Mhz, 0.. 165 Mhz, 250 Euro) En nog vele anderen
Een Radio in Software
Basis softwarecomponenten Aansturen hardware AD/DA handling voor input/output (soundcard) Frontend processing: Filters en FFT's Mengtrappen Versterker (incl. AGC) Baseband processing: Van waves naar bits Van bits naar data Van data naar output Control GUI met scopes, metertjes en knoppen
Externe bibliotheken voor Linux EN Voor hardware control: Windows Winrad compatible dll's voor Windows Aanpassingen voor Linux: Kainka had een open source Pascal prog voor de elektorkaart Voor de Si570 aansturing van pmsdr: software van Gerrit Polder, PA3BYA + bestaande software van pmsdr zelf Voor de DABsticks: osmocom Voor de Mirics: gebaseerd op Miroslav Slugen Voor geluidskaart: portaudio o.i.d Voor usb: libusb Qt, Qwt voor GUI achtige dingen FFTW voor FFT's Samplerate en libsndfile voor filehandling
Software Winrad: een soort oervader voor Windows software voor SDR Connectie met devices via dll.s, min of meer de standaard Afgeleiden zijn (oa): WinRadHD HDSDR Rocky SDR# Flex Radio SDR-RADIO.com WRPLUS PowerSDR-SR40 Perseus SDR software En nog veel meer
Software (II) Bijzonder is Gnu Radio Een generieke infrastructuur met honderden componenten om alle mogelijke vormen van telecomapplicaties samen te stellen Componenten voor control, frontend processing and baseband processing Wijd verbreid in de research wereld USRP is een hardware device
Samples en de Computer Input via stereo-soundcard: 48-192K I component via left, Q component via right Samennemen tot value type complex Aantal bits bepaalt precisie: 6 db per Bit Clock wel eens een probleem Jitter -> niet gebalanceerde I/Q waarden Snelheid: 96000 of 96001? Programmatische ondersteuning Portaudio (en anderen) bieden een tamelijk eenvoudige C gebaseerde API, uniform over windows, Linux en Osx.
Wat als de samples binnen zijn? Samples zijn niet meer (of minder) dan getalwaarden en dus kan je Bewaren in geheugen en opslaan in bestanden Alle mogelijke berekeningen: Optellen en aftrekken Vermenigvuldigen met reele getallen (versterken en verzwakken, geen vermogensversterking!!!). Precisie is aandachtspunt!! Vermenigvuldigen met andere samples (met andere complexe getallen): mixen Integreren (optellen) en differentieren (aftrekken) Weer naar een geluidskaart (output) sturen
Oscillatoren en mengtrappen Oscillator in Software: Fase = fasehoek * 2 * PI / sampling speed OscillatorSample = Complex (cos (Fase), sin (Fase)) Fasehoek = (Fasehoek + gekozen frequentie) % samplingspeed Mengtrap in software: Outputsample = OscillatorSample * inkomend sample Met F1,complex signaal, O1, een complex oscillatorsignaal geeft F1 * O1 altijd een somsignaal
Filters Filters halen informatie/data weg van een samplestroom door slim data te middelen: Bijvoorbeeld: output = (s1 + s2 + s3) / 3 Of: output = 0.9 * s1 + 0.1 * output Zie bijvoorbeeld: What every engineer should know about DSP, Steven Smith
Filters (II) Finite Impulse Response filters: Een gemiddelde bepalen van product van een aantal gegeven parameters en een aantal inkomende samples (convolutie) Altijd stabiel, wel hoge ordes nodig voor goede steilheid Max demping ca 65 db, afh van modelkeuze Bekende modellen: Hanning, Hamming, Blackman, Kaiser Infinite Impulse Response filters: Een gemiddelde bepalen van product van een aantal gegeven parameters, een aantal inkomende samples en een aantal eerder berekende filterwaarden. Veel lagere ordes brengen goede steilheid kan (numeriek) instabiel worden Bekende modellen: butterworth, chebyshev, elliptic
11-de orde filters
Filters in de sdr-j SW FFT filter voor selectie subband (511 taps) Lowpass filter lagere orde bij decimeren Tweede filter (511 taps) voor selectie usb/lsb etc Decoder filters TIJD VOOR FILTERDEMO
Output frontend = input decoder Een stroom samples, naar keuze 6 12 Ks/s Zo gekozen dat decimeren met geheel getal kan Gefilterd!!! Koppeling decoders en frontend zo los mogelijk, klaar voor verdere decodering Analoog (am, fm, ssb) CW Een aantal andere modes (B Q)Psk, mfsk, rtty, hell, amtor (b),...
AM Detectie Zero IF Elimineren van de omhullende (envelope) door sqrt (I ^ 2 + Q ^ 2)
SSB decoderen USB (LSB) decoding is eigenlijk het herstellen van het complete signaal door een 90 graden in fase gedraaid signaal bij het reele input signaal op te tellen (af te trekken) 90 graden draaien: Hilbert filter Een Hilbert filter is een speciaal (maar niet ingewikkeld) FIR filter.
CW decoderen We filteren wat We tellen het aantal samples met een abs waarde groter dan een drempel We schatten continu de lengte van een dot en een dash in samples Als we de letterscheiding ook goed schatten is het terugkrijgen van letters eenvoudig
Decoderen van RTTY We weten dat de fasehoek tussen opvolgende samples groter is als de frequentie hoger is Dus weten we welke samples bij een mark en welke bij een space horen en kunnen we de marks en spaces bepalen We kunnen zelfs de freq offset bepalen
Psk decoderen We weten hoeveel samples en in een bit gaan. We pakken twee bits en synchronizeren daarop We kijken naar de fase(sprongen) om de bits te bepalen Verder: digitale bewerking van de bitrij
Toekomst De wereld wordt steeds meer digitaal: Experimenteren met de PC blijft leuk Moderne PC kan DAB (2048000 samples/sec, 100 FFT's per seconde, etc) goed aan Met Mirics tot >> 6 Ms MicroPC's, Raspberry etc: software moet daar zeker naar geporteerd worden (DAB draait zeker niet!!) Ofdm voor amateurbanden? Bestaat al wel, biedt zeker perspectieven Belangrijkste is dat het leuk hobbyen blijft.
Over de software? Hoeveel software? Meeste software zit in niet-signaalverwerkende delen, bijv. Control, spectrumscopes aansturen, e.d.: Pmsdr control 1800 regels Dabstick 940 regels (gebruikt bestaande lib) Scopes ca 1000 regels Filters: paar honderd regels C++ FFT: geleend van FFTW Oscillator: 10 regels, een PLL gemiddeld 20 regels AM decoder (incl ssb) 100 regels, Rtty-decoder 706 regels, (B Q)psk 670 regels FM decoder: 7500 regels overall, DAB decoder: ca 9500 regels overall Dus al met al: valt wel mee!!!
Dank U