Category Archives: Elektroniikkablogi

Radiokerhon jäsenten rakenteluprojekteja.

TETRA-lähetteen tarkastelua

Jari OH2ERJ toi eräseen kerhoiltaan mukanaan TETRA-kapulan ja ehdotti, että voisimme tallentaa pätkän sen lähetettä ja kokeilla, saadaanko sitä tulkittua mitenkään.

Etsimme gqrx-ohjelmalla ja rtl-sdr-vastaanottimella lähetteen, säädimme keskitaajuuden ja vahvistuksen sopivaksi ja tallensimme pätkän gqrx:llä. Näytteenottotaajuudeksi valittiin vain 300 kHz, ettei tiedostosta tulisi tarpeettoman suurta. Gqrx tallentaa nuo complex64-muodossa, jossa on peräkkäin näytteen reaaliosa (I) 32-bittisenä liukulukuna ja imaginääriosa (Q) samanlaisena. Tämä vie 4 kertaa enemmän tilaa kuin suoraan rtl_sdr-komentorivityökalulla tallennettu, mutta on toisaalta yleisemmin käytetty muoto. Tiedosto pakkautui kuitenkin aika hyvin ja tallenne löytyy bzip2-pakattuna täältä.

Avaamalla tallenne Audacityllä sen aikajakoisena lähetetyt purskeet näkyvät selvästi:

Seuraavassa kerhoillassa aloimme tutkia lähetettä tarkemmin. Latasimme osmo-tetra -ohjelman, joka ymmärtää jotain ainakin tukiasemien lähetteistä. (Lopussa on ohje, miten tämä ohjelma ladataan ja käännetään.)

Osmo-tetran mukana tuli skripti src/demod/cqpsk.py, joka demoduloi sopivassa muodossa olevan tallenteen, jotta se voidaan syöttää muille osmo-tetran osille. Skripti kuitenkin näytti haluavan eri näytteenottotaajuutta kuin mitä käytimme. Sieltä löytyi myös FUNcube donglen kanssa toimiva fcdp-tetra_demod.py. Halusimme muokata tuon toimimaan meidän tallenteille ja rtl-sdr-radioilla.

cqpsk.py-skriptiä lukemalla selvisi, että se oli suhteellisen yksinkertainen GNU Radiota käyttävä ohjelma, joka kytki muutaman GNU Radion peruslohkon peräkkäin sopivilla parametreilla. Ketju oli tällainen:

blocks.multiply_const_cc (Kertoo vakiolla: skaalaa signaalin halutulle lukuvälille)
-> analog.feedforward_agc_cc (Tason säätö: pitää signaalin keskimääräisen amplitudin sopivana)
-> filter.interp_fir_filter_ccf (Tekee TETRA-lähettessä käytetyn RRC-pulssinmuodon mukaisen suodatuksen)
-> digital.mpsk_receiver_cc (Synkronoi PSK-lähetteen eli säätää symbolikellon ja symbolien vaiheen oikeaksi)
-> digital.diff_phasor_cc (Kertoo näytteen edellisen näytteen konjugaatilla, jolloin saadaan vaiheen muutos kahden symbolin välillä. Tarvitaan, koska TETRA käyttää differentiaalista vaihemodulaatiota.)
-> blocks.complex_to_arg (Laskee kompleksiluvusta sen vaihekulman)
-> blocks.multiply_const_ff (Kertoo 4/piillä, jolloin vaiheesta -135° tulee -3, -45° -> -1, +45° -> +1 ja +135° -> +3. TETRAn PI/4 DQPSK tarkoittaa sitä, että vaiheen muutos symbolien välillä on tällä tavalla 45° eli PI/4 vinossa 90° moninkerrasta.)

Jotta kokeileminen olisi helpompaa, halusimme tehdä saman GNU Radio Companionilla (joka myös lopulta generoi samankaltaisen python-skriptin). Skriptiä lukemalla laitoimme samat palikat samoilla parametreilla onnistuneesti GNU Radio Companioniin ja aloimme muokata sitä hieman. Tällainen siitä tuli:

Linkki GRC-tiedostoihin ja Octave-skriptiin

Kokeilimme aluksi vastaanottaa jotain voimakkaasti kuuluvaa TETRA-tukiasemaa suoraan tallentamatta signaalia välissä. Syötimme nimetyn putken kautta symbolit osmo-tetran ohjelmille:

