GNU Radio – Learning the Basics 2/3
Welkom terug bij het 2e deel van GNU Radio. In het eerste deel hebben we in vogelvlucht naar GNU Radio gekeken en de eerste tips besproken. Je weet nu hoe GNU Radio eruit ziet en wat het basisprincipe is. In dit deel gaan we dieper in op de blokken die GNU Radio ons biedt. Welke blokken zijn er en wat kun je ermee doen.
GNU Radio heeft maar liefst 400+ blokken. Het is dus onmogelijk om deze allemaal te bespreken. V.a. versie 3.7 zijn de blokken op een nieuwe en overzichtelijkere manier gesorteerd. Let wel op. Als je GNU Radio 3.6 of ouder gebruikt en je eigen scripts / programma’s op basis van 3.6 gemaakt zijn dan is updaten naar versie 3.7 niet zo eenvoudig. Python scripts zijn simpel aan te passen (middels zoek en vervang acties van oude naar nieuwe code). Als er C++ bij komt kijken dan zal het e.e.a. echt herschreven moeten worden.
GNU Radio Blok Categorieën
In GNU Radio kennen we de volgende blok categorieën:
- Audio
Onder de audio categorie vinden diverse belangrijke blokken waaronder diverse audio decoders en encoders. Denk dan CODEC2, CVSD, g711, g723, GSM full-rate en ulaw. Maar hier vinden we ook de Wav File Sink en Wav File Source. - Boolean Operators
Onder deze categorie vinden bepaalde (boolean) operators. Deze operators doen dus iets als aan een bepaalde voorwaarde voldaan is. Zo vinden we de operators And, And Const, Not, Or en Xor terug binnen deze categorie. - Byte Operators
Hier vinden we diverse blokken die ons helpen om een stream van packed bytes te converteren naar unpacked bytes en visa-versa. - Channel Models
Hier vinden we blokken “channel” modellen te maken. Met deze channel modellen kunnen diverse kanalen geëvalueerd, ontworpen of getest worden. Denk hierbij aan signalen als waveforms en algoritmes. - Channelizers
De channelizers zorgen ervoor dat complexe input omgezet worden naar kanalen van gelijkwaardige bandbreedte. Hier vinden we o.a. het Polyphase Cnannelizer, Polyphase Decimator en het Frequency Xlating FFT Filter. - Coding
Onder de “Coding” sectie vinden we de “Scrambler” en “Descrambler”. Deze blokken gebruiken we om een unpacked binary stream te (de)scrambelen middels een LFSR (Linear Feedback Shift Register). - Control Port
De Control Port categorie biedt verschillende blokken om waardes tussen blokken te monitoren en exporteren. - Debug Tools
De Debug Tools bevat diverse blokken om data te debuggen. Welke blokken je gebruikt is afhankelijk van je flowgraph. - Deprecated
Zoals de naam al aangeeft bestaat deze categorie uit blokken die vervangen zijn voor andere blokken. Deze blokken zijn eigenlijk niet meer nodig in nieuwe flowgraphs maar bestaan nog zodat oude flowgraphs blijven functioneren. - Digital Television
De Digital Television categorie bevat diverse kanaalblokken voor digitale tv signalen zoals DVB, ITU-T en ATSC. - Equalizers
Een equalizer wordt gebruikt om een signaal te versterken of te verzwakken. In deze categorie vindt je o.a. CMA, Kurtotic en LMS DD equalizers. - Error Coding
Error Coding is een grote categorie met vele soorten blokken. De categorie bestaat voornamelijk uit encoders en decoders. Zo zal de BER encoder de bit rate error tussen 2 datastromen berekenen en zijn er encoders en decoders om datastromen te synchroniseren of juist asynchroniseren. - FCD
Onder FCD vinden we slechts 1 blok, namelijk de Fancube Dongle Source. Dit blok wrapt de FUNcube Dongle USB-audio-ingang en de USB-HID control interface heel handig in één GNU Radio bron blok. - File Operators
Onder deze categorie vinden we diverse “bestands” gerelateerde blokken. Denk aan diverse bron- en source blokken. Zo kun je de source blokken gebruiken om bestanden in te lezen in GNU Radio. De sinks kunnen gebruikt worden om de output data op te slaan in het gewenste formaat. - Filters
Een belangrijke categorie met belangrijke blokken. Filters worden gebruikt om de data te filteren. Zo vinden we een FFT, Delay, High-Pass en Low-Pass filter waarmee we de data kunnen modificeren naar persoonlijke wens. - Fourier Analysis
De Fourier Analysis blokken analyseren de blokken op een speciale wiskundige manier. Met de Fourier Analysis kunnen oscillerende componenten ontleed worden. - GUI Widgets
De GUI Widgets kennen 2 subcategorieën, namelijk QT en WX. De blokken die je gebruikt in je flowgraph moeten overeenkomen met de “Generate Options” setting in het “Options Block”. Je kiest dus voor QT of WX. De default in GNU Radio is QT. Met de GUI componenten kun je een grafische interface de settings aanpassen van het signaal. Denk aan sliders, checkboxen en textboxen. - Impairment Models
Onder de Impairment Models vinden we diverse blokken waarmee we ruis kunnen genereren of waarmee we bepaalde offsets maken. Deze blokken zijn dus speciaal voor het creëren van “signaalverstoringen”. - Instrumentation
Ook onder “Instrumentation” hebben we weer de keuze tussen QT en WX blokken. Maak dus hierin de gepaste keuze die overeenkomt met je setting in het “Options Block”. Onder Instrumentation staan allemaal verschillende soorten “sink” blokken waarmee we het signaal op diverse manieren kunnen bekijken. Denk aan een histogram, waterfall, constellation en frequency weergave. - Level Controllers
De Level Controllers categorie bestaat uit blokken die direct impact hebben op het signaal en met name op het volume. Denk aan mute en squelch en threshold blokken. - Math Operators
De Math Operators voeren een bepaalde calculatie uit op het signaal. Zo kun je met deze blokken het signaal verdelen, max vectors instellen, signalen verdubbelen etc. - Measurement Tools
De measurement blokken worden zoals de naam al aangeeft gebruikt om bepaalde metingen uit te voeren. Deze metingen kunnen gebruikt worden om (sub) signalen te controleren en beheren. - Message Tools
Hierin vinden we blokken die signalen of data van deze signalen doorsturen naar de “message queue” of omzetten naar een “stream of items”. - Misc
Onder de “miscellaneous” categorie vinden we diverse soorten blokken. Interessante blokken zijn o.a. de null sink, delay, nop, import, virtual source en het Python block. - Modulators
Onder de modulators vinden we voornamelijk blokken die een signaal van type A omzetten naar type B (of visa vera bij een demodulator). - Networking Tools
Hier vinden we uiteraard netwerk blokken. Denk aan blokken om byte streams om te zetten naar UDP pakketten of het maken van PDU sockets zodat een host kan connecten. - NOAA
NOAA blokken staan voor “National Oceanic and Atmospheric Administration” blokken. Deze blokken kun je dus gebruiken om signalen van NOAA te ontvangen en bekijken. - OFDM
OFDM staat voor “Orthogonal Frequency-Division Multiplexing”. Met deze blokken kunnen we dus digitale signalen omzetten in frequenties en visa versa. Op deze manier kunnen we dus b.v. signalen van digitale TV ontvangen maar ook uitzenden. - Packet Operators
Onder de Packet Operators vinden we vooral blokken om pakketjes te maken of modificeren. Denk aan verschillende header, framer en deframer blokken. - Pager
De Pager categorie bevat een FLEX radiopager receiver/demodulator en een slicer.FLEX pager towers zenden signalen uit tussen de 929 en 932 MHz. - Peak Detectors
De peak blokken worden gebruikt om signaal pieken te detecteren en markeren. Ook is er een plateau detector (midden) en burst tagger aanwezig. - Resamplers
Hier vinden we een aantal audio resamplers zoals een fractional, polyphase en rational resampler. - Stream Operators
Stream operators zijn blokken die een gedeelte of volledige signaalstroom beheren. Denk aan signaal herhaling (repeat), interleaving of stream convertors. - Stream Tag Tools
Tagged Streams (streams voorzien van metadata) worden beheerd door blokken in deze categorie. - Symbol Coding
Differential de- en encoders, constellation (soft) decoder, binary slicer en andere blokken vindt je in de Symbol Coding categorie. - Synchronizers
Synchronizers worden gebruikt om 1 of meerdere signalen te synchroniseren met elkaar of een externe bron. Deze blokken zoals clock recovery mm, correlate and sync en de polyphase clock sync vindt je in deze categorie. - Trellis Coding
In telecommunicatie is Trellis modulatie (ook bekend als Trellis Coded Modulation ofwel TCM) een modulatietechniek die informatie met hoog rendement over bandbegrensde kanalen zoals telefoonlijnen uitzendt. Verschillende blokken zoals PCCC, SCCC en Trellis en- & decoders vindt je binnen deze categorie. - Type Converters
Data kan verwerkt en overgedragen worden in verschillende formaten zoals Complex, Char, Float, Int. Met de blokken in deze categorie kunnen we data van type A omzetten naar type B. - UHD
Deze blokken worden gebruikt om te zenden en ontvangen via producten uit de Ettus Research, LLC product line en andere producten. UHD staat voor USRP Hardware Driver. USRP staat voor Universal Software Radio Peripheral. - Variables
In de “variabele” categorie vinden we diverse blokken die te maken hebben met variabele. Denk aan gewone variabelen, grafische variabelen en probe variabelen. - Video
Onder video vinden we 1 block, namelijk de Video SDL Sink. Deze sink zet te data om in een video (on-screen beeldscherm) via libsdl. De video kan verschillende tinten bevatten afhankelijk van het type. - Waveform Generators
Waveform generators zijn blokken welke verschillende soorten radiogolven simuleren. Deze worden vaak gebruikt als brondata. Denk aan een signal source (signaal met int. output), constant source (1 bron) en noise source (random ruis). - ZeroMQ Interfaces
Onder deze laatste categorie vinden we verschillende ZeroMQ source en sink blokken. ZeroMQ is een high-performance asynchrone messaging bibliotheek, gericht op gebruik in gedistribueerde of gelijktijdige applicaties. ZeroMQ biedt in een boodschap wachtrij, maar in tegenstelling tot-bericht georiënteerde middleware kan een ZeroMQ systeem draaien zonder een speciale message broker. Er zijn sources en sinks voor PUB, PULL, PUSH, REP, REQ en SUB signalen.
Nu we een globale indruk hebben van de blokken die zich in de GNU Radio bibliotheek bevatten kunnen we zelf een flowgraph gaan maken.
RTL-SDR Dongel
De flowgraph zelf maken we in het volgende hoofdstuk. Dit gaan we echter doen met de RTL-SDR Dongel.
De RTL-SDR Dongel gebruikt een DVB-T TV tuner welke gebaseerd is op het RTL2832U chipset. DVB-T TV tuner dongle based on the RTL2832U chipset is waarschijnlijk de goedkoopste manier om kennis te maken met de wereld van Software Defined Radio. De “RTL-SDR” dongel is een RealTec product en te koop via E-bay en op vele andere plaatsen. Een RTL-SDR dongel kost meestal rond de 20 euro.
De RTL-SDR dongel kan gebruikt worden om te luisteren naar radioverkeer tussen de 22 en 2200 MHz frequenties. Denk aan 112 diensten, luchtverkeer, radio etc. Er zijn echter nogal wat dongels met een verschillende tuners. Welke frequentie range je dus werkelijk kunt benaderen is afhankelijk van de tuner in je dongel:
- Elonics E4000 – 52 – 2200 MHz met een gat tussen de 1100 MHz en 1250 MHz (varieert)
- Rafael Micro R820T – 24 – 1766 MHz (Kan verbeterd worden tot ~13 – 1864 MHz met experimentele drivers)
- Fitipower FC0013 – 22 – 1100 MHz
- Fitipower FC0012 – 22 – 948.6 MHz
- FCI FC2580 – 146 – 308 MHz and 438 – 924 MHz (gat tussen 308 en 438 MHz)
*bron: http://osmocom.org/projects/sdr/wiki/rtl-sdr
De maximale samplerate is 3.2 MS/s (mega samples per second). Echter is de dongel in deze status niet stabiel en zullen samples “gedropt” worden. De maximale stabiele stand van de RTL-SDR is 2.4 MS/s (of iets hoger indien aangesloten op een USB3 poort). Dit wil zeggen dat de RTL-SDR dongel 24000000 (24 miljoen) samples per seconde kan verwerken. Een sample is een analoog signaal dat omgezet wordt naar een string van nummers. Elk nummer geeft de amplitude aan van het analoge signaal tijdens de momentopname. Elk nummer is dan ook een sample.
Om de RTL-SDR te kunnen laten werken met GNU Radio zijn een aantal stappen benodigd. Deze stappen zijn erg afhankelijk van het OS waarop gewerkt wordt. Linux Pentoo zal de RTL-SDR dongel standaard detecteren maar op andere OS systemen moeten zullen de juiste drivers geïnstalleerd moeten worden. Test de dongel eerst uit met andere software zoals SDR of SDR-Sharp. Als deze hierin functioneert kunnen we de dongel ook gebruiken binnen GNU Radio.
Einde deel 2
Dit is het einde van mijn 2e GNU Radio post. Na het lezen van dit 2e gedeelte hoop ik dat je al een veel beter idee hebt van alle blokken de GNU Radio Library heeft en hoe deze library is opgebouwd. In het volgende deel gaan we eindelijk iets bouwen. Zin in!