Softwarové rádio

Umožňuje příjem AM/SSB/CW stanic v rozsahu kmitočtu oscilátoru, t.j. od 0 do asi 20 MHz, dost záleží na hlavním oscilátoru, zde je kmitočet 80 MHz a na vstupních obvodech (zde žádné nejsou a tedy je tu prostor pro experimenty, rozhodně nějaký preselektor to chtít bude, pro poslech na amatérských KV pásmech je nutné odříznout alespoň SV). Celý projekt není stavebním návodem, je třeba jej chápat spíš jako inspiraci pro vlastní konstrukci. Projekt ověřil, že i s jednoduchým obvodem jako je SA612A je možné slušně přijímat CW/SSB stanice na amatérských KV pásmech.

Bližší popis

Tento projekt vznikl po neúspěchu s Tayloe detektorem. Nevím proč, ale nějak se mi ho nepodařilo rozchodit. Asi obyčejná 4053 nebude pro KV už to pravé. Metoda Tayloe vypadá na první pohled velice pěkně, ale je poněkud netradiční, lépe je se řídit osvědčenými postupy, proto zde je použit obvod SA612, využívající Gilbertovu buňku v "lineárním" režimu, tj. signál místního oscilátoru (DDS) nesmí obvod přebudit. Přebuzením vznikají vyšší harmonické, což je v případě širokopásmového vstupu dost velký problém. Projekt je tak jednoduchý, jak jen může být. Není zde mikroprocesor, zpracování dat probíhá v PC, zato je použito FPGA i když jen na DDS. Takže DDS čip od AD by svou úlohu také zastal, řídit půjde velice podobně - většina má sériové rozhraní, které by FT2232 měl zvládnout.

Hardware

Základem jakéhokoli softwarového rádia je samosebou oscilátor. Z toho, co bylo k dispozici (v šuplíku) se nakonec podařilo rozchodit DDS na FPGA XC2S150 (vývojový kit PK-design). Není to ideální, ale dá se to použít. Pro převod D/A jsou použity jen odporové žebříčky v obvyklém zapojení, 8 bit pro začátek úplně stačí. Pro vyšší kmitočty nad 10 MHz bude ještě potřeba rekonstrukční filtr DP alespoň 3.řádu, v této zkušební verzi není. Harmonický signál pro kanály I i Q má ve FPGA vlastní tabulku hodnot, místa je tam dost. Aby nevedlo k počítači moc drátů, je DDS-ka laděna po JTAG rozhraní zápisem do 32-bit registru. JTAG slouží zároveň i k inicializaci FPGA, která je prováděna přímo z tohoto programu. Takže do počítače vedou už jen dráty do mikrofonních vstupů zvukovky (tyto vstupy jsou citlivější). Celý hardware sestává tedy kromě FPGA a odporového žebříčku jen z vyvážených směšovačů pro I a Q kanály. Není ani nutné používat obvody s Gilbertovou buňkou, obyčejné diody vedou k poměrně slušným výsledkům. Bez problému se dají chytit rozhlasové stanice na KV, v amatérských pásmech 3.5 MHz 7 MHz CW, občas i SSB, ale na pokraji citlivosti. Hardware je popsáno v adresáři hardware, kresleno je to v Kicad. Zdrojové kódy pro FPGA ve VHDL byly použity v Xilinx ISE Webpack 10.1, výsledný design je v souboru dds.svf.

schema.png

Schema destičky

board.png

A jak je osazena. Konektory jsou na druhé straně. Deska je jednostranná, vrstva spojů je kreslena "nahoře", tedy ve vrstvě součástek, naopak konektory jsou ze strany "spojů", na níž žádné spoje nejsou (ach jo). 20-pinový konektor je dvouřadá dutinková lišta, která se zapíchne přímo do kitu PK-design.

Software

Program bere data ze zvukovky - třída Audio - I a Q signál jako stereo, dále je zpracovává jako komplexní čísla Complex . Umí vykreslit Waterfall = spektrum vstupního signálu za použití FFT. FFT není z knihovny fftw, jak bývá obvyklé, pro tak nenáročnou funkci je použita vlastní třída Fft s rekurzívním voláním (fakt je to jednoduché). Filtrace signálu (třída FilterChain) není dělána pomocí zpětné FFT, ale komplexním filtrem FIR (FirBp) typu pásmová propust. Překlad kmitočtového pásma do nuly je zajištěn komplexním součinem (komplexní součin je vlastně "pootočení" vektoru, tedy komplexního čísla v komplexní rovině) s harmonickým signálem, generovaným třídou Generator. To je tedy něco jako BFO. Je to tak pro sluch lepší a hlavně jednodušší. Hlavní okno programu je v MainWindow.

