GNU Radio: A rádiófrekvenciás világ felfedezésének eszközei

Hasonló dokumentumok
Az 1. ábrán egy általános programrádió blokkdiagramja látható.

X. ANALÓG JELEK ILLESZTÉSE DIGITÁLIS ESZKÖZÖKHÖZ

Analóg elektronika - laboratóriumi gyakorlatok

Nagyfrekvenciás rendszerek elektronikája házi feladat

ÖNÁLLÓ LABOR Mérésadatgyűjtő rendszer tervezése és implementációja

Szoftver rádió (SDR) rádióamatőröknek. Dr. Selmeczi János HA5FT

Analóg elektronika - laboratóriumi gyakorlatok

Programozó- készülék Kezelőkozol RT óra (pl. PC) Digitális bemenetek ROM memória Digitális kimenetek RAM memória Analóg bemenet Analóg kimenet

A digitális analóg és az analóg digitális átalakító áramkör

Új kompakt X20 vezérlő integrált I/O pontokkal

Műszertechnikai és Automatizálási Intézet MÉRÉSTECHNIKA LABORATÓRIUMI MÉRÉSEK ÚTMUTATÓ

MŰSZAKI LEÍRÁS Az I. részhez

Villamos jelek mintavételezése, feldolgozása. LabVIEW 7.1

2. gyakorlat Mintavételezés, kvantálás

Analóg digitális átalakítók ELEKTRONIKA_2

Analóg elektronika - laboratóriumi gyakorlatok

2. Elméleti összefoglaló

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

Az együttfutásról általában, és konkrétan 2.

Modulációk vizsgálata

AUTÓS MULTI-MEDIA LEJÁTSZÓ HASZNÁLATI ÚTMUTATÓ AKAI CAT-7780

USB adatgyűjtő eszközök és programozásuk Mérő- és adatgyűjtő rendszerek

Villamos jelek mintavételezése, feldolgozása. LabVIEW előadás

Analóg-digitális átalakítás. Rencz Márta/ Ress S. Elektronikus Eszközök Tanszék

A/D és D/A konverterek vezérlése számítógéppel

10.1. ANALÓG JELEK ILLESZTÉSE DIGITÁLIS ESZKÖZÖKHÖZ

RF-973 Kétirányú, 4+4 csatornás, nagy hatótávolságú átjelző rádió HASZNÁLATI ÚTMUTATÓ

Mérési jegyzőkönyv a 5. mérés A/D és D/A átalakító vizsgálata című laboratóriumi gyakorlatról

PWM elve, mikroszervó motor vezérlése MiniRISC processzoron

Iványi László ARM programozás. Szabó Béla 6. Óra ADC és DAC elmélete és használata

Első egyéni feladat (Minta)

A számítógép-hálózat egy olyan speciális rendszer, amely a számítógépek egymás közötti kommunikációját biztosítja.

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

Orvosi Fizika és Statisztika

Mintavétel: szorzás az idő tartományban

A digitális jelek időben és értékben elkülönülő, diszkrét mintákból állnak. Ezek a jelek diszkrét értékűek és idejűek.

Feszültségérzékelők a méréstechnikában

Értékelés Összesen: 100 pont 100% = 100 pont A VIZSGAFELADAT MEGOLDÁSÁRA JAVASOLT %-OS EREDMÉNY: EBBEN A VIZSGARÉSZBEN A VIZSGAFELADAT ARÁNYA 35%.

RF-973 Kétirányú, 4+4 csatornás, nagy hatótávolságú átjelző rádió HASZNÁLATI ÚTMUTATÓ

Dell Inspiron 580s: Részletes műszaki adatok

Irányítástechnika fejlődési irányai

Választható önálló LabView feladatok 2013 A zárójelben szereplő számok azt jelentik, hogy hány főnek lett kiírva a feladat

WLAN lefedettségi terv készítés - Site Survey

Mintavételezés és AD átalakítók

Kezdje itt Gyors üzembe helyezési útmutató

ISIS-COM Szolgáltató Kereskedelmi Kft. MIKROHULLÁMÚ INTERNET ELÉRÉSI SZOLGÁLTATÁS

TV Használati útmutató

Adatátviteli eszközök

Fontos biztonsági figyelmeztetések

GOKI GQ-8505B 8 CSATORNÁS KÉPOSZTÓ. Felhasználói kézikönyv