mkfifo /tmp/tetra
./float_to_bits /tmp/tetra /dev/stdout | ./tetra-rx /dev/stdin

Kumma kyllä, se lähti toimimaan, ja tetra-rx alkoi tulostaa tietoa löytämistään tukiaseman purskeista. Eihän se nyt näin helppoa voinut olla!

Mikään ennenkuulumaton saavutus tämä ei silti ole, koska telive-ohjelmisto tekee käsittääkseni saman. Koska teimme kuitenkin vähän enemmän itse, ymmärrämme paremmin mitä tässä tapahtuu. Selitetäänpä seuraavaksi, miten tämä ketju toimii.

Laitoimme MPSK-synkronoijan ottamaan sisään 4 näytettä per symboli. Koska TETRAn symbolinopeus on 18 kHz, täytyy blokille antaa signaalia näytteenottotaajuudella 4*18 kHz = 72 kHz.

Frequency Xlating FIR Filter ensin sekoittaa eli kertoo signaalin siniaallon kanssa, jolloin se siirtyy eri taajuudelle. Tässä se on säädetty niin, että tallenteessa olevan lähetteen keskitaajuus tulee 0 Hz kohdalle. (Huomaa, että kompleksisessa signaalissa näytteenottotaajuudella f on taajuuksia väliltä -f/2 ja +f/2). Sen jälkeen se tiputtaa näytteenottotaajuuden lähelle haluttua. Näytteenottotaajuuden muunnoksessa tarvitaan aliasoitumisen estämiseksi ja muutenkin signaalin suodattamiseksi alipäästösuodatin, jonka rajatajuudeksi laitettiin 20 kHz, jolloin se päästää kompleksisena 40 kHz kaistan.

Kun RTL-SDR:llä näytteistetään 1.8 MHz taajuudella, siitä päästään suoraan 25:llä jakamalla tuohon 72 kHz:n. Kapulan tallenteen olimme kuitenkin jo menneet tekemään 300 kHz taajuudella, josta tuohon ei päästä millään kokonaisluvulla jakamalla. Tämän vuoksi lisäsimme väliin Fractional Resampler -lohkon, joka osaa uudelleennäytteistää muillakin kuin kokonaislukusuhteilla:

Näin pääsimme kokeilemaan, mitä tetra-rx sanoo kapulan DMO-lähetteestä. Se näytti löytävän bittijonosta jotain, mutta ei saanut kuitenkaan ehjiä purskeita:

BURST
#### could not find successive burst training sequence
found SYNC training sequence in bit #4038

Tuli mieleen, että tuon MPSK Receiver -lohkon takaisinkytkentään perustuva symbolikellon synkronointi ei ehkä ehdi lukittua kunnolla kapulan lyhyeen purskeeseen. Tukiaseman kanssa se toimii kohtalaisesti, koska tukiasema lähettää lähes jatkuvasti. Kokeilimme ottaa synkronoinnin kokonaan pois ja laittaa RRC-suodattimeen desimoinnin siten, että se antaa yhden näytteen per symboli ulos. Ajatus oli, että silloin joillekin purskeille ajoitus osuisi riittävän lähelle oikeaa ja joillekin ei, mutta joku osa niistä saataisiin silti demoduloitua oikein. Samalla jäi pois saman lohkon tekemä kantoaallon vaiheen palautus, mutta sekin on oikeastaan tarpeeton, koska tarkastelemme vain vaiheen muutosta kahden peräkkäisen symbolin välillä. (Tälläinen differentiaalinen demodulointi huonontaa kyllä herkkyyttä hieman verrattuna koherenttiin, mutta tosiaan kestää taajuusvirhettä ja Doppler-leviämistä paremmin, koska varsinaista kantoaallon palautusta ei tarvita.)

Tämä ei oikeastaan muuttanut tulosta ja tetra-rx ei edelleenkään tulostanut mielestään ehjiä purskeita.

TETRAn speksiä lukemalla huomasimme, että tukiaseman downlinkin purske on hieman erimuotoinen kuin kapulan lähettämä uplink- tai DMO-purske.