SoftwareDefinedRadio.png

Náhled GUI (design Linux, Gnome)

Závislosti

jsem se snažil omezit na míru co nejmenší. I tak je nutné použít (měla by to být multiplatformní aplikace) několik externích knihoven :

Pro parser svf je potřeba ještě flex a bison, pro generování dokumentace dogygen. To ale není nutnost.

Instalace

Podrobnější popis instalace asi nemá cenu sem psát, kdo se do toho pustí, stejně o tom už něco ví, začátečník patrně skončí na první chybě. A postihnout všechny chyby nejde. Vyzkoušel jsem tedy:

  1. Linux Ubuntu 9.10 64-bit. - mělo by být celkem bez problémů. Pro portaudio je nejlepší OSS - přístup přímo na zvukovku. Měl by být default, takže není třeba nic upravovat. Takže jen qmake, make a pak v ./bin spustit aplikaci sdr. Je možné, že bude potřeba upravit v ./jtag/ft2232dxx.c parametry volání FT_SetVIDPID (VID, PID), případně pokud jsou tyto parametry default, volání vynechat. Je nutné nastavit práva pro zápis na Jtag (sudo chmod -R a+w /dev/bus/usb/).
  2. Windows XP Profesional 32-bit. - kromě MinGW (nainstaluje se společně s Qt nebo lépe samostatně) je potřeba ještě MSYS pro kompilaci portaudio v.19. A to je potřeba ještě zapatchovat (viz Audio). A nastavit systémovou proměnnou PATH (System->proměnné prostředí->PATH přidat MinGW/bin, MSYS/bin). FTD2XX drivery také chodí, ale příslušná DLL nejde přilinkovat, takže se používá metoda LoadLibrary. S Qt by neměl být problém, pro kompilaci tohoto programu lze použít QtCommandPrompt - příkazy qmake, mingw32-make. Zatím to sice chodí, ale má to malou citlivost, moje zvukovka Realtek ve Win nějak nejde nastavit, je to šmejd. Pozor knihovna Waterfall_plugin.dll musí být na PATH (podobně v Linuxu pro ldconfig). Aby to bylo svižnější je default kompilace za použití SSE2, takže to musí procesor podporovat nebo to lze vypnout v ./sdr/sdr.pro (QMAKE_CXXFLAGS). Ale těžko říct, jestli to bude stíhat.

Pokud se vše podaří přeložit, první spuštění aplikace sdr selže. Je nutné nastavit v konfiguraci správné sériové číslo FTDI adaptéru (interface A). To lze zjistit spuštěním pomocné aplikace jtag v adresáři ./jtag. Sériové číslo je uloženo v OS Linux v souboru $HOME/.config/MrazikSoft/SDR.conf (proměnná Jtag_serial_number), ve Windows v registry HKEY_CURRENT_USER/Software/MrazikSoft/SDR (upravit lze programem regedt32).

Poznámky

Použitý JTAG adaptér je od firmy Kramara a používá obvod FT2232C v MPSSE módu. V zásadě není problém použít jiný adaptér, zde však pro něj není podpora. Je zde použit prakticky beze změny projekt svfPlayer, kde lze najít bližší podrobnosti.

Pro adaptér Kramara je nutné vyrobit kablík, připojující JTAG vývojového kitu PK-design. Protože ten používá jako napájení +5V, je třeba např. do série zařadit červenou LED a zmenšit tak napájecí napětí JTAG.

Praktické výsledky