ALCOR HD-2500 KEZELÉSI ÚTMUTATÓ

Időjárásállomás külső érzékelőjétől érkező rádiójel feldolgozása

i-gondnok ház automatizálási rendszer


Erősítő tanfolyam Keverők és előerősítők

MICRO PLC PR TERMÉKKÍNÁLAT

Ipari vezérlés és automatizálás

Informatika Rendszerek Alapjai


TELEPÍTÉSI LEÍRÁS. 1. Ábra 2. Ábra. 3. Ábra. 4. Ábra

A képernyő felbontásának módosítása

1. Visszacsatolás nélküli kapcsolások

3. A DIGILENT BASYS 2 FEJLESZTŐLAP LEÍRÁSA

TRBOnet Térinformatikai terminál és diszpécseri konzol

Választható önálló LabView feladatok 2017

Kommunikáció az EuroProt-IED multifunkcionális készülékekkel

A PC vagyis a személyi számítógép

U42S Felhasználási példák Gitárjáték rögzítése

MWS-3.5_E1 pont-pont adatátviteli mikrohullámú berendezés

RFID-val támogatott eszközleltár

Választható önálló LabView feladatok A zárójelben szereplő számok azt jelentik, hogy hány főnek lett kiírva a feladat

Itt kezdje! Gyors üzembe helyezési útmutató

Dell Inspiron 560s: Részletes muszaki adatok

Digitális jelfeldolgozás

Register your product and get support at SDV5118P/12. HU Felhasználói kézikönyv

Irányítástechnika GÁSPÁR PÉTER. Prof. BOKOR JÓZSEF útmutatásai alapján

Beágyazott rendszerek fejlesztése laboratórium DSP fejlesztési technológiák

Easton420. Automata Telefon hangrögzítő. V 6.0 Telepítése Windows XP rendszerre

Dell Inspiron 560/570: Részletes muszaki adatok

Számítógép felépítése

M ű veleti erő sítő k I.

RÁDIÓS ADATGYŰJTŐ BERENDEZÉS RD01. Használati útmutató

ÁRAMKÖRÖK SZIMULÁCIÓJA

WDS 4510 adatátviteli adó-vevő

Alapvető információk a vezetékezéssel kapcsolatban

Billentyűzet. Csatlakozók: A billentyűzetet kétféle csatlakozóval szerelhetik. 5 pólusú DIN (AT vagy XT billentyűzet csatlakozó),

π π A vivőhullám jelalakja (2. ábra) A vivőhullám periódusideje T amplitudója A az impulzus szélessége szögfokban 2p. 2p [ ]

Multi-20 modul. Felhasználói dokumentáció 1.1. Készítette: Parrag László. Jóváhagyta: Rubin Informatikai Zrt.

2015 myphone. Minden jog fenntartva. myphone Iron. Kezelési útmutató

A kísérlet, mérés megnevezése célkitűzései: Váltakozó áramú körök vizsgálata, induktív ellenállás mérése, induktivitás értelmezése.

Nagy Gergely április 4.

Első sor az érdekes, IBM PC ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat

VEZETÉK NÉLKÜLI SZÍNES INFRA KAMERA DIGITÁLIS VIDEO RÖGZÍTİVEL CIKKSZÁM GP-812BF (KAMERA GP-812T, DVR GP-7301)

Laboratóriumi műszerek megvalósítása ARM alapú mikrovezérlővel és Linux-szal

PLC-K ÁLTALÁNOS FELÉPÍTÉSE

Wireless technológiák Meretei Balázs

Útmutatás és a gyártó nyilatkozata Elektromágneses kibocsátás és zavartűrés

A számítógép fő részei

Pager4 PRO - 3G.IN6.R1

FM/MW/SW1-7-MINI 9 SÁVOS DIGITÁLIS RÁDIÓ ÉBRESZTŐÓRÁVAL

Átírás:

