...

Binär FSK-modulation Oscar Eriksson LiU-ITN-TEK-A--09/026--SE

by user

on
Category: Documents
19

views

Report

Comments

Transcript

Binär FSK-modulation Oscar Eriksson LiU-ITN-TEK-A--09/026--SE
LiU-ITN-TEK-A--09/026--SE
Binär FSK-modulation
Oscar Eriksson
2009-05-11
Department of Science and Technology
Linköping University
SE-601 74 Norrköping, Sweden
Institutionen för teknik och naturvetenskap
Linköpings Universitet
601 74 Norrköping
LiU-ITN-TEK-A--09/026--SE
Binär FSK-modulation
Examensarbete utfört i elektronikdesign
vid Tekniska Högskolan vid
Linköpings universitet
Oscar Eriksson
Handledare Jonas Persson
Examinator Ole Pedersen
Norrköping 2009-05-11
Upphovsrätt
Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare –
under en längre tid från publiceringsdatum under förutsättning att inga extraordinära omständigheter uppstår.
Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner,
skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för
ickekommersiell forskning och för undervisning. Överföring av upphovsrätten
vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av
dokumentet kräver upphovsmannens medgivande. För att garantera äktheten,
säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ
art.
Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i
den omfattning som god sed kräver vid användning av dokumentet på ovan
beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan
form eller i sådant sammanhang som är kränkande för upphovsmannens litterära
eller konstnärliga anseende eller egenart.
För ytterligare information om Linköping University Electronic Press se
förlagets hemsida http://www.ep.liu.se/
Copyright
The publishers will keep this document online on the Internet - or its possible
replacement - for a considerable time from the date of publication barring
exceptional circumstances.
The online availability of the document implies a permanent permission for
anyone to read, to download, to print out single copies for your own use and to
use it unchanged for any non-commercial research and educational purpose.
Subsequent transfers of copyright cannot revoke this permission. All other uses
of the document are conditional on the consent of the copyright owner. The
publisher has taken technical and administrative measures to assure authenticity,
security and accessibility.
According to intellectual property law the author has the right to be
mentioned when his/her work is accessed as described above and to be protected
against infringement.
For additional information about the Linköping University Electronic Press
and its procedures for publication and for assurance of document integrity,
please refer to its WWW home page: http://www.ep.liu.se/
© Oscar Eriksson
Abstract
This report is written to a masters thesis project at Linköping University. The
project has been executed at a small company in Norrköping, Field Embedded Communications AB.
The report covers the development of a software repository for MSK modulation.
The code is developed in a modular fashion in order to increase flexibility thus
making the code adaptible for different hardware platforms.
The report contains information about:
• Modulation design
• Software simulations
• Hardware tests
No code is included for competitional reasons.
Sammanfattning
Denna rapport är skriven till ett examensarbete på 30hp utfört vid Linköpings Universitet. Arbetet har utförts på ett litet företag i Norrköping, Field Embedded Communications AB.
Rapporten behandlar utvecklingen av ett mjukvarubibliotek för modulation av typen
MSK. Koden är modulärt uppbyggd för maximal flexibilitet då den enkelt ska kunna
anpassas för olika hårdvaruplattformar.
De delar som presenteras är:
• Design av modulationsalgoritmer
• Simulationer av algoritmerna
• Test i hårdvara
Av konkurrensskäl är ingen programmeringskod bifogad.
i
Innehåll
1 Inledning
1
1.1
Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.3
Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.4
Designdirektiv
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.5
Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2 Teori
3
2.1
Signaler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Brus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Spektraltäthet . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.3
Ortogonalitet av signaler
. . . . . . . . . . . . . . . . . . . .
4
2.1.4
Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.5
CODEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
Datakommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2.1
Kommunikationssystem . . . . . . . . . . . . . . . . . . . . .
6
2.2.2
Modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.3
Mjukvaruradio . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.4
Bitar och symboler . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.5
Basband . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
Digital modulation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2
2.3
iii
iv
Innehåll
2.4
2.3.1
FSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.2
MSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Superheterodyn arkitektur . . . . . . . . . . . . . . . . . . . . . . . .
10
3 Design
13
3.1
Hårdvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.2
Mjukvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.3
Modulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4
Sändare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.5
Mottagare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.5.1
Synkronisering . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.5.2
Avkodning . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
4 Simulering
4.1
4.2
4.3
19
Bruskänslighet av demodulering . . . . . . . . . . . . . . . . . . . . .
19
4.1.1
Beskrivning av simulation . . . . . . . . . . . . . . . . . . . .
20
4.1.2
Simulationsresultat . . . . . . . . . . . . . . . . . . . . . . . .
20
Bruskänslighet av synkronisering . . . . . . . . . . . . . . . . . . . .
21
4.2.1
Beskrivning av simulationen . . . . . . . . . . . . . . . . . . .
21
4.2.2
Simulationsresultat . . . . . . . . . . . . . . . . . . . . . . . .
22
4.2.3
Beskrivning av simulation med lågpassfilter . . . . . . . . . .
23
4.2.4
Simulationsresultat med lågpassfilter . . . . . . . . . . . . . .
24
Drivning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.3.1
Beskrivning av simulationen . . . . . . . . . . . . . . . . . . .
25
4.3.2
Simulationsresultat . . . . . . . . . . . . . . . . . . . . . . . .
25
5 Implementation
5.1
29
Laboreringsplattform . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.1.1
Tait-radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.1.2
ARM7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.2
5.3
Test mellan två datorer . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.2.1
Sändare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.2.2
Mottagare . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.2.3
Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
Test mellan dator och mikrokontroller . . . . . . . . . . . . . . . . .
33
5.3.1
Anpassning av mjukvara . . . . . . . . . . . . . . . . . . . . .
33
5.3.2
Processoranvändning . . . . . . . . . . . . . . . . . . . . . . .
33
5.3.3
Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6 Rekommendationer för fortsatt arbete
37
7 Slutsatser
39
Nomenklatur
41
Förteckningar
43
Litteraturförteckning
45
Kapitel 1
Inledning
Denna rapport är skriven till ett examensarbete på 30hp utfört vid Linköpings
Universitet. Arbetet har utförts på ett litet företag i Norrköping, Field Embedded
Communications AB. Företaget grundades 2007 i Norrköping av Henrik Bergström
och Jonas Persson. Fields huvudsakliga verksamhetsområde är elektronik- och systemkonstruktion inom inbyggda system, telemetri och radioteknik.
1.1
Bakgrund
Genom att utveckla ett mjukvarubibliotek för modulering kan en generell processor
med några få kringkomponenter ersätta relativt dyra kretsar för modulation. Detta
reducerar komponentkostnader samt sparar utrymme på mönsterkort. Att utföra
modulation i mjukvara medför även ökad flexibilitet då färdigtillverkade kretsar
vanligen är låsta till exempelvis en viss typ av modulation.
1.2
Syfte
Rapporten behandlar arbetet att ta fram ett generellt mjukvarubibliotek för att
modulera och demodulera data med FSK modulation. Koden ska vara modulärt
uppbyggt för att enkelt kunna användas av olika hårdvaruplattformar. Den modulerade signalen ska sändas via radio av superheterodyn arkitektur, således kommer
modulationen genomföras på basbandssignalen.
1
2
Inledning
1.3
Metod
Arbetet att ta fram mjukvarubiblioteket har delats in i tre delar:
• Design och programmering
• Simulation
• Tester i hårdvara
Vid det första steget valdes parametrar rörande modulation och arkitektur av programvaran. Denna simulerades sedan för att säkerställa funktionalitet. Till sist utfördes
praktiska test i hårdvara för att kontrollera funktion i praktiken.
Under arbetets gång utfördes dessa delar iterativt då fel och buggar upptäcktes i
senare steg.
1.4
Designdirektiv
• Programmeringskoden ska vara modulärt uppbyggd då det underlättar för
vidare utveckling
• Programbiblioteket ska med smärre modifikationer kunna exekveras på olika
hårdvaruplattformar
• Vid utveckling ska open source programvara användas
1.5
Avgränsningar
• Endast binär signalering ska nyttjas
• Enbart skriva mjukvara för fysiska lagret enligt OSI modellen, vilket innebär:
– Ingen kollisionshantering
– Ingen adressering
– Ingen vidarelänkning
– Ingen återsändning
• Datatransmissionen är okrypterad
• Ingen felkorrigeringsalgoritm används
Kapitel 2
Teori
I detta kapitel kommer bakgrundsteori att behandlas, mest för att underlätta för
läsaren. De begrepp som kommer diskuteras, kommer diskuteras i korthet, vilket
innebär att de är långt ifrån fullständiga. Om mer information önskas, hänvisas
läsaren till att på egen hand studera respektive källa.
2.1
2.1.1
Signaler
Brus
En av de största orsakerna till databortfall i trådlösa överföringar är brus. Brus är
en slumpartad process som kan bero på flera källor, tex: termiskt brus genererat
av RF-komponenter och brus från atmosfärisk strålning. Signalen kommer således
påverkas av brus både i luften och i hårdvaran [6]. Omvandlingen från analog till
digital signal kommer även den att introducera brus i form av samplingsbrus [8], mer
om det i 2.1.4.
Bruset kommer uppträda som en slumpartad spänning eller ström, vilket leder till att
det inte går att förutsäga dess värde. Av den anledningen måste brus ses med statistiska mått. Vanligt är att brus anges i effektivvärde för ett specifikt frekvensintervall.
Generellt kan brus iakttagas som en statistisk fördelning över frekvensinnehållet i
brussignalen, detta kallas för brusets spektraltäthet och anges i datablad ofta som
EN
√ där EN är brusets medelvärde och B är brusbandbredden. Detta får då följakB
V
.
tligen enheten √
Hz
Då brusets amplitud varierar slumpartat och är normalfördelat brukar det kallas för
vitt brus. Anledningen till att det kallas för just vitt brus är att spektraltätheten är
3
4
Teori
likformigt fördelad i frekvensplanet, på samma sätt som vitt ljus innehåller samtliga
färger. Andra namn på vitt brus är termiskt brus och Johnson-brus. Det vita bruset
uppkommer på grund av elektriska laddningars värmerörelser i ledarmaterialet, då
atomer och elektroner slumpvis byter position på grund av materialets temperatur.
Ett vanligt och användbart sätt att presentera brus är förhållandet mellan signalstyrka och brusstyrka, detta kallas för signalbrusförhållande eller på engelska Signal
to Noice Ratio, SNR. Detta definieras som kvoten mellan signal och brus och anges
vanligen i decibel. [4]
SN R =
2
Usignal
Psignal
=
2
Pbrus
Ubrus
SN RdB = 10 · log
2.1.2
(2.1a)
Usignal
Psignal
= 20 · log
Pbrus
Ubrus
(2.1b)
Spektraltäthet
En signals energi- eller effektdistribution i frekvensdomänen kallas för spektraltäthet.
Detta koncept är användbart då signaler filtreras. [9]
2.1.3
Ortogonalitet av signaler
En mängd signaler {ψj (t)} som uppfyller kravet,
ZT
0
ψj (t)ψk (t)dt = Kj δjk , där δjk =
(
1 då j = k
0 annars
(2.2)
sägs vara ortogonala. När funktionerna {ψj (t)} är normaliserade så att Kj = 1, sägs
signalerna vara ortonormala.
En anledning att fokusera på ortogonala signaler är att dessa, likt enhetsvektorer,
kan användas som basvektorer för att spänna upp ett signalrum. Alla signaler kan på
så vis uttryckas som en linjärkombination utav basvektorer, vilket nyttjas i signalmottagararkitekturer för att detektera olika signaler. Rent teoretiskt behöver bara
vektorerna ligga i olika plan för att åstadkomma detta, men då de är ortogonala
kommer det euklidiska avståndet mellan dessa att vara maximalt. Det leder till att
de inkommande signalerna med större säkerhet kan bestämmas, då det euklidiska
avståndet mellan basvektorerna (referensfrekvenserna) är så stort som möjligt. [9]
2.1 Signaler
2.1.4
5
Sampling
Då många signaler är analoga, krävs att dessa omvandlas till digitala då de ska
behandlas i en processor. Processen att omvandla en kontinuerlig-tidssignal till en
diskret-tidssignal kallas för sampling. Det innebär att en analog signal avläses upprepade gånger med ett känt tidsintervall.
För att kunna lagra och behandla dessa mätvärden, eller sampels, krävs att de kvantiseras till kända nivåer. Antalet nivåer som används brukar kallas för ordlängd eller
upplösning. Eftersom att den riktiga signalen kommer avrundas till närmaste kända
nivå, innebär det att den samplade signalen kommer vara felaktig. Detta fel kan ses
som en typ av brus som brukar kallas för kvantiseringsbrus. Om upplösningen ökar
kommer således kvantiseringsbruset att minska.
Samplingsintervallet, eller samplingstakten, bestäms utav frekvensinnehållet i signalen som samplas. Enligt Shannons samplingsteorem krävs en samplingstakt på
minst dubbla frekvensen av högsta frekvensbidraget i signalen, fM , för att kunna
representera signalen korrekt. [8]
fs ≥ 2fM
(2.3)
Enligt [9] och många andra källor kallas detta teorem för Nyquist kriteriet.
Om Shannonkriteriet i ekvationen 2.3 inte uppfylls, kommer en effekt kallad vikningseffekten att introduceras. Kort innebär det att frekvenser högre än halva samplingstakten kommer ge upphov till felaktiga frekvenskomponenter i signalen. Observera att Shannonkriteriet bara ger minsta möjliga samplingsfrekvens, i verkligheten är oftast en högre samplingstakt önskvärd.
Den parameter som oftast bestämmer samplingstakt och upplösning är beräkningshastigheten i hårdvara. Om upplösningen ökar, medför det ökade beräkningstider
då talen blir större. Om istället samplingstakten ökar kommer behandlingstiden av
varje sampel minska, vilket ställer krav på snabbare beräkningar. [8]
2.1.5
CODEC
CODEC står för CODer - DECoder, vilket betyder kodning och avkodning. Den
fungerar som ett gränssnitt mellan analoga- och digitala signaler och är primärt
utvecklad för telekommunikation. En CODEC är i stort sett uppdelad i två kanaler,
en för att omvandla analog till digital, ADC, och en för att omvandla digital till
analog, DAC. Ett blockschema för att tydliggöra en CODEC visas i figur 2.1.
För att förhindra vikningsdistortion är ett lågpassfilter monterat innan ADC:n och
ett rekonstruktionsfilter är monterat efter DAC:en. Rekonstruktionsfiltret är ett lågpassfilter som har till uppgift att jämna till utsignalen och förhindra uppkomsten av
felaktiga frekvensbidrag. Idealt har bägge filter linjär fasgång, platt frekvensgång i
6
Teori
passbandet samt en brant övergång till spärrbandet vid halva samplingshastigheten.
[8]
Figur 2.1. Blockschema över en generell CODEC
2.2
Datakommunikation
2.2.1
Kommunikationssystem
Blockdiagrammet i figur 2.2 visar de olika delarna som finns vid ett generellt datakommunikationssystem.
Datat formateras först för att sändas, detta kan även innebära att data för feldetektering och korrigering läggs på den ursprungliga datat. Efter det går det digitala
datat till modulatorn som gör om det digitala datat till vågformer som sedan kan
sändas genom än sändare. Efter det att vågformerna färdats genom en kanal tas
de emot av en mottagare för att sedan omvandlas till digitalt data i demodulatorn.
Till sist omvandlas det formaterade datat tillbaka till dess ursprungliga form. Om
feldetektering och felkorrigering är pålagt i första steget, kan man här upptäcka och
i viss mån korrigera felaktigt data.
Synkronisering är till för att signalinformationen i alla block ska vara densamma,
detta för att kunna särskilja olika delar i signalen och se till att delarna behandlas i
rätt ordning. I blockschemat är synkroniseringsblocket ritat utan några förbindelser
till andra block, det är för att synkroniseringen inverkar på de övriga blocken.
Det som skiljer kommunikation över radio från andra system, är att kanalen består
av luft. Sändaren och mottagaren kommer i det fallet att bestå av radiohårdvara,
ofta av superheterodyn arkitektur (beskrivet i 2.4). [9]
2.2 Datakommunikation
7
Figur 2.2. Blockschema av kommunikationssystem
2.2.2
Modem
Modulation och demodulationsblocken i figur 2.2 brukar tillsammans kallas för modem. Detta är en sammansättning av orden MODulering och DEModualering. Ibland
kan även de andra blocken i systemet ingå i det som kallas modem; när detta är fallet
kan modem tänkas på som den intelligenta delen av systemet, medan sändaren och
mottagaren kan tänkas på som musklerna i systemet. [9]
Anledningen till att datat moduleras är för att kunna kontrollera signalens frekvensspektrum, vilket innebär att det är möjligt att nyttja bandbredden på ett effektivare sätt.
[6] Mer om modulation i sektion 2.3.
2.2.3
Mjukvaruradio
Enligt [7] defineras mjukvaruradio som “a radio that is substantially defined in software and whose physical layer behavior can be significantly altered through changes
to its software”. Det betyder att en radio som delvis är uppbyggt i mjukvara samt
att mjukvaran kan styra hårdvaran kan kallas för en mjukvaruradio. Normalt brukar
termen mjukvaruradio syfta till en radio som har en statisk hårdvara men får sin
flexibilitet genom mjukvara. En helt konfigurerbar hårdvara som kan programmeras
via mjukvara kallas för mjuk-radio.
Den största fördelen med mjukvaruradio är dess flexibilitet. Till exempel kan samma radio användas till olika applikationer då hårdvaran kan omkonfigureras för att
passa olika system. Nya möjligheter att använda samma radio för applikationer som
verkar globalt, då radion i mjukvara kan konfigureras efter regionens radiospecifikationer. Med konventionella radios skulle dessa funktioner behöva realiseras i olika
hårdvara, vilket skulle leda till ett större och där med dyrare kretskort. I och med
att ändringar kan utföras i mjukvara, minskas även utvecklingstiden för systemet då
8
Teori
man slipper göra olika revisioner av kretskort samt att uppgraderingsmöjligheterna
för radiosystemet ökar. [7]
2.2.4
Bitar och symboler
En bit är en digital signal som endast kan ha två värden, vanligen ett och noll. Data
som skickas är således en ström av bitar som modulerats. Hastigheten på data i
strömmen brukar vanligtvis mätas i enheten bitar per sekund, bps.
Om det istället ses till den modulerade signalen, brukar denna delas in i symboler.
Varje symbol kan koda n bitar, vilket innebär att det krävs 2n olika symboler för att
kunna koda datat. Symbolhastigheten (engelskans baud rate) kan beräknas utifrån
datatakten och antalet bitar per symbol enligt ekvationen 2.4. [3]
baud rate =
2.2.5
1
· bps
n
(2.4)
Basband
Termen basband syftar till en signal vars spektrum sträcker sig från likström (eller
nära likström) till ett ändligt värde, ofta lägre än några megaherz.
I kommunikationssystem behövs det digitala datat omvandlas till analoga vågformer
som är kompatibla med kanalen. Dessa analoga vågformer kallas då för basband. När
basbandssignalen når mottagaren omvandlas den tillbaka till sin digitala motsvarighet.
Data som kommer ut från en modulator kallas således för basbandssignal. [9]
2.3
Digital modulation
Målet med digitala kommunikationssystem är att överföra digitala signaler från en
plats till en annan. Detta görs vanligtvis genom att modulera en sinusformad bärvåg
av karaktären,
sc (t) = A · cos(ωt + φ).
(2.5)
Bärvågen har tre frihetsgrader: amplitud (A), frekvens (ω) samt fas (φ). Dessa kan
användas var för sig eller tillsammans för att representera digitala data.
Digitala modulationstekniker har många fördelar gentemot analoga modulationstekniker inom moderna trådlösa system. Inte nog med att det är enklare att implementera krypterings- och felkorrigeringsalgoritmer, digital modulation har även
fördelar som att signalen är mindre beroende av dämpning och brus. [6]
2.3 Digital modulation
2.3.1
9
FSK
FSK står för frequency shift keying och betyder frekvensskiftssignalering. Denna signalering innebär att datasignaler representeras av två sinusformade signaler med
olika frekvens [6]. Det råder ingen bestämmelse över vilka frekvenser som används,
eller hur många signaler som används. Om fler än två signaler används brukar signaleringen kallas för M -FSK, där M står för antalet nivåer (frekvenser). Matematisk
definition av normaliserad FSK följer i ekvation 2.6 och ett grafiskt exempel i figur
2.3. [9]
0≤t≤T
i = 1, ..., M
(2.6)
Data
sf sk (t) = cos(ωi t + φ)
1
2
3
4
1
2
3
4
1
2
Symboler
3
4
FSK
0
MSK
0
0
Figur 2.3. Jämförelse mellan FSK och MSK
2.3.2
MSK
MSK (minimum shift keying) tillhör modulationskategorin CPM, continuous phase
modulation. Denna typ av modulering innebär att signalen har kontinuerlig fas.
MSK skulle då kunna ses som ett specialfall utav FSK, CPFSK, som innebär att
frekvensskiftssignaleringen har kontinuerlig fas. Skillnad mellan FSK och MSK åskådliggörs i figur 2.3. En positiv följd av kontinuerlig fas är att signalens spektrum kommer
bli smalare än vid icke-kontinuerlig fas.
10
Teori
Ordet minimum i MSK kommer av att de två signalernas frekvenser skall vara ortogonala och skillnadenmellan frekvenserna minimal. Detta markeras i ekvation 2.7
dk
där f0 är frekvensen på bärvågen och dk = ±1 för datat.
av produkten f0 + 4T
Varje symbol indexeras av bokstaven k.
dk
smsk (t) = cos 2π f0 +
t + xk
4T
kT < t < (k + 1)T
(2.7)
Under varje symboltid, T är xk konstant och kan ha något av värdena, 0 eller π. Detta
är en konstruktion för att se till att smsk (t) får kontinuerlig fas i symbolövergångarna
t = kT . En ekvation för att beräkna xk rekursivt presenteras i ekvation 2.8. [9]
πk
xk = xk−1 +
(dk−1 − dk ) modulo 2π
2
2.4
(2.8)
Superheterodyn arkitektur
Den isärklass vanligaste typen av mottagare idag är superheterodynmottaren som
visas i figur 2.4. Denna mottagararkitektur är resultatet av över 50 års mottagarutveckling och används i majoriteten av datakommunikationssystem, mobiltelefoni, TV, radio samt radarsystem.
När RF-signalen först tas emot av antennen är den mycket svag, således måste den
förstärkas för att kunna användas. Efter det blandas signalens frekvens ned genom
multiplikation med en given frekvens, denna genereras från lokaloscillatorn, LO. LO
varieras för att kunna selektera vilken bärfrekvens som ska avlyssnas. För att plocka
bort oönskade frekvensbidrag, bandpassfiltreras den nedblandade signalen. Där efter
matas signalen in i nästkommande block enligt figuren 2.2.
För att ytterligare förbättra selekteringen av bärfrekvensen, är det vanligt att ett
bandpassfilter monteras mellan antenn och RF-förstärkare. Detta filter brukar kallas
för förvals-bandpassfilter. För att undvika en effekt kallad spegling, brukar även ett
bandpassfilter moteras innan blandaren. Hur spegling uppkommer visas i räkneexempel 2.1.
Vid högre frekvenser används ofta dubbla blandarsteg för att minska fel på grund av
ostabilitet av lokaloscillatorn. Mottagaren kallas då för dual-conversion superheterodyn mottagare. [6]
Att multiplicera en basbandssignal med en högre frekvens kan kallas för att heterodyna1 . En heterodyn sändare innebär således att basbandssignalen heterodynas med
en bärvågsfrekvens för att sedan förstärkas och matas till en antenn. För att plocka bort oönskade frekvensbidrag från heterodyningen kan signalen bandpassfiltreras
mellan mixern och effektförstärkaren. [9]
1 Författarens
översättning av det engelska verbet, heterodyne
2.4 Superheterodyn arkitektur
11
Figur 2.4. Blockschema av superheterodyn-arkitektur
Exempel 2.1
Detta exempel illustrerar hur en signal påverkas av att sändas och sedan mottagas
av superheterodyn arkitektur med bärvågen fc . Signalen som skickas är en sinusvåg,
m(t) = cos 2πfm t. För att ytterligare förenkla beräkningarna antas förstärkningen i
alla steg vara normaliserad.
Steg 1, uppblandning:
s(t) = m(t) · cos 2πfc t = / cos α · cos β =
=
1
2
· cos 2πt(fc + fm ) +
1
2
1
2
· cos(α + β) +
1
2
· cos(α − β)/ =
· cos 2πt(fc − fm )
Här noteras att heterodyningen kommer generera två stycken frekvensbidrag centrerat kring bärvågsfrekvensen. Dessa är varandras spegelbilder, därav spegeleffekten.
Om ett det finns ett bandpassfilter för att filtrera bort den ena spegelbilden kommer denna frekvenskomponent försvinna, kvar finns då bara frekvenskomponenten
fc + fm (eller fc − fm ).
Steg 3, nedblandning:
s(t)|BP F ⇒ s′ (t) = cos 2πt(fc + fm )
sif (t) = s′ (t) · cos 2πfc t = cos 2πt(fc + fm ) · cos 2πfc t =
=
1
2
· cos 2πt(2fc + fm ) +
1
2
· cos 2πt(fm )
sut (t) = sif |BP F ⇒ sut (t) = cos 2πfm t = m(t)
Kapitel 3
Design
I detta kapitel kommer främst utformningen av mjukvara diskuteras. Fokus på mjukvaran har legat vid att få en bra kompromiss mellan processorbelastning och robusthet. Även valda parametrar kring modulationen kommer diskuteras.
3.1
Hårdvara
Den del som exjobbet omfattar är modulering av basbandssignaler som sedan ska
kopplas in till befintlig radiodel. Denna radiodel är av superheterodyn arkitektur
vilket diskuterats tidigare. Det innebär att signalen in i radiodelen måste vara en
analog spänning. Den processor som ska sköta signalbehandlingen måste därför kopplas ihop med ett analogt gränssnitt, detta sker via en ljudcodec. Figur 3.1 visar
blockdiagram över hårdvaran.
Figur 3.1. Blockschema över systemets hårdvara
Under arbetets gång har processor och codec varit okänd, vilket lett till att koden
är så generellt utformad som möjlig. Den är uppdelad i block för att på ett smidigt
sätt kunna anpassas efter godtycklig hårdvaruplattform. För att enkelt kunna testa
och utvärdera koden har en vanlig PC med Linux som operativsystem använts som
testplattform.
13
14
3.2
Design
Mjukvara
Det primära programspråket som används är C. Detta valdes då det är ett allmänt
vedertaget programmeringsspråk där det finns gott om kompilatorer till olika plattformar. Kompilatorn som använts tillhör GCC, då denna är lätt tillgänglig till linux.
Alla algoritmer och databehandling är skriven i C kod, vilket medförde att tester av
dessa även de skrevs i C kod.
För att presentera data har python och pythonbilbioteket numpy använts. Valet av
detta föll på att det är gratis, enkelt att använda samt att resultatet blir bra.
All kod är skriven i mindre moduler, detta för att på ett flexibelt sätt kunna anpassa
efter olika plattformar. Till exempel räcker det att ändra i ljud-modulen om codec
bytes. Modulstrukturen innebär även att det är enkelt att i efterhand kunna lägga
till nya funktioner samt återvinna funktioner i andra sammanhang.
3.3
Modulation
Den modulationstyp som valts är MSK. Exjobbets ursprungliga tanke var att nyttja två nivåers frekvensskift, men då specialfallet av FSK, MSK, har något smalare
bandbredd har denna valts. Demodulatorarkitekturen, som diskuteras senare i kapitlet, fungerar för både FSK och MSK. Då frekvensskift av radiovågen sker genom att
modulera bärvågen med en sinusformad basbandssignal, genereras två sinusvågor
med olika frekvens för att markera ettor och nollor. På så vis går det att tala om
frekvenser även på basbandssidan.
Då MSK innebär att frekvenserna på basbandet är ortogonala, har mark-frekvensen
valts till halva datatakten och space-frekvensen till samma frekvens som datatakten.
Ser man istället på vågformer, kommer mark-signalen vara en halv period per symbol
och space-signalen en hel period per symbol. Ett bevis på att dessa signaler är
ortogonala visas nedan.
RT
0
=
Rπ
0
s1 (t)s2 (t) dt =
R 2π
0
sin x · sin x2 dx =
sin 2y · sin y dy = / Standardintegral enligt [2] / = 0
Ytterligare ett bevis för att dessa frekvenser är giltiga följer av ton-separationsegenskaperna
i ekvation 2.7
1
1
1
R
− f0 −
=
f0 +
= .
4T
4T
2T
2
3.4 Sändare
3.4
15
Sändare
För att generera modulerat data med så liten inverkan på processorn som möjligt,
har två förgenererade LUT används för att snabbt kunna generera det modulerade
datat. Dessa tabeller beräknas i initieringsskedet av algoritmerna, tillsammans med
annan nödvändig data. För att undvika att använda flyttal måste det gå ett jämnt
antal samples per symbol, vilket är lätt att kontrollräkna då antalet samples per
symbol kan beräknas enligt,
Samplingshastighet
= Antal sampelpunkter per symbol
Symbolhastighet
(3.1)
Sampel datat är lagrat i formatet s161 då många ljudcodecs stödjer detta format.
Vanliga ljudkort stödjer även de vanligen det formatet, vilket innebär att man kan
skriva direkt till ljudkortet i PC miljö för att med ljudkortet generera den modulerade
signalen.
Rent praktiskt användade av modulations algoritmen visas i exemplet 3.1.
Exempel 3.1
I kodexemplet kommer 2 bytes (0x23 och 0xA2) moduleras med en datatakt på
4800, sampelhastighet som är 48000 och en amplitud på 10000. Detta betyder att
det kommer gå 10 samplingar per symbol. Dessa kommer ha en amplitud på 10000
vilket betyder 30% av maximal amplitud.
u16
u16
u16
u08
u08
s16
u32
baudRate = 4800;
sampleRate = 48000;
amplitude = 10000;
msg[2] = {0x23, 0xA2};
msgLength = 2;
signal[1000];
signalLength = 1000;
msk_t *m = MSK_init(baudRate, sampleRate, amplitude);
MSK_modulate(m, &msg, msgLength, &signal, &signalLength);
1 Egen
deklarerad datatyp av 2-komplementsdata i 2 bytes
16
3.5
Design
Mottagare
För att nyttja hårdvara på ett så smidigt sätt som möjligt, har läsning och avkodning
av data delats in i två olika block som exekveras samtidigt enligt så kallad pipelinestruktur. Detta innebär att data samplas från ljudcodecen och lagras i en buffert,
medan föregående buffert avkodas parallelt. För att åstadkomma detta i C sker
inläsningen i en separat tråd, medan avkodning sker i main-loopen. Efter datat
avkodas väntar den på att sampelbufferten skall fyllas för att sedan börja om igen.
Figur 3.2. Funktionsskiss av mottagararkitekturen
Fördelen med att läsa in data i buffertar är att DMA kanaler kan nyttjas. Detta
leder till att mycket data kan flyttas medan processorn jobbar med annat.
Genom att avkoda och lagra samplingar samtidigt, minskas både minnesanvändning
och tid då ett medelande tas emot. Det ställer dock kravet på demodulationsalgoritmerna att de klarar att avkoda data över blockgränserna.
Demodulatorn som valts är av koherent typ. Det innebär att signalens fas måste
vara känd. För att kunna avkoda data krävas att avkodningen delas in i två steg:
synkronisering och avkodning. Först sker synkronisering sedan avkodning. En bild
på ett datapaket visas i figur 3.3.
Figur 3.3. Datapaket i lägsta lagret
3.5.1
Synkronisering
Synkronisering är till för att få reda på var själva informationsbärande signalen
börjar. Detta kan indelas i två delar: Preambel- och ordsynkronisering. Preambel-
3.5 Mottagare
17
synkroniseringen är till för att detektera att det är en signal som skickas, samt att
synkronisera fasläget mot den interna referensfasen. Sedan för att veta när signalen
börjar används ordsynkroniseringen.
Den preambelsynkroniseringsmetod som används jämför tiden mellan signalens nollövergångar mot en känd sekvens. När tidsfelet är tillräckligt litet betyder det att
signalen är i fas, med andra ord fås information om var varje symbol börjar. Nackdelen med att titta efter nollgenomgångar är att känsligheten för brus ökar, då
bruset kan skapa falska nollgenomgångar. Genom att skicka en längre synkroniseringssekvens än vad som krävs, ges preambelsynkroniseringen fler chanser att hitta
fasen och sannolikheten att hitta den ökar. Ytterligare en fördel med en lång preambel är att det i radiomottagaren och sändaren kan ligga vissa fördröjningar innan
signalöverföringen är stabil.
Då signalens fasläge är känt, behöver man nu veta var själva datameddelandet börjar
och synkroniseringsdelen slutar. Detta sker genom ordsynkroniseringen. Den fungerar
som så att varje bit avkodas och de senaste bitarna jämförs mot en känd sekvens. Som
synkroniseringslängd valdes fyra bytes vilket visat sig fungera bra. För att avkoda
varje bit används samma metod som i följande delkapitel.
3.5.2
Avkodning
Då det demodulerade datat kommer bestå av en likadan signal som sändaren genererade kommer denna bestå av två olika vågformer. För att detektera vilken av vågformerna som mottas, jämförs insignalen med två kända signaler. Det är alltså korrelationen mellan den inkommande signalen mot två referenssignaler som används
för att bestämma vilken vågform det är. Denna arkitektur är generell och kan användas för detektering av fler än två signaler, samt för signaler som inte nödvändigtvis
behöver vara sinusformade.
Genom att multiplicera ihop signalen med en referenssignal över en hel period fås
hur mycket av energiinnehållet i signalerna som överensstämmer.
ZT
s(t)sref (t)dt = E
(3.2)
0
Energiinnehållet kommer således vara större för den riktiga signalen än för den falska.
Utifrån den vetskapen kan ett beslut om vad det är för signal göras. Då referenssignalerna är ortogonala får det till följd att den falska signalens energiinnehåll kommer
vara betydligt mindre (idealt noll) än den riktiga. Arkitekturen på avkodaren visas
i figur 3.4.
18
Design
Figur 3.4. Blockschema över avkodningsarkitekturen
Kapitel 4
Simulering
Mycket arbete har lagts på att simulera delar av koden för att säkerställa dess
funktionalitet. För att simulera algoritmerna har olika scenarios programmerats i C
kod för att kunna erhålla data.
Ett alternativ hade varit att använda MATLAB1 , scilab2 eller numpy biblioteket
till python som simuleringsmiljö. Fördelarna med dessa är att det finns inbyggda
funktioner för att rita upp frekvensspektrum och att plotta datat på olika sätt.
Nackdelarna hade varit att koden skulle behöva portas för att passa respektive miljö.
Istället valdes att skriva testmiljön i C kod för att på ett så enkelt sätt som möjligt
nyttja den faktiska koden. För att kunna presentera datat, har simulationerna genererat textfiler med data som sedan plottats med hjälp av python. Ytterligare en fördel
med att göra simulationerna i C är att GCC ofta kompilerar koden effektivare en
någon utvecklingsmiljö, vilket får effekten att beräkningstiderna för simulationerna
minskar.
4.1
Bruskänslighet av demodulering
En av de allra vanligaste orsakerna till korrupt data är brus. Därför har simulationer
med vitt brus utförts. Vitt brus innebär att brussignalen har lika mycket av alla
frekvenser.
1 Kommersiell
2 Öppen
utvecklingsmiljö
utvecklingsmiljö
19
20
Simulering
4.1.1
Beskrivning av simulation
För att testa hur bruskänslig algoritmen är, har följande testmiljö programmerats.
En ändligt lång dataström genererar modulerat data som adderas med en brussignal
bestående av vitt brus med känd maximal amplitud. Summan av de två signalerna
demoduleras för att generera en dataström, denna jämförs med den ursprungliga
dataströmmen och antalet fel detekteras. Ett blockschema av modellen kan ses i
figur 4.1.
Figur 4.1. Blockschema över brustest konstruktionen
Denna sekvens genomförs sedan för olika brusnivåer för att få fram en kurva på hur
väl algoritmen presterar. Då antalet fel är en dålig enhet när det gäller att jämföra
olika mätserier, räknas istället felen om till procent. På så vis går det bra att jämföra
testserier som inte har lika långa dataströmmar.
4.1.2
Simulationsresultat
Test utav bruskänslighet för demodulationen sker under följande förutsättningar:
• Avkodningen sker utan synkronisering
• Bruset är vitt, alltså jämt fördelat i frekvensdomänen
• Signalamplituden är på 30% av maximal amplitud
• Datalängden på varje testserie är 100000 bytes
• Samplingstakten är 48000 samplingar per sekund
I figur 4.2 syns tydligt att då data takten ökar, ökar även sannolikheten för fel i
överföringen. Det som praktiskt skiljer datatakterna åt, är antalet bitar per symbol.
En datatakt på 9600 bitar per sekund och en samplingshastighet på 48000 resulterar
enligt ekvation 3.1 i 5 sampel per symbol medan en datatakt på 1200 bitar per
sekund i samma samplingshastighet resulterar i 40 sampel per symbol. Slutsatsen
som kan dras av detta är att fler sampelpunkter per symbol leder till en brusrobustare modulation.
4.2 Bruskänslighet av synkronisering
21
90
1200 Baud
2400 Baud
80
4800 Baud
9600 Baud
Felsannolikhet (%)
70
60
50
40
30
20
10
0
-10
-5
5
0
10
15
SNR (dB)
Figur 4.2. Sannolikhet för fel beroende av brus
4.2
Bruskänslighet av synkronisering
Synkronisering kan som tidigare diskuteras delas in i två delar: Preambel- och
ordsynkronisering. Då ordsynkroniseringen fungerar enligt samma algoritm som avkodningen, torde således denna ha samma bruskänslighet som den i avsnitt 4.1. Ett
problem med simulation av dessa är att de olika delarna är beroende av varandra.
Till exempel om simulationen indikerar att ordsynkroniseringen misslyckades, kan
detta bero på att preambel synkroniseringen detekterade en felaktig preambel. Med
den motivationen, har preambel synkroniseringen valts att titta noggrannare på.
4.2.1
Beskrivning av simulationen
Simuleringingsscenariot för denna simulation är snarlik den som beskrivits i avsnitt
4.1.1. Ett slumpvis utvalt medelande har försetts med en preambel bestående av
åtta byte av tecknet 0x55, eller 0b01010101. Denna sekvens valdes för att samma
mönster av nollgenomgångar skall förekomma flera gånger i följd, då detta ger preambelsynkroniseringsalgoritmen fler än en chans att detektera fasen. Efter preambeln
läggs åtta byte för synkroniseringsordet till. Det ursprungliga medelande har alltså
22
Simulering
förlängts i början med en synkroniseringsdel bestående av tolv byte. Paketstrukturen
finns åskådliggjord i figur 3.3.
Den nya dataströmmen moduleras sedan och vitt brus av känd amplitud adderas.
Sedan försöker paketet av avkodas, genom att först detektera fasen i preambelsynkroniseringen. Om fasen detekteras, skickas signalen vidare till till ordsynkroniseringen.
Om ordsynkroniseringen lyckas skickas signalen sedan vidare till avkodaren för modulerat data beskriven i avsnitt 3.5.2 och simulerad i avsnitt 4.1. Blockschema över
testet kan ses i figur 4.3.
Figur 4.3. Blockschema över synkroniseringstest
Informationen som kan extraheras ur testmiljön är om någon av synkroniseringarna
misslyckas, samt bitfelet i överföringen av meddelanden.
En uppenbar brist i testmiljön är att de olika delarna av synkroniseringsalgoritmen sker sekventiellt. Konkret innebär det att ordsynkroniseringen enbart testas om
preambelsynkroniseringen lyckas. Anledningen till att jag ändå valde att testa algoritmerna utifrån denna arkitektur av testmiljön är att denna struktur av mottagare
är den som praktiskt kommer att användas i den slutliga produkten.
4.2.2
Simulationsresultat
Simulationsresultatet har genomförts under följande förhållanden:
• Samplingstakten är på 48000 Sa/s
• Signalamplituden är på 30% av maximal amplitud
• Simulationen är itererad 100 gånger per brusnivå
• Bruset är jämt fördelat i frekvensdomänen
Något oväntat är att sannolikheten för synkroniseringsfel är störst ju lägre datatakten
är, vilket klart syns i figur 4.4. En förklaring till detta är att sannolikheten att bruset
ställer till med felaktiga nollövergångar måste vara större då det är fler samples per
symbol ju lägre datatakt som nyttjas.
4.2 Bruskänslighet av synkronisering
23
Detta behöver inte vara ett problem, då många radiomottagare lågpassfiltrerar signalen i hårdvara. Det högfrekventa bruset som skapar felaktiga nollgenomgånger
filtreras då bort, vilket eliminerar problemet. Simulation av detta följer i styckena
4.2.3 och 4.2.4.
100
1200 Baud
2400 Baud
4800 Baud
9600 Baud
Felsannolikhet (%)
80
60
40
20
0
10
5
0
5
10
15
20
25
30
SNR (dB)
Figur 4.4. Synkroniseringingstest
4.2.3
Beskrivning av simulation med lågpassfilter
Då det kan hända att radiomottagare lågpassfiltrerar den mottagna signalen i hårdvara, har ytterligare en simulation av synkroniseringen med lågpassfilter genomförts.
Filtret har placerats innan demodulatorn för att efterlikna en generell hårdvara. Det
är inte något krav på att filtret ska vara beräkningseffektivt, då det primärt ska
användas för simulationen. Filtret har därför valts att realiseras via en FIR modell.
Fördelen med FIR är att det är enkelt att beräkna frekvensgången för filtret, samtidigt som den kan realiseras via en faltningsoperation. Ytterligare en fördel är att
filtret alltid är stabilt [5]. Ett blockschema över simulationen visas i figur 4.5.
Filtrets brytfrekvens är dubbelt så hög som datatakten. På så sätt kommer inte
filtret inverka på dataöverföringen, utan bara filtrera bort högfrekvent brus.
24
Simulering
Figur 4.5. Blockschema över synkroniseringstest med lågpassfiltrering
4.2.4
Simulationsresultat med lågpassfilter
Simulationsresultat av synkroniseringstest med lågpassfiltrering visas i figur 4.6.
Tydligt är att sannolikheten för fel i synkroniseringen minskar mer vid hög översampling då signalen filteras. Detta beror troligen på att sannolikheten för felaktiga
nollövergångar ökar då högre översampling leder till fler samples med låg amplitud.
100
1200 Baud
2400 Baud
4800 Baud
9600 Baud
Felsannolikhet (%)
80
60
40
20
0
10
5
0
5
10
15
20
25
30
SNR (dB)
Figur 4.6. Simuleringsresultat av synkronisering med lågpassfiltrering
4.3 Drivning
4.3
25
Drivning
Drivning innebär att sändare och mottagare har något olika datatakter. Detta fenomen
inträffar som i exemlet 4.1 då samplingshastigheterna på mottagare och sändare skiljer sig åt. Kristalloscillatorer som normalt ger klock- och referensfrekvens till system
är temperaturberoende, vilket leder till att sändare och mottagare i olika miljöer
kommer få olika referensfrekvenser.
Exempel 4.1
En sändare med en felaktig samplingsfrekvensen 48010 Sa/s genererar data med 2400
Baud. Hur lång tid tar det innan mottagaren som har en samplingsfrekvens på 48000
Sa/s har drivit 10%?
Tidsförskjutning per symbol:
∆ts = ts − tǫs =
1
1
− ǫ
fs
fs
Fel i procent, E, efter k symboler:
E = 100 · 8fsps · k ·
∆ts
ts
, fsps =
fs
fbaudrate
Antal symboler innan signalen drivit E%:
k=
4.3.1
ts
10
E
·
⇒
·
100 · 8fsps ∆ts
100 · 8 · 48000
2400
1
48000
1
1
48000 − 48010
≈ 3 bytes
Beskrivning av simulationen
En slumpvis utvald ström av data moduleras utan att synkroniseringstecken läggs
på. Innan det modulerade data når demodulatorn, förställs fasen på signalen för att
simulera fasfel. Det demodulerade datat jämförs sedan med den ursprungliga data
strömmen i grupper om åtta bitar, alltså bytes. Blockschema över testmiljön visas i
figur 4.7.
I en komplett testserie itereras testförsök med olika fasfel, mer bestämt förställs fasen
från en symbol för tidig synkronisering till en symbol för sen synkronisering.
4.3.2
Simulationsresultat
Resultatet i figur 4.8 utfördes under följande förutsättningar:
26
Simulering
Figur 4.7. Blockschema över fasfelssimulation
• Avkodningen sker utan synkronisering
• Signalamplituden är på 30% av maximal amplitud
• Datalängden på varje testserie är 10000 bytes
• Samplingstakten är 48000 samplingar per sekund
• Datatakten är på 2400 bitar per sekund
Här har valts att titta på fel i byte nivå vilket innebär att en felaktig bit per byte
räcker för att ge fel utslag. Jag har valt att göra så då resultatet hellre fälls än frias.
Om man tittar på det demodulerade datat syns att felaktiga bitar tenderar till att
bli ettor, vilket innebär att feldetektering på bitnivå bara skulle upptäcka fel i de
bitar som är nollor. Troligen är då även resultatet som visar ettor felaktigt, trots att
det inte ger utslag i en jämförelse med originaldatat.
Exempel 4.2
Detta exempel visar ett utdrag ur logg-filen för det avkodade datat. Detta är samma
fil som från körningen som genererade plotten i figur 4.8. Då denna fil innehåller
10000 avkodade bytes, visas bara ett kortare utdrag:
Recieved
Recieved
Recieved
Recieved
byte
byte
byte
byte
nr
nr
nr
nr
55
56
57
58
=
=
=
=
255
255
255
255
Här noteras att all avkodat data avkodas till det decimala värdet 255. Binärt motsvaras
detta av 1111 1111B , vilket visar att de mottagna datat demoduleras till enbart ettor. Sannolikheten att slumpgeneratorn som används av sändaren bara genererar
1:or är försvinnande liten.
4.3 Drivning
27
I figur 4.8 noteras att avkodningen är korrekt även om synkroniseringen missar
med cirka femton procent av en symbollängd. Ökar synkroniseringsfelet ytterligare,
kommer antalet fel i mottagaren öka drastiskt. Den horisontella axeln i figur 4.8 visar
drivning relativt symbollängd i tidsdomänen, t. ex. betyder värdet 0.5 att signalen
drivit med en halv symbollängd.
100
Sannolikhet
80
60
40
20
0
-1.0
-0.5
0.0
Symboler
0.5
Figur 4.8. Sannolikhet för byte-fel då synkronisering blir fel
1.0
Kapitel 5
Implementation
5.1
Laboreringsplattform
För att kunna testa koden i hårdvara byggdes en laboreringsplattform bestående av:
• Två stycken radioapparater
• Ett utvecklingskort med en ARM7 processor
• Kontaktpanel
• Nätdel
Delarna monterades på en träplanka och kopplades ihop för att kunna användas
på ett generellt sätt. Alla ljudsignaler AC-kopplades med seriekondensatorer för att
filtrera bort likspänningar.
5.1.1
Tait-radio
Radioapparaterna som användes var TM8105 från Tait Radio Communications1 .
Den främsta anledningen till att valet av radioapparat föll på denna modell var att
den tidigare använts inom företaget. Radion har även ett konfigureringsverktyg i
mjukvara där parametrar av intresse kan ställas, exempelvis frekvens på bärvågen. I
konfigurationsverktyget går det att bestämma vilka funktioner olika portar i en kontakt på radions baksida ska ha, vilket nyttjades. Det går även att i viss utsträckning
styra över den analoga signalvägen i radion, vilket ledde till att talfilter kopplades
bort för att undvika att signalen bandbreddsbegränsades på ett oönskat sätt.
1 Australiensk
radiotillverkare
29
30
Implementation
Figur 5.1. Laboreringsplattform
Figur 5.2. Blockschema över laboreringsplattformen
5.1.2
ARM7
För att enkelt kunna kommunicera med de två radioapparaterna användes mikrokontrollern AT91SAM7S256 från Atmel2 . Anledningen till att just denna kontrollern
valdes var att företaget använt sig av denna tidigare. Det fanns även ett utvecklingskort från Olimex3 tillgängligt samt en på företaget väl beprövad utvecklingsmiljö.
AT91SAM7S256 är en mikrokontroller som använder sig av den RISC-baserade kärnan ARM7TDMI som är av Von Neumann arkitektur. Denna klarar att arbete med
0.9Mips/MHz4 upp till 55 MHz. AT91SAM7S256 kan nyttja DMA kanaler för att
på ett effektivt sätt flytta data till och från periferienheterna. Kontrollern har 256
2 Tillverkare
av mikrokontrollers
3 Elektroniktillverkare
4 Miljoner
instruktioner per MHz i klockfrekvens
5.2 Test mellan två datorer
31
Kbyte flashminne (programminne) och 64 Kbyte i RAM. I övrigt finns några olika
periferienheter som bland annat AD-omvandlare, räknare och UART-kontroller. [1]
5.2
Test mellan två datorer
Det första hårdvarutestet som utfördes var signalering mellan två stycken datorer. Då
simulationskoden skrivits för PC-miljö behövdes inte några ändringar i algoritmerna
skrivas. Dock behövdes applikationskod för att utföra testet skrivas. Denna kod kan
delas in i tre delar:
• Sändarprogram
• Mottagarprogram
• Program för att styra PTT
För att kunna upptäcka fel i överföringarna, lades en 32-bitars CRC sist i datafältet.
Detta inleddes även med en 2 byte långt fält innehållandes datafältets totala längd.
Datapaketet visas i figur 5.3.
Figur 5.3. Datapaket med längd och CRC
5.2.1
Sändare
I sändarprogrammet genereras ett meddelande med slumpmässigt data av variabel
längd. Användaren bestämmer via ett textbaserat gränssnitt meddelandets längd.
Datapaketet förses sedan med preambel och synkroniseringsord för att till sist moduleras och sändas via ljudkortet. Då dataformatet på det demodulerade datat valts
till ett två byte långt heltal, kunde det direkt användas för att skrivas till ljudkortsbufferten. Ljudsignalen från ljudkortet kopplades sedan in på radions ljudingång.
För att styra Tait-radions PTT skrevs en minimal mjukvara för ARM7 kortet. Allt
denna gjorde var att ge möjlighet att via en fysisk knapp, eller en serieport kunna
styra en I/O port som i sin tur kontrollerade radions PTT. Således gavs sändarprogrammet möjlighet att via serieport styra radions PTT.
32
5.2.2
Implementation
Mottagare
Laboreringsplattformens radio användes för att ta emot signalen. Denna analoga
signal kopplades sedan in till en dator via dennas ljudkort. Mottagarprogramvaran
samlade sedan in datat för avkodning och demodulation. Programvaran utökades
med möjlighet att sätta timeout tid, detta för att förhindra att programvaran låser
sig vid exempelvis felaktig preambel detektering.
Efter synkroniseringen demoduleras datat, paketlängd detekteras och meddelandet
avkodas fram till och med checksumman. För att detektera fel i överföringen beräknas
en checksumma som jämförs med den mottagna. Överensstämmer checksummorna
finns med stor sannolikhet inte några fel i överföringen.
De olika stegen i mottagningsproceduren visas i ett terminalfönster för att kontinuerligt ge användaren information om vad som händer. Då längden på meddelandet
kan vara långt skrivs inte detta ut på skärmen, utan lagras i en textfil på hårddisken.
5.2.3
Resultat
Överlag fungerar överföringar bra. Dock fungerade det inte att skicka längre meddelanden än cirka 3000 bytes. Detta skulle kunna förklaras av drivningseffekten.
Åtskilliga test utfördes, och runt 3000 bytes började det mottagna datat likna datat
från simulationsresultaten från drivningstestet i avsnitt 4.3.
Även noterades felaktiga detekteringar av preambel. Scenariot att en preambel felaktigt detekterades precis innan en faktisk preambel sändes gav upphov till att hela
meddelanden inte upptäcktes. Mottagarkoden befann sig då i tillståndet att den letar
efter ordsynkroniseringen medan den faktiska preambeln skickas. Således upptäcker
mottagaren inte någon ordsynkronisering och mottagarproceduren avbryts för sent
för att hinna upptäcka den riktiga preambeln.
Det sistnämnda problemet skulle kunna lösas genom att minska chansen för felaktiga
detekteringar av preambel. Då preambelsynkronieringen bygger på avståndet mellan
nollövergångar, skulle en lösning vara att mjukvarufiltrera signalen. Således skulle
brus av oönskade frekvenser försvinna och felaktiga nollövergångar skulle minska. En
annan lösning skulle kunna vara att använda sig av mottagen signalstyrka på radion
för att starta preambeldetektering. Detta skulle leda till att sökning av preambeln
startar då mottagarradion får in en signal, alltså utsätts inte preambeldetekteringsalgoritmen för möjligheten att felaktigt detektera en signal. En tredje lösning skulle
kunna vara att använda en längre preambelsynkroniseringssekvens. Detta skulle minska sannolikheten för en felaktig detektering, men samtidigt minska sannolikheten
för en korrekt detektering.
5.3 Test mellan dator och mikrokontroller
5.3
33
Test mellan dator och mikrokontroller
I detta test anvädes en PC för att sända data via radion på samma sätt som i
föregående test. Mottagaren däremot implementerades i ARM7-kortet istället för i
PC-miljö.
Anledningen att enbart implementera mottagarprogrammet var att mottagaralgoritmen uppskattningsvis var mycket mer processorkrävande än sändaralgoritmen.
Fungerar mottagaralgoritmen fungerar med hög sannolikhet även sändningsalgoritmen. Ytterligare en faktor vid detta val var att mikrokontrollern inte är bestyckad
med några DAC, utan enbart med ADC. För att då testa generering av analoga signaler, behöver en codec eller en separat DAC anslutas till kontrollern. I brist av tid
utelämnades detta test. Kontrollerns PWM modul hade i viss utsträckning kunnat
användas tillsammans med ett lågpassfilter, denna lösning hade dock introducerat brus av olika slag i systemet och hade således inte kunnat bidraga med någon
kvalitativ information.
5.3.1
Anpassning av mjukvara
Då insamling av data via ADC inte fungerar som inläsning av ljudkortsbuffert i PCmiljö var mottagarprogrammet tvunget att anpassas till detta. Tanken avkoda data
samtidigt som nya data läses in stannade dock kvar.
För att sampla data i jämna intervall kopplades ett timerblock till en ADC-kanal.
En DMA kanal användes sedan för att fylla en buffert av given storlek. Sampling
och lagring av dessa data gick på så vis att utföra helt i hårdvara, vilket lämnade
processorkraft åt avkodning av data.
Denna övergripande programstruktur är identisk med den som användes i simulationerna, vilket innebar att merparten av programkoden kunde behållas. Insamling
av data via DMA-kanaler kan på så vis direkt ersätta den tidigare trådade funktionen
för att vänta på att ljudkortets buffert skulle fyllas, beskriven i 3.5.
Ytterligare en skillnad var att upplösningen på ADC:n var på 10 bitar, till skillnad från tidigare 16 bitar. Signalen till ADC:n saknade även negativ spänningsmatning vilket ledde till att insignalen AC-kopplades och lyftes sedan upp till halva
matningsspänningen via en spänningsdelning. Detta innebar att varje sampeldata
behövde omvandlas till det tidigare använda formatet (s16).
5.3.2
Processoranvändning
Då algoritmerna tidigare utvärderats i form utav simuleringar, valdes att titta närmare på processoranvändning vid exekverade.
Att mäta processoranvändning och att definiera vad som är processoranvändning
34
Implementation
Tabell 5.1. Översikt processorbelastning
Räknarvärde
Utan avkodning
Preamblesökning
Demodulering
Processorbelasning
90 000
83 000
56 000
0%
7.7 %
37.8 %
är svårt. Den metod som använts är enkel att implementera, dock inte speciellt
noggrann. Resultatet av mätningen ger bara en fingervisning om tidsåtgång vid
exekvering.
Då insamling av data tar lika lång tid oberoende av vad avkodningsalgoritmen gör,
har tiden för insamling använts som ett referensvärde. Efter att avkodningen är
färdigexekverad, väntar applikationen på att insamlingen av data ska slutföras. Det
var denna “väntetid” som valdes att studeras. För att mäta väntetiden räknades ett
heltalsvärde upp enda tills insamlingen av data var klar. En avskalad C-kod för att
åskådliggöra mätningen presenteras i exempel 5.1. Resultatet presenteras i tabell
5.1.
Exempel 5.1
Här är ett exempel på hur processorbelastningen mättes. Detta exempel är mycket
avskalat för att visa på principerna kring mätningen.
while(mainLoop){
unsigned long int counter = 0;
while(collectingDataFlag)
counter++;
storeCounterValue(counter);
startNewCollection();
processData();
}
5.3 Test mellan dator och mikrokontroller
5.3.3
35
Resultat
Det i särklass största problemet vid testsekvensen var frekvensdrivning. Då ett
timerblock användes för att styra samplingstakten blev denna beroende på timerblockets upplösning, vilket inte resulterade i en jämn takt. Önskvärt vore att sampla i
en takt av 48000 Sa/s, vilket skulle ge 10 Sa/symbol i en datatakt på 4800 Baud.
Med timerblockets begränsade upplösning fick samplingstakten approximeras till
48054 Sa/s, vilket bidrar till att signalen kommer driva från synkroniseringen relativt fort. Mätningar med oscilloskop på samplingsfrekvensen visade att denna i själva
verket varierade slumpartat från 47990 Sa/s till 48070 Sa/s. Denna stora avvikelse
i frekvens var oväntad, likaså svår att förklara.
Som mest gick det att skicka runt 2 byte (inklusive preambel, synkronisering och
checksumma) felfritt, vilket ändå visar att algoritmerna kan exekveras i en mikrokontroller.
Kapitel 6
Rekommendationer för
fortsatt arbete
• Mer omfattande driftester:
– Testa algoritmen under längre perioder för att få en bättre bild av prestanda
– Utföra test under olika radioförhållanden (olika signalstyrkor och olika
typer av brus)
– Utföra mätningar på radiosidan för att få en uppfattning om exempelvis
kanalutnyttjande
• Eventuellt ändra preambellängd och ordsynkronisering för att optimera prestanda mot applikationsområde.
• Införa synkronisering av signalen i mitten av datapaketen för att kunna sända
längre datapaket.
• Utöka funktionaliteten med exempelvis:
– Pakethantering
– Kryptering
– Felkorrigering
37
Kapitel 7
Slutsatser
Syftet med examensarbetet var att utöka Field Embedded Communications AB:s interna bibliotek av programmeringskod med funktioner att modulera och demodulera
data. Efter att koden skrivits har stor vikt lagts vid simuleringar för att säkerställa
funktionalitet. Resultatet av simulationerna visar att modulationen fungerar på ett
stabilt sätt.
Ett av kraven var att koden skulle vara modulärt uppbyggd, vilken den är. En av
fördelarna med det visade sig tydligt då det enkelt gick att anpassa koden för att
kunna exekveras i en ARM7 processor. Således testades att koden kunde exekveras
i olika hårdvarumiljöer. Test i mikrokontrollern visade även ungefärliga värden på
algoritmernas beräkningskomplexitet, detta kan användas som riktvärden vid konstruktion av hårdvara vid framtida implementering.
Under utvecklingsperioden och rapportskrivandet har enbart program med öppen
källkod nyttjats, utan några motgångar. Jag förväntade mig initialt att det skulle
medföra problem, vilket turligt nog visade sig vara obefogade farhågor.
Trots att det finns mycket litteratur i ämnet modulationsteknik, var det ändå svårt
att hitta bra översiktlig information om mjukvaruradio. Mycket information riktar
sig till DSP och FPGA konstruktion, vilket inte rakt av går att implementera i en
mikrokontroller eller vanlig processor då dessa inte är tillräckligt beräkningskraftiga. Stor vikt har därför lagts vid att skala ner algoritmerna utan att ge avkall på
prestanda. Detta var en anledning till de omfattande simulationerna.
En svårighet under utvecklingen var att skriva simulationskod. Valet att skriva simulationskoden i C kändes helt rätt. Uppskattningsvis lades mer än dubbelt så mycket
tid vid att skriva simuleringskoden som att skriva de faktiska algoritmerna. Ofta
visade det sig att dåliga simuleringsresultat berodde på buggar i simuleringskoden.
Dessa problem är svåra att undvika och skulle troligen även uppträda i kommersiella
utvecklingsmiljöer (såsom MATLAB).
39
Nomenklatur
AC
Alternating Current, växelström
ADC
Omvandlare från en analog till en digital signal
CRC
Cyclic Redundancy Check, algoritm för att upptäcka fel i dataöverföringar
DAC
Omvandlare från en digital till en analog signal
DMA Direct Memory Access, teknik för att förflytta data utan att anstränga processorn
FIR
Finite - Impulse - Response, digital filtertyp
GCC
GNU Compiler Collection, samling kompilatorer till olika programmeringsspråk
LUT
Look Up Table, tabeller med förgenererat data
Mark En 1:a i FSK modulering
OSI
Open Systems Interconnection, konceptuell modell för datorkommunikation
i 7 lager
PTT
Push To Talk, funktion för att växla mellan sändning och mottagning
PWM Pulse Width Modulation, pulsbreddsmodulering
RAM Random Access Memory, minne för tillfällig lagring av data
RISC Reduced Instruction Set Computer, processortyp
s16
Datatyp, heltal lagrat i 2 byte
Space En 0:a i FSK modulering
Tråd
Eng. Thread, metod för att exekvera processer parallellt
u08
Datatyp, positivt heltal lagrat i 1 byte
u16
Datatyp, positivt heltal lagrat i 2 byte
u32
Datatyp, positivt heltal lagrat i 4 byte
UART Universal Asynchronous Receiver/Transmitter, hårdvara för att skicka data
seriellt
41
Förteckningar
Figurer
2.1
Blockschema över en generell CODEC . . . . . . . . . . . . . . . . .
6
2.2
Blockschema av kommunikationssystem . . . . . . . . . . . . . . . .
7
2.3
Jämförelse mellan FSK och MSK . . . . . . . . . . . . . . . . . . . .
9
2.4
Blockschema av superheterodyn-arkitektur
. . . . . . . . . . . . . .
11
3.1
Blockschema över systemets hårdvara . . . . . . . . . . . . . . . . .
13
3.2
Funktionsskiss av mottagararkitekturen . . . . . . . . . . . . . . . .
16
3.3
Datapaket i lägsta lagret . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.4
Blockschema över avkodningsarkitekturen . . . . . . . . . . . . . . .
18
4.1
Blockschema över brustest konstruktionen . . . . . . . . . . . . . . .
20
4.2
Sannolikhet för fel beroende av brus . . . . . . . . . . . . . . . . . .
21
4.3
Blockschema över synkroniseringstest . . . . . . . . . . . . . . . . . .
22
4.4
Synkroniseringingstest . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.5
Blockschema över synkroniseringstest med lågpassfiltrering . . . . .
24
4.6
Simuleringsresultat av synkronisering med lågpassfiltrering . . . . . .
24
4.7
Blockschema över fasfelssimulation . . . . . . . . . . . . . . . . . . .
26
4.8
Sannolikhet för byte-fel då synkronisering blir fel . . . . . . . . . . .
27
5.1
Laboreringsplattform . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.2
Blockschema över laboreringsplattformen . . . . . . . . . . . . . . .
30
43
44
Förteckningar
5.3
Datapaket med längd och CRC . . . . . . . . . . . . . . . . . . . . .
31
Tabeller
5.1
Översikt processorbelastning . . . . . . . . . . . . . . . . . . . . . .
34
Litteraturförteckning
[1] Atmel Corporation. AT91 ARM Thumb-based Microcontrollers, November 2007.
[2] Jonny Österman Carl Nordling. Physics Handbook. Studentlitteratur, Lund,
2004. 7:de upplagan.
[3] Alan Kaminsky. Data Signal Analysis. Rochester Institute of Technology, March
2005.
[4] Bengt Molin. Analog elektronik. Studentlitteratur, Lund, 2001.
[5] Ole Pedersen. Signaler och system. Institutionen för Teknik och Naturvetenskap,
Campus Norrköping, November 2004.
[6] David M. Pozar. Microwave and RF Design of Wireless Systems. John Wiley &
Sons, Inc., New York, 2001.
[7] Jeffery H. Reed. Software radio. Prentice Hall, New Jersy, 2002.
[8] Woon-Seng Gan Sen M. Kuo. Digital Signal Processors. Pearson Prentice Hall,
New Jersy, 2005.
[9] Bernard Sklar. Digital Communications. Prentice Hall, New Jersy, 2006.
45
Fly UP