Obvod je použitelný pro první pokusy. Má to samosebou určitá omezení. Předpokladem úspěchu je dobrá anténa. Použil jsem asi 2x18 m drátu jako půlvlnný dipól ve výšce 5 m. K tomu proudový balun 1:1 navinutý na jakémsi toroidu prům.15 mm z vadné základní desky počítače. Úmyslně jsem na něj navinul jen 3x15 závitů, aby moc nepropouštěl střední vlny. Přes den se dá poslouchat od 2 MHz do cca 25 MHz, výš už by musel být na DDS lepší rekonstrukční filtr (alespoň pí-článek). Moje zvukovka umí na mikrofonním vstupu zisk +33 dB - s tímto nastavením je citlivost dostatečná na to, aby se dalo poslouchat v podvečer na 80 m SSB vysílání českých a slovenských radioamatérů. Bohužel jsem v ďolíku a dipól můžu orientovat jen ve směru východ-západ a tak slyším ještě Němce, Italy a Poláky. Občas i Rusy na vyšších pásmech. Takže citlivost je celkem dobrá i když jí nemám jak změřit. Problémy nastávají po 20.hodině (letního času). V pásmu 79m (a výše) začnou vysílat AM rádia s obrovskou úrovní a přijímač se "zahltí" - je vidět kolem středu zkreslenou obálku silných stanic, objevují se produkty intermodulace. Takže co s tím:

  1. Preselekce. Vyzkoušel jsem laděný sériový rezonanční obvod na nízké impedanci (cca 6 Ohm). To bylo sice lepší, ale ne o moc - rezonance je sice poměrně ostrá, ale potlačení v nepropustném pásmu není moc velké. Pro 80m se lépe osvědčil vázaný rezonanční obvod doladěný jádrem cívky - propustí celé pásmo ale jinak má docela slušný útlum, takže za něj lze přilepit VF předzesilovač s FET.
    selektor.png
    Cívky L1 a L2 byly získány ze staré zvukové MF televizoru, kondenzátory jsou keramické. Do pásma to lze naladit na maximum signálu. Celkový zisk je asi 20 dB.
  2. Linearizace. Použitý obvod SA612 má výhodu jednoduché aplikace - potřebuje málo externích prvků, má malé napájecí napětí (+5V) a velký konverzní zisk (+14 dB) ale ta "spodní" část Gilbetrovy buňky používá společný emitorový odpor, což zapříčiňuje malý rozsah vstupního napětí jež obvod zpracuje bez zkreslení. A to je ten problém. Simulací této části obvodu dospějeme k následující převodní charakteristice (z = 20 log (du2/du1)[dB]):
    SA612.png
    Je vidět, že bez značného zkreslení lze zpracovat řádově jen desítky mV. Tayloe detektor tuto nectnost nemá, ovšem použití obdélníkového signálu oscilátoru má za následek, že jsou přijímány současně i signály na kmitočtech lichých harmonických oscilátoru. Takže ani zde se bez preselekce neobejdeme. Zdá se, že lepší (a dokonce levnější) volbou je starý a osvědčený MC1496. Ten používá jednoduchou fintu - proudové zdroje v emitorech vázané přes neblokovaný rezistor, který zároveň určuje linearitu i konverzní zisk. Simulace přináší jednoznačně lepší výsledek (ovšem v praxi jsem to nezkoušel, protože jsem líný, což byla i příčina použití SA612).
    MC1496.png
    Obvod se tedy chová podobně jako SA612 pokud je odpor nulový. Jeho zvětšováním roste pásmo linearity a klesá konverzní zisk. Zároveň se přesným nastavením jeho velikosti dá docílit vyvážení I a Q kanálu (i když ani u SA612 to nebylo v praxi nutné). Takže další cesta vede asi právě tudy. Lepší už by zřejmě byla jen Gilbertova buňka s FET tranzistory, ale nic rozumného jsem nenašel (monolitický jen v pásmu desítek GHz) a skládat to z BF245 se mi nechce.
  3. Závěr. Je zajímavé, že všichni konstruktéři používají v SDR (tedy pokud je to down-konvertor) Tayloe detektor. Osobně v tom nevidím žádnou výhodu. Jak bylo uvedeno, matematickým rozborem lze zjistit, že tento typ detektoru přijímá i parazitní kmitočty. Vyvážený multiplikativní směšovač s harmonickým průběhem signálu oscilátoru je pro tento účel zjevně lepší. Je to vidět i z toho, že MC1496 se stále ještě vyrábí. Nakonec pokud budeme budit Gilbertovu buňku obdélníkovým průběhem, bude mít výsledný obvod podobné vlastnosti jako Tayloe detektor. A vlastně obdélníkový signál do slušného přijímače tak nějak nepatří. Jediný problém je v tomto případě nutnost použití DDS. A bohužel ani Analog Devices nic rozumně použitelného nevyrábí, jedině AD9854 a ten je zbytečně složitý (a drahý). V další etapě se spíš pokusím udělat SDR jako stand-alone zařízení, kde FPGA např. Spartan-3 (musí mít alespoň 4 násobičky) bude provádět i digitální filtraci signálu. Takže to může být řízeno i malým MCU, který bude jen přepočítávat koeficienty FIR. Zde by bylo možné použít i lepší codec (UDA1341/1345 - 18 bit = šířka slova násobičky / 96 kHz) a tím zlepšit dynamiku přijímače.

Ke stažení

Zatím beta verze

Licence

Kód bude uvolněn pod GPL2 licencí

Lokální odkazy na této stránce nefungují, dokumentace není uložena na serveru celá.

 Vše Třídy Soubory Funkce Proměnné Vlastnosti

Generováno Sat May 8 23:24:06 2010 pro projekt Softwaredefinedradio programem  doxygen 1.6.1