( ETSI EN 300 392-2 sivu 82 )
Purskeiden keskellä on samanlainen bittijono (speksissä nimellä training sequence), jonka tetra-rx havaitsee, mutta ei löydä muita odottamiaan osia purskeesta, koska niitä ei kapulan lähetteessä ole.

Ajattelimme seuraavaksi kokeilla, löytyykö nuo tosiaan tuon float_to_bits-ohjelman antamasta bittijonosta laskemalla Octave-skriptillä vähän korrelaatioita.

../osmo-tetra/src/float_to_bits /tmp/tetra bitteja
octave
training


Huomasimme, että ”training sequence 1” tulee tasaisin välein, mutta silloin tällöin tulee myös ”training sequence 2”. Tämä ilmeisesti kertoo jotain purskeen sisällöstä ja tyypistä.

Kirjoitamme mahdollisesti myöhemmin lisää noista erimuotoisista purskeista, kunhan speksiä on selailtu lisää. Joissain pursketyypeissä on myös pidempiä sekvenssejä, joita ei vielä kokeiltu etsiä. Seuraavaksi voisi vaikka tehdä purskeille sopivan synkronoijan, joka etsii näytevirrasta näitä sekvenssejä ja sellaisen havaitessaan synkronoi näytekellon sekvenssiin ja antaa ulos suoraan yhden purskeen verran bittejä siitä ympäriltä.

Näköjään DMO:ssa nuo ovat lisäksi vähän erilaisia kuin uplinkissä:
ETR 300-3 sivu 68
ETS 300 396-2 sivu 42-43

Tässä vielä lyhyt ”ohje” osmo-tetran lataamiseen ja kääntämiseen Debian-, Ubuntu- tai Mint-Linux-distroilla:

sudo apt install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev

mkdir ~/tetra
cd ~/tetra
git clone git://git.osmocom.org/libosmocore.git
git clone git://git.osmocom.org/osmo-tetra.git
mkdir ~/softa
export LIBRARY_PATH=~/softa/lib LD_LIBRARY_PATH=~/softa/lib C_INCLUDE_PATH=~/softa/include
cd ~/tetra/libosmocore
autoreconf -i
./configure --prefix=$HOME/softa
make -j4
make install
cd ~/tetra/osmo-tetra/src
make

Tämä ”ohje” kannattaa ottaa suuntaa-antavana esimerkkinä ja sitä voi soveltaa. Tässä tuo kirjasto asennetaan kotihakemiston alle, jolloin make installia ei tarvitse tehdä roottina. Jos päätit tehdä tämän ohjeen mukaan, muista antaa tuo export-komento myös jatkossa ennen osmo-tetran käyttöä. Ainiin, osmo-tetran Makefileen joutuu mahdollisesti lisäämään LDLIBS-muuttujan perään -ltalloc , jotta se kääntyy.


Jos et jaksa säätää GNU Radiota tai osmo-tetraa toimimaan, mutta haluat tarkastella bittejä, voit myös ladata samasta kapulan lähetteestä demoduloidun bittivirran. Huomaa, että tässä on purskeiden välissä satunnaisia bittejä eikä siitä suoraan näe, milloin purske alkaa ja loppuu.

Disassembly of Fujitsu-Siemens Scenicview p19-3 monitor

IMG_3556

I couldn’t found any instructions how to dismantle this display from any corner of the internet, so I’m posting them on my own.  You need a (suitable) screw driver, two credit cards and maybe a knife.
IMG_3565

Main difficulty for dismantling this display is that there isn’t screws which  you could just unscrew. The only four screws in visible on the surface are for the stand. (I managed to dismantle the display stand and two decoration plates and that helped nothing (figure below). )

IMG_3563

The right way to get under the surface of the display is to pop-out the joint between dark and white plastic. It doesn’t matter which side of the dark, thin plastic bar you pop-out, either one goes. (It took a nice while to figure that out.)
IMG_3558

If you do not want to wreck the plastic edges, do NOT use a plain screw driver (figure above). Two credit cards (or similars) around the screw drives and no single marks are visible, see figures below For achieving the very first slit, you might end up using a knife for that.

IMG_3560 IMG_3561

Afterwards, you just keep on unscrewing visible screws and popping visible hooks. Good luck! The screen I disassembled turned out to be electronic waste.

73