GNU Radio: A rádiófrekvenciás világ felfedezésének eszközei A program alapú rádiók célja az, hogy a programkódot és az antennát a lehetõ legközelebbi kapcsolatba hozzák egymással. A GNU Radio mindenkinek biztosítja azokat az eszközöket, amelyek segítségével csatlakozhat a gyors processzoroknak köszönhetõ távközlési forradalomhoz. Aprogramrádió lényegében az antenna és a programkód viszonyának lehetõ szorosabbá tételét jelenti. Gyakorlatilag minden, a rádiókészülékkel kapcsolatos problémát programozási problémává alakít. Ennek a rádiónak a legfontosabb ismertetõjele, hogy egy program határozza meg az elküldött hullámformákat, és ugyancsak program végzi a fogadott hullámok visszaalakítását. Ez a mûködésmód szöges ellentétben áll a megszokott rádiókéval, amelyekben a jelfeldolgozást vagy digitális lapkákkal kiegészített vagy tisztán analóg áramkörök végzik. A GNU Radio egy szabadon hozzáférhetõ programozási eszközkészlet az említett programrádiók készítéséhez. A programrádió valóságos forradalmat jelent a rádiók tervezésében, az így létrejövõ készülékek üzem közben is változhatnak, korábban elképzelhetetlen lehetõségeket kínálva használójuknak. A programrádiók természetesen képesek mindarra, amire hagyományos társaik, de minket most sokkal inkább a programok használatából fakadó rugalmasság érdekel. A ma még igencsak korlátozott képességû, mindig csak egy adott feladatra használható készülékek helyett a közeli jövõben többfunkciós távközlési eszközöket fogunk használni. Képzeljünk el egy olyan készüléket, amely mobiltelefonként lehetõvé teszi GPRS alapú kapcsolatok létesítését, de a 802.11 Wi-Fi és a 802.16 WiMax szabvánnyal valamint a mûholdas összeköttetésekkel is megbirkózik hogy a jövõbeli új megoldásokról most ne is beszéljünk. A legérdekesebb mindebben, hogy központok nélküli távközlési rendszereket lehet majd építeni. Ha megnézzük a meglévõ rendszereket, azt látjuk, hogy túlnyomó részük infrastruktúra alapú. A jelenlegi rádió- és TV-adások egyirányú csatornákon jutnak el hozzánk, szigorúan szabályozzák õket, és az általuk szolgáltatott tartalmat számos szervezet ellenõrzi. A mobiltelefonok ugyan kényelmessé teszik életünket, ám az általuk támogatott szolgáltatások köre a szolgáltató a vállalat érdekeit szolgálja, és nem a mienket. A központosított rendszerek megnehezítik az újdonságok bevezetését. Ha ezt nehezen tudjuk elképzelni, akkor gondoljunk csak az internetre, és máris helyben vagyunk. A mobiltelefonnak nem kellene tehetetlenül csüngenie vételi RF elõtag adási RF elõtag vételi útvonal adási útvonal 1. ábra Általános programrádió blokkdiagramja Programkód Programkód a szolgáltató sokszor korlátozottan elérhetõ, korlátozott szolgáltatásokat nyújtó hálózatán, hanem igazán okos eszközzé válhatna. A hálózatot maguk a felhasználók tulajdonában lévõ készülékek alkotnák. A készülékek egymás között hálót hoznának létre, egyeztetnék a háttérszolgáltatásokat; és minden újszerû megoldásra, szolgáltatásra és alkalmazásra nyitottak lennének. Blokkdiagram Az 1. ábrán egy általános programrádió blokkdiagramja látható. Ha meg akarjuk érteni a programrész mûködését, elõször a szerkezet jellemzõit kell gyorsan áttekintenünk. Ha megvizsgáljuk az 1. ábra vételi útvonalát, akkor egy antennát, egy rejtélyes RF elõtagot, egy analóg-digitális átalakítót () és egy programkódot láthatunk. Az analóg-digitális átalakító köti össze a folytonos analóg jelek és a programból is kezelhetõ, diszkrét digitális minták világát. Az -k két fõ jellemzõje a mintavétel gyakorisága és a dinamikatartomány. A mintavételi gyakoriság azt mutatja meg, hogy az másodpercenként hányszor méri meg 68 Linuxvilág

1. kódrészlet Hello Világ! (tárcsahang megszólaltatása) #!/usr/bin/env python from GnuRadio import * def build_graph (): sampling_freq = 32000 ampl = 8192 fg = gr_flowgraph () src0 = GrSigSourceS ( sampling_freq, GR_SIN_WAVE, 350, ampl) src1 = GrSigSourceS ( sampling_freq, GR_SIN_WAVE, 440, ampl) sink = GrAudioSinkS () fg.connect (src0, sink) fg.connect (src1, sink) return fg if name == main : fg = build_graph () fg.start () fork hívásokkal és visszatérés # szál(ak) létrehozása raw_input ( A kilépéshez nyomd le az Enter gombot: ) fg.stop () az analóg jelet. A dinamikatartomány a legkisebb és a legnagyobb megkülönböztethetõ jel közötti tartományt jelenti, amely az digitális kimenetének és az átalakító kialakításának függvénye. Egy nyolcbites átalakító például legfeljebb 256 jelszintet képes ábrázolni, míg egy 16 bites átalakító már 65536-ot. Általában elmondhatjuk, hogy az átalakító fizikai kialakításától és árától függ, hogy mekkora kompromisszumot kell kötnünk a nagyobb mintavételi gyakoriság vagy a szélesebb dinamikatartomány tekintetében. Mielõtt elmerülnénk a programozási kérdésekben, nem árt némi elméleti alapozást. 1927-ben a svéd fizikus és villamosmérnök Harry Nyquist fogalmazta meg azt a szabályt, amely szerint analóg-digitális átalakításnál az mintavételi frekvenciájának legalább kétszer akkorának kell lennie, mint a mintavételezett jel sávszélességének. Ellenkezõ esetben ugyanis a jel nem állítható hibátlanul helyre, azaz jeltorzulás történik. Hasonló jelenségnek lehetünk tanúi, amikor a régi westernfilmekben úgy látjuk, mintha a lovaskocsik kerekei hátrafelé forognának. Ilyenkor a kamera mintavételi gyakorisága nem volt elég nagy ahhoz, hogy egyértelmûen rögzíteni tudja a küllõk állását. Tegyük fel, hogy a jelek felülrõl korlátosak, vagyis a minket érdeklõ sávszélesség 0 és fmax közötti. Ilyenkor a Nyquistszabály szerint a mintavételi frekvencia értéke legalább 2* fmax kell legyen. Igen ám, de ha az -nk 20 MHz-en fut, akkor hogyan fogjuk hallgatni a 92,1 MHz-en sugárzott rádióadást? Pontosan ezért van szükség az RF elõtagra. A vevõoldali RF elõtag a bemenetére adott frekvenciákat a kimeneten alacsonyabb tartományba tolva adja ki. Az RF például használható arra is, hogy a 90-100 MHz tartományba esõ jeleket a 0-10 MHz tartományba tegyük át. A legtöbb esetben elég az is, ha az RF elõtagot egyfajta fekete dobozként kezeljük, amelynek vezérlõ bemenetén csupán a megváltoztatandó frekvenciatartomány közepét kell megadnunk. Tényleges példaként említhetném azt a kábelmodemes vevõegységet, amelyet mi is sikerrel alkalmaztunk, és amely az 50-800 MHz tartomány egy 6 MHz-es szeletét teszi át az 5,75 MHz-es közepû tartományba. A kimeneti tartomány középsõ frekvenciáját középfrekvenciának (intermediate frequency, röviden IF) nevezzük. Ha a végletekig egyszerûségre törekszünk, az RF elõtagot akár el is hagyhatjuk. Van olyan, akinek a GNU Radio próbálgatása közben sikerült AM és rövidhullámú adásokat hallgatnia úgy, hogy egy száz méteres kábelt közvetlenül egy 20 millió minta/másodperc mintavételû -hez csatlakoztatott. Lássuk a programokat! A GNU Radio tartalmaz egyrészt elemi jelfeldolgozó függvényeket, másrészt ezek egységes alkalmazássá gyúrásához kiegészítõket. A programozó a rádiót úgy állítja össze, mintha egy gráfot rajzolna meg. A gráf pontjai az elemi jelfeldolgozó függvények, az élek pedig a köztük folyó adatáramlást jelképezik. A jelfeldolgozó függvények C++ nyelven készültek. A függvények lényegében végtelen, a bemenetük felõl a kimenetük felé haladó folyamokat alakítanak át. A függvények fontos jellemzõje bemeneteik és kimeneteik száma, illetve az ezeken keresztülhaladó adatok típusa. Leginkább kisméretû egész (short), lebegõpontos (float) és komplex mennyiségeket használunk. Bizonyos jelfeldolgozók csak kimenettel vagy csak bemenettel rendelkeznek, ezek adatforrásként és -nyelõként viselkednek. A források közt találunk olyat, amely fájlból vagy -rõl olvas, a nyelõk pedig képesek fájlba, digitális-analóg átalakítóra () vagy grafikus kijelzõre írni. A GNU Radio körülbelül száz elemi jelfeldolgozó függvényt tartalmaz, de újak készítése sem ördöngösség. A gráfok alapvetõen C++ nyelven állíthatók össze és futtathatók, de mûködõ egység összeállítása Python alatt a legegyszerûbb. Az 1. kódrészlet a Hello Világ GNU Radio-féle változata. Két szinuszhullámot állít elõ, majd a hangkártyára küldi õket, az egyiket a bal, a másikat a jobb csatornára. Elsõ lépésünk egy áramlási gráf (flow graph) létrehozása, ebbe kerülnek majd az elemi jelfeldolgozó függvények és a közöttük fennálló kapcsolatok. A két szinuszhullám a GrSigSourceS hívások révén jön létre. Az S utótag jelzi, hogy a forrás short kimeneteket ad. Az egyik szinuszhullám 350, a másik 440 Hz-es frekvenciájú. Ha együtt szólaltatjuk meg õket, mintha az Amerikában megszokott tárcsahangot hallanánk. A GrAudioSinkS olyan nyelõ (sink), amely bemenetét (általában egy vagy két short típusokat tartalmazó folyam) a hangkártyára írja ki. A három elemi jelfeldolgozó függvényt az áramlási gráf connect függvényével kapcsoljuk össze. www.linuxvilag.hu 2004.július 69