IMG_3568

Hakkuritesti

Oletko ikinä miettinyt onko halvoista eBay-hakkureista mihinkään? Halpa ei välttämättä ole hyvää, mutta kuinka huonoja ne oikeastaan ovat? Välttäisivätkö ne kuitenkin omaan projektiisi?

Testasin 3 eri Buck (Step-down) hakkurin jänniteregulaatiota kuorman muuttuessa. Oma motivaationi oli testata, mikä näistä sopisi parhaiten pienen audiovahvistimen (Kiinasta tilattu TA2020-levy) jännitelähteeksi itse tehtyyn boomboxiin.

 

Hakkurit

Testin hakkurit ovat näkyvillä alla olevassa kuvassa 1 ja kutsun niitä numeroinnilla 1-3 järjestyksessä vasemmalta oikealle. Kaikkien hakkurit olivat käytännössä kolmipinnisiä, kahteen piirilevyyn on vain laitettu kaksi erillistä maapinniä. Hakkurit 2 ja 3 käyttivät samaa LM2596 piiriä ja niiden layout oli suht’  samanlainen muutamaa pintaliitoskomponenttia ja elkojen tyyppiä lukuun ottamatta. Hakkurit 2 ja 3 on tilattu eri myyjiltä.

IMG_3547

Kuva 1: Testatut step-down hakkurit. Hakkurit numeroitiin kuvan mukaan vasemmalta oikealle.

 

Hakkuri Ulostulojännite Linkki vastaavaan
1 12.8 V http://www.ebay.com/itm/DC-DC-HRD-Convertor-36v-48v-Step-Down-To-12v-3A-pPactical-Switching-Power-Module-/400484445729?ssPageName=ADME:L:OC:GB:3160
2 1.5-35 V http://www.ebay.co.uk/itm/LM2596-DC-DC-Step-Down-Adjustable-Converter-Power-Supply-Module-/321234663840?ssPageName=ADME:L:OU:GB:3160
3 1.5-35 V http://www.ebay.co.uk/itm/1-2-5-10X-LM2596S-Adjustable-Step-Down-Power-Supply-Module-DC-DC-Input-3-40V-UK-/400703398823?ssPageName=ADME:L:OC:GB:3160

Lisäksi, mittailin kahta alla näkyvää step-up hakkuria (kuva 2), mutta niitä ei voinut vertailla samaan käyttöön, koska pajan powerin virransyöttökyky loppui kesken.

IMG_3548

Kuva 2: Mitatut step-up hakkurit.

Mittausjärjestely

Määritin testikuorman vahvistimen maksimitehosta: 20W 80% hyötysuhteella vahvistin haluaa ~30 wattia sähköä. Vaikka kahden hakkurin ulostulojännitte oli säädettävä, kolmas antoi ulos ”kiinteät” 12.8 volttia, joten kaikkien hakkureiden ulostulojännitteeksi ilman kuormaa säädettiin tuo 12.8V. Keinokuorman resistanssiksi tuolla jännitteellä saadaan  R=(12.8 V)^2/30W ~ 6.6Ohm.

Alamontulta löytyi tehovastuksista kasattu 6.8 Ohm ja 150W keinokuorma. Virtaa keinokuorma söi 1.9A, kun kaikkien hakkureiden luvataan puskevan 3A jatkuvana. Hakkureiden sisääntulojännitteeksi ajettiin 18V alamontun labrapowerista.

Kuorman muuttaminen tehtiin kytkemällä keinokuorman kanssa sarjaan FET-transistori, jota ohjattiin signaaligeneraattorin 15V kanttiaallolla. Kanttiaallon pulssisuhde oli 50-50 ja testit tehtiin taajuuksilla 10Hz, 100Hz, 1kHz ja 10kHz.

Hakkurin ulostulojännitettä tarkkailtiin AC-moodiin kytketyllä oskilloskoopilla ja yleismittarin DC-mittauksella. Koska analogisen oskilloskoopin pystysuuntainen siirto ei riittänyt tarvittavan suurella jänniteresoluutiolla 12.8V:n asti, oli pakko käyttää oskilloskoopin AC-mittausta ja tarkkailla tasajänniteosaa yleismittarilla. Kokonaisuudessaan mittausjärjestely näkyy kuvassa 3.