Amikor készen áll a gráf, elindítjuk. Astart hívás hatására egy vagy több szál jön létre (fork hívásokkal), ezekben futnak a gráf által megadott számítások; a vezérlés pedig azonnal visszakerül a hívóhoz. Ilyenkor egyszerûen csak várjunk, amíg a felhasználó le nem nyomja valamelyik billentyût. Teljes értékû FM vevõ A 2. kódrészlet egy leegyszerûsített, de mûködõ FM vevõ összeállítását szemlélteti. Magába foglalja az RF vezérlését és a szükséges jelfeldolgozókat is. Ebben az esetben egy kábelmodemes vevõegységbõl épített RF elõtag használatáról és egy 20 millió minta/másodperces analóg-digitális átalakító használatával számoltunk. Ahogy a Hello Világ!-os példánál, itt is, létrehozzuk a gráfot, összekötjük az elemi jelfeldolgozókat, majd kiadjuk az indulási parancsot. Forrásunk ebben az esetben a nagysebességû, a GrHighSpeed. Ezt a GrFreqXlatingFIRfilterSCF követi, ami egy véges impulzusválaszú (FIR) szûrõ. Ez választja ki a kívánt FM állomást, majd alakítja alapsávúra (0Hz, DC) a jelet. A 20 millió minta/másodperces átalakító és a kábelmodemes vevõegység használatával nagyjából a teljes tartomány egy 6 MHz-es szeletét vesszük. Ebbe a szeletbe tíz vagy akár több FM állomás is eshet, az általunk kívántat a GrFreqXlatingFIRfilterSCF segítségével választhatjuk ki. Most azt az állomást választjuk, amely az RF elõtag IF értékének közepére esik (5,75MHz). A szûrõ kimenete komplex minták folyama, 160 ezer minta/másodperc gyakorisággal. A komplex alapsávi jelet a GrQuadratureDemodCF-fel etetjük meg, ez végzi a tényleges FM demodulációt. A GrQuadratureDemodCF a szomszédos komplex minták szögeinek kivonásával végzi munkáját, lényegében differenciálva a frekvenciát. A GrQuadratureDemodCF kimenete tartalmazza a bal plusz jobb mono hangjelet, a 19 khz-es elválasztójelet, a 38 KHz-es közepû bal mínusz jobb sztereojelet, illetve az e fölötti alhordozókat. Végsõ lépésként a jelet keresztülküldjük egy aluláteresztõ szûrõn, majd megtizedeljük, miközben csak a bal plusz jobb hangsávot õrizzük meg. A végfok a hangkártya, 32000 minta/másodperc mintavételi gyakorisággal. A jelfeldolgozással kapcsolatosan a GNU Radio Wikiben lehet további tudnivalókat találni. Grafikus felületek A GNU Radio alkalmazások grafikus felületei Python alatt készülnek, a kezelõfelületek tetszõleges, Python alól elérhetõ eszközkészlettel összeállíthatók. A géptípusok közötti hordozhatóság elõsegítése miatt mi a wxpython használatát javasoljuk. A valós idejû C++ folyamatgráf és a Python-világ közötti kapcsolattartáshoz a GNU Radio megfelelõ folyamatközti adattovábbításra alkalmas elemi eljárásokat biztosít. Gépkövetelmények A GNU Radio csaknem hardverfüggetlen. Napjaink sok gigahertzes, egyciklusú lebegõpontos egységgel felszerelt szuperskalár processzorai révén még asztali számítógépekkel is elég komoly digitális jelfeldolgozást lehet végezni. Egy 2 GHz órajelû Pentium vagy Athlon processzor 2 milliárd lebegõpontos FIR mintát tud kiértékelni másodpercenként. Majdnem kizárólag programokra alapozva olyan távközlési rendszereket építhetünk, amilyenekre néhány évvel ezelõtt még csak nem is gondolhattunk. Vételi Adási FX2 USB 2 vezérlõ 2. ábra Általános programrádió-periféria, USRP Mintavétel gyakorisága Bemenet az -rõl Bemenet az -rõl NCO szinusz és koszinusz jelgenerátor FPGA Középfrekvencia: -fs/2 +fs/2 Tizedelõ aluláteresztõ szûrõ A Universal Software Radio Peripheral A legjobb megoldás a Universal Software Radio Peripheral (általános programrádió-periféria, USRP). A 2. ábrán az USRP blokkdiagramja szerepel. Az USRP Matt Ettus agyszüleménye, lényegében egy rendkívül rugalmas, USB csatolós készülék, amely képes a rádiófrekvenciás világhoz kapcsolni számítógépünket. Az USRP egy kisméretû alaplapot tartalmaz, amely legfeljebb négy darab 12 bites 64 millió minta/másodperces -t, négy 14 bites, 128 millió minta/másodperces -t, egy egymillió kapus, programozha- Sávszélességtizedelési tényezõ 3. ábra Digitális lefelé transzponáló elem Vételi Adási 16 bites adatátvitel a gazdagép felé USB-n keresztül A számítási igény természetesen attól függ, hogy pontosan mit akarunk csinálni, de egy 1-2 GHz-es gép 256 MB memóriával elég kell legyen. Természetesen az analóg világ és a számítógép kapcsolatát is meg kell valahogy teremtenünk. Ha nem akarunk túl sokat költeni, egy jobb minõségû, 96 khz-es, 24 bites hangkártya megteszi, de végsõ esetben gépünk beépített hangkártyáját is használhatjuk. Bármelyik megoldást is választjuk, viszonylag keskeny sávban fogunk tudni jelfeldolgozást végezni, és valamilyen keskenysávú RF elõtagot is be kell szereznünk. Egy másik megoldás készen kapható, nagysebességû, PCI foglalatú analóg-digitális átalakító kártya beszerzése. Ezek akár 20 millió mintát is képesek elõállítani másodpercenként, ám áruk egy teljes számítógépével vetekszik. Az ilyen nagysebességû kártyákhoz kábelmodemes vevõegységet érdemes RF elõtagként illeszteni. 70 Linuxvilág

#!/usr/bin/env python # egyszerû FM vevõ from GnuRadio import * # # gr_flowgraph visszaadása # def build_graph (IF_freq): input_rate = 20e6 CFIR_decimate = 125 RFIR_decimate = 5 fm_demod_gain = 2200 2. kódrészlet Egyszerû FM vevõ width_of_transition_band = audio_rate / 32 audio_coeffs = gr_firdes.low_pass ( 1.0, # erõsítés quad_rate, # mintavételi gyakoriság audio_rate/2 - width_of_transition_band, width_of_transition_band, gr_firdes.win_hamming) # bemenet: float; kimenet: short audio_filter = GrFIRfilterFSF (RFIR_decimate, audio_coeffs) final_sink = GrAudioSinkS () quad_rate = input_rate / CFIR_decimate audio_rate = quad_rate / RFIR_decimate volume = 1.0 src = GrHighSpeedSourceS (input_rate) fg = gr_flowgraph () fg.connect (src, chan_filter) fg.connect (chan_filter, fm_demod) fg.connect (fm_demod, audio_filter) fg.connect (audio_filter, final_sink) # FIR szûrõminták számítása a csatornaválasz- # táshoz channel_coeffs = \ gr_firdes.low_pass ( 1.0, # erõsítés input_rate, # mintavételi gyakoriság 250e3, # aluláteresztés vágási # frekvenciája 8*100e3, # átvitt sáv szélessége gr_firdes.win_hamming) # bemenet: short; kimenet: complex chan_filter = GrFreqXlatingFIRfilterSCF (CFIR_decimate, channel_coeffs, IF_freq) # bemenet: complex; kimenet: float fm_demod = GrQuadratureDemodCF (volume * fm_demod_gain) # FIR szûrõminták számítása a hangszûrõhöz return fg if name == main : # csatlakozás az RF elõtaghoz rf_front_end = microtune_eval_board () if not rf_front_end.board_present_p (): raise IOError, RF elõtag nem található # az erõsítés és a rádióállomás frekvenciájá- # nak beállítása rf_front_end.set_agc (300) rf_front_end.set_rf_freq (100.1e6) IF_freq = rf_front_end.get_output_freq () fg = build_graph (IF_freq) fg.start () # szál(ak) létrehozása # fork hívásokkal és # visszatérés raw_input ( A kilépéshez nyomd le az Enter gombot: ) fg.stop () tó logikai tömböt (FPGA) és egy programozható USB 2.0 vezérlõt tartalmaz. Egy teljes kiépítésû USRP alaplap négy használatát teszi lehetõvé: kettõ vevõ- és kettõ adókártyáét. Az RF elõtagok a bõvítõkártyákon találhatók. A különféle frekvenciasávok kezelésére számos létezik. Amatõr rádiósok számára a kis energiájú bõvítõkártyák a legmegfelelõbbek, ezek a 440 MHz-es és az 1,24 GHz-es sávban adnak-vesznek. Létezik csak vételre használható, kábelmodemes vevõegységre épített is, amely az 50 MHz 800 MHz tartományt kezeli. A bõvítõkártyákat úgy tervezték, hogy egyénileg, kézzel is könnyen összeállíthatók, ezzel is segítik az érdeklõdõket a kísérletezésben. Az USRP rugalmassága egyrészt a két programozható elembõl, másrészt a gazdagépen futó könyvtárral folytatott párbeszédbõl fakad. Ha ízelítõt akarunk az USRP képességeibõl, elég megvizsgálnunk indításának folyamatát. Maga az USRP nem rendelkezik ROM-ba írt belsõ programmal, csu- www.linuxvilag.hu 2004.július 71