IMG_3541

Kuva 3: Mittausjärjestely

 

Tulokset

Alla olevassa taulukossa näkyy ulostulojännitteiden maksimivaihtelu eri taajuuksilla sekä dc-tasot. Oskilloskoopin näkymät 1kHz:n taajuudella ovat näkyvissä kuvina 4-6. Huomionarvoista on, että kuvien 5 ja 6 jänniteskaala on 0.2 V/ruutu, kun kuvan 4 skaalana 0n 0.1 V/ruutu. Ensimmäisen hakkurin mittaaminen 10Hz:llä ei jostain syystä napannut, joten se puuttuu. Lisäksi 10kHz:n taajuudella kaikkien hakkureiden ulostulotaajudella havaittiin hervoton jännitepiikki kaikkien hakkureiden ulostulossa. Piikki oli huomattavan kapea ja sen peak-to-peak jännite on esitetty suluissa 10kHz:n sarakkeessa.

Hakkuri 10 Hz (V) 100 Hz (V) 1 kHz (V) 10 kHz (V) DC (V)
1 0.52 0.48 0.4 (6.0) 12.7
2 1.5 2.5 1.0 0.92 (7.5) 12.7
3 1.6 2.1 1.2 0.67 (8.0) 12.7

 

Hakkuri 1, ulostulo

Kuva 4: Hakkurin 1 ulostulo, kun 25 watin kuormaa pätkittiin 1 kHz:n taajuudella 50-50 pulssisuhteella. 1 ruutu pystysuunnassa on 0.1 V, vaakasuunnassa 0.2 ms.

Hakkuri 2, ulostulo

Kuva 5: Hakkurin 2 ulostulo, kun 25 watin kuormaa pätkittiin 1 kHz:n taajuudella 50-50 pulssisuhteella. 1 ruutu pystysuunnassa on 0.2 V, vaakasuunnassa 0.2 ms.

Hakkuri 3, ulostulo

Kuva 6: Hakkurin 3 ulostulo, kun 25 watin kuormaa pätkittiin 1 kHz:n taajuudella 50-50 pulssisuhteella. 1 ruutu pystysuunnassa on 0.2 V, vaakasuunnassa 0.2 ms.

 

Lisäksi mittailin kahta Boost (Step-Up) hakkuria, mutta alamontun powerin virrantuotto ei riittänyt 6.8Ohm kuorman ajamiseen 12.8 voltilla. Kun alamontun powerista otettiin 2.13A 3 voltilla toroidilla ja isommilla elkoilla varustetun Boost-hakkurin ulsotulo oli 7.4 volttia noin 1V peak-to-peak rippelillä, kun taas kuppaisemman Boost-hakkurin ulostulo samalla sisäänotolla 6.2V 2 voltin rippelillä.

 

Johtopäätökset

Vertailun paremmuusjärjestys on selvä: kiinteäulostuloisen hakkurin nro 1. ulostulo poukkoilee alle puolet kahden muun hakkurin ulostulosta jokaisella kuorman heilutustaajuudella. Lisäksi 10kHz:n piikki on pienin hakkurin 1 kohdalla. Hakkureiden 2 ja 3 ulostulo on yhtä karmeat, joskin niiden välillä löytyi pieniä eroja eri taajuuksilla.

Hakkurin 1 ylivoimaisuus voi tosin johtua siitä, että sen laudalla on huomattavasti isommat elkot ja sen jäähdytyskin näyttää vakuuttavalta (sellainen on olemassa). Mielenkiintoista olisi ollut testata hakkureiden käyttäytymistä, kun niiden ulostuloon lisätään kapasitanssia. Tämä jäi tästä testistä tekemättä ja jää for future research. Hakkureiden 2 ja 3 erot viittaavat siihen, että erot layoutissa ja komponettivalinnoissa vaikuttavat laitteen suorituskykyyn. Kuitenkin, hakkurit 2 ja 3 näyttävät aivan yhtä kuppaisilta, ja niin on niiden suorituskykykin.

Johtopäätös: hakkureiden kuppainen ulkonäkö vaikuttaa korreloivan voimakkaasti niiden paskuuden kanssa. Paremman näköinen hakkuri vaikuttaa toimivan paremmin. Kannattaa siis maksaa enemmän piiristä, joka näyttää pätevämmältä.