pán néhány bájtnyi gyártó- (VID) és termékazonosítóval (PID), valamint változatszámmal. Amikor az USRP-t elõször csatlakoztatjuk az USB-kapura, a gazdagépen futó könyvtár egy beállítások nélküli készüléket lát a beállítások hiányát a VID, a PID és a változatszám kiolvasásával észleli. A könyvtár elsõ lépésként a 8051 kódot tölti le, ez határozza meg az USB-vezérlõ viselkedését. Amikor ez a kód elkezd futni, az USRP leválik az USB-sínrõl, majd újracsatlakozik hozzá. Az újracsatlakozás után a gazdagép már egy másik eszközt lát, a VID, a PID és a változatszám ugyanis megváltozik. A most már meglévõ és futó belsõ program megadja az USB végpontokat, felületeket és parancskezelõket. Az USB-vezérlõnek kiadható parancsok egyike az FPGA feltöltése. A könyvtárkód, miután érzékelte az USRP új eszközként való újracsatlakozását, a beállítási folyamat következõ fázisára lép, és áttölti az FPGA beállítására szolgáló bitfolyamot. Az FPGA-k általános célú lapkák, mûködésüket a beléjük írt beállító bitfolyam határozza meg. A bitfolyamot leginkább objektumkódként, a kívánt mûködés magas szintû leírásának fordítási kimeneteként képzelhetjük el. Esetünkben a kívánt mûködést a Verilog hardverleíró nyelven fogalmaztuk meg. Ez a kód is forrásként, a GNU Radio többi részéhez hasonlóan GNU GPL alatt érhetõ el. Mi történik az FPGA-ban? Az FPGA egy kisméretû, erõsen párhuzamos számítógépként fogható fel, aminek mûködését az adott feladat alapján mi tervezhetjük meg. Programozása igényel némi tapasztalatot, ugyanis ha elrontjuk, akkor véglegesen használhatatlanná tehetjük a lapkát. Éppen ezért tettünk közzé egy általános beállítást, amely alkalmazások széles köréhez használható. Egy jó USB-gazdavezérlõvel az USRP folyamatos 32 MB/másodperces átvitelre képes az USB-sínen keresztül. Az USBsín váltakozó kétirányú átvitelre használható, a 32 MB/másodperc kapacitást szükség szerint oszthatjuk el a vételi és az adási irány között. A normál beállítás lehetõvé teszi, hogy a vételi irányban kiválasszuk a digitalizált spektrum minket érdeklõ részét vagy részeit, majd ezeket szükség szerint alapsávú jellé alakítsuk vagy tizedeljük. Mindez egyenértékû azzal, ami az RF elõtagnál történik, leszámítva, hogy ebben az esetben digitalizált mintákkal dolgozunk. Azt a kódrészletet, amely ezt a feladatot látja el, digitális lefelé transzponáló elemnek nevezzük. (3. ábra) Mindezt digitális tartományban végezzük el, aminek az elõnye, hogy azonnal meg tudjuk változtatni a középfrekvenciát, ami elsõsorban frekvenciaugrásos szórt spektrumú rendszereknél hasznos. Adási irányban ennek pontosan az ellenkezõje történik. Az FPGA több digitális lefelé és felfelé transzponáló elemet tartalmaz, ezek szükség szerint azonos és eltérõ -khez is csatlakoztathatók. A mögöttük álló elméletet itt nem áll módunkban kifejteni, a GNU Radio Wikiben azonban minden szükséges tudnivaló megtalálható. GNU Radio alkalmazások A már említett példákon túl a GNU Radio részeként teljes értékû HDTV adóhoz és vevõhöz, spektrumelemzõhöz, oszcilloszkóphoz, párhuzamos többcsatornás vevõhöz és persze modulátorok és demodulátorok folyton bõvülõ gyûjteményéhez is hozzájutunk. A jelenleg tervezés vagy megvalósítás alatt álló rendszerek közül néhány példa: A TiVoval egyenértékû rádiós megoldás, több csatorna egyidejû rögzítésének lehetõségével Passzív radarrendszer, amely a TV-adásokat használja jelforrásként. Akik antennán keresztül nézik a tévéadásokat, csak gondoljanak arra, hogy ha repülõgép halad el felettük, ugrálni kezd a kép. Rádiócsillagászat TETRA adó-vevõ Digitális világrádió Program alapú GPS Elosztott érzékelõhálózatok Spektrumhasználat elosztott mérése Amatõr rádió adó-vevõk Alkalmi hálós topológiájú hálózatok RFID érzékelõ/olvasó Több bemenetû több kimenetû (MIMO) jelfeldolgozás Politikai kérdések A szabadon elérhetõ, rádiók építésére alkalmas programok nem mindenkinek tetszenek. Az Amerikai Egyesült Államokban például az Amerikai Mozgókép Szövetség ellenállásába futottunk bele, õk a Broadcast Flag (másolásvédelmi kiegészítõ jel a digitális adásokban) alkalmazásával próbálják korlátozni a földi sugárzású digitális tévéadásokhoz épített vevõkészülékek körét. Az Amerikai Szövetségi Kommunikációs Bizottság egy elõzetes állásfoglalást adott ki az kognitív képességekkel rendelkezõ rádiós megoldásokra és a program alapú rádiókra vonatkozóan. Az állásfoglalásban számos problémát vetnek fel, felmerül többek közt a nagysebességû digitális-analóg átalakítók értékesítésének korlátozása, az engedély nélküli programok távol tartása a program alapú rádiózáshoz szükséges vasaktól digitális aláírások vagy hasonló eszközök segítségével és új korlátozások bevezetése az amatõrök számára gyártott rádiókra vonatkozóan. Összegzés A program alapú rádiózás érdekes terület, a GNU Radio minden eszközt rendelkezésünkre bocsát, hogy megkezdhessük felfedezését. Aki komoly tudást akar szerezni a program alapú rádiózásban, annak több szakterületet is meg kell ismernie. Mi csak annyit ígérhetünk, hogy mindent megteszünk az elsõ lépések megkönnyítése érdekében. Linux Journal 2004. június, 122. szám Eric Blossom a GNU Radio Project alapítója. Mielõtt program alapú rádiózással kezdett volna foglalkozni, évekig a biztonságos telefonszolgáltatások területén dolgozott. Amikor éppen nem program alapú rádiót bütyköl, valószínûleg jógázással vagy ju-jitsuval tölti az idejét. Az eb@comsec.com címen érhetõ el. 72 Linuxvilág