Kerkot aktiivikomponentteina

Joitain keraamisia kondensaattoreita kuulee haukuttavan niiden jänniteriippuvaisen kapasitanssin vuoksi. Sehän voi aiheuttaa vahvistimissa säröä ja ikäviä yllätyksiä, kun kapasitanssi ei korkeammalla jännitteellä olekaan se mitä oli kuvitellut.

Sama ominaisuushan on myös estosuunnassa olevalla diodilla. On myös tarkoitukseen tehtyjä kapasitanssidiodeja, joilla kapasitanssin muutos on muita diodeja suurempi. Näille löytyykin monia sovelluksia: yksinkertaisimmillaan oskillaattorin taajuuden säätäminen, joskus myös taajuuskertojina, ja parhaimmillaan jopa vahvistinkomponentteina parametrisissa vahvistimissa.

Jännitteen mukana tippuva kapasitanssi voi siis olla myös hyvinkin toivottu ominaisuus. Tämä sai joskus miettimään, voisiko kaiken tämän tehdä myös kerkoilla. Tänään päätin kokeilla.

Käytin kahta ”470nF” pintaliitoskerkoa, joiden kapasitanssi 0 voltin ympäristössä on 370 nF, 10 voltilla tippuu jo 330 nF:n ja 30 voltilla jäljellä on enää 200 nF.

Aloitin taajuuskertojasta hyvin yksinkertaisella kytkennällä:

Kun väliulosotto on keskellä ja kondensaattorit samankokoiset, ei ideaalikomponenteilla kytkennästä mene läpi mitään. Käytännössä sisään syötetty siniaalto kumoutuu melko hyvin, ja kondensaattoreissa syntyvät parilliset harmoniset tulevat näkyviin.

Päädyin käyttämään melko suuria keloja, koska pienempi sydän saturoitui ja kelan epälineaarisuus alkoi näkyä ennen kerkon epälineaarisuutta. Yhden väliulosotollisen muuntajan sijaan käytin kahta samanlaista muuntajaa, joita löysin.

12 voltin tasajännitteellä biasoituna ja riittävän suurta siniaaltoa audiovahvistimesta syöttämällä sen toinen harmooninen alkoi näkyä kertojan ulostulossa. Lisäsin ulostulon rinnalle kelan, joka on kondensaattorien kanssa resonanssissa n. 8 kHz:lla ja sain ulostulon amplitudin tällä taajuudella kasvamaan huomattavasti. Nostin vielä biaksen 30 volttiin. Kokeilin kuormittaa kertojaa vastuksella, ja sain jopa n. 700 mW tehoa ulos. Kytkennästä tuli tällainen:


Konkkien yli olevan tasajännitteen hidas muuttaminen vaatii hyvin vähän tehoa, mutta se vaikuttaa paljon ulos tulevan signaalin amplitudiin ja tehoon. Kytkennällä on siis jopa tietynlaista vahvistusta, ja toimiihan se näin tavallaan myös aliharmonisena ylössekoittimena.

Vielä mielenkiintoisemmaksi tämä alkaa mennä siinä, että lähes sama kytkentä takaperin toimii myös taajuusjakajana. Tällä kertaa ulostulossa oleva kela resonoi kondensaattorien kanssa hieman matalammalla n. 4 kHz taajuudella. Kun sisään syöttää tästä kaksinkertaista taajuutta, kytkentä alkaa toimia parametrisena vahvistimena ja värähdellä sisään syötetyn taajuuden puolikkaalla.


Täytyy myöntää, etten aivan täysin vielä ymmärrä tällaisten parametrisen vahvistimien tai oskillaattorien toimintaa, mutta sehän näitä houkutteleekin kokeilemaan. Vahvistimen tekeminen käyttäen puolijohteiden sijaan aktiivikomponentteina pelkkiä ”huonoja” kondensaattoreita on varsin kiehtova ajatus. Pitää varmaan seuraavaksi yrittää tehdä ihan kunnon vahvistin.

PRK:n elektroniikkablogi aloittaa

Uutena jäsenpalveluna PRK tarjoaa blogialustaa jäsenten projektien dokumentoimiseksi. Uusia käyttäjätunnuksia saa johtokunnalta.