Projektinstruktion: Spektralanalys med hjälp av den diskreta

Uppsala University
Dept. of Information Technology
Division of Systems and Control
EG 19 november 2009
MB 17 november 2015
Transformmetoder (W3) 2015
Projektinstruktion:
Spektralanalys med hjälp av den
diskreta Fouriertransformen
Deadlines
Utkast: 27:e november 2015, kl 23:59
Slutgiltig : 10:e januari 2016, kl 23:59
Innehåll
I
Introduktion
1
1 Inledning
1
2 Mål
1
3 Utförande och examination
1
II
3
Projektproblem
4 Problemformulering
4.1 Inledande exempel: Analys i tidsdomän och frekvensdomän
4.2 Upplösning och zeropadding . . . . . . . . . . . . . . . . . .
4.3 Variansreduktion i spektrumet . . . . . . . . . . . . . . . .
4.4 Praktisk tillämpning . . . . . . . . . . . . . . . . . . . . . .
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Extramaterial
5 Introduktion till MATLAB
5.1 MATLAB-kommandon . . . . . .
5.1.1 Enskilda kommandon . .
5.1.2 Grafik . . . . . . . . . . .
5.1.3 Att spara och läsa in data
5.1.4 Att skriva program . . . .
5.1.5 Allmänna kommandon . .
3
3
3
4
5
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
11
11
12
12
Del I
Introduktion
1
Inledning
Ni ska i detta projekt studera hur den diskreta Fouriertransformen (DFT) kan användas för att
studera frekvensinnehållet i en signal/tidsserie. Projektet består av flera små deluppgifter där
man i den sista kan välja mellan att antingen studera energiförbrukningen i Sverige, data från
magnetresonansspektroskopi, data från sprängämnet TNT eller undersöka tonerna i ett valfritt
musikinstrument.
Projektsinstruktionen består av tre delar.
Del I är en introduktion om projektets uppbyggnad och syfte.
Del II beskriver problemen som ska lösas med hjälp av MATLAB.
Del III innehåller tips om användbara MATLAB-kommandon.
2
Mål
Syftet med detta projekt är att
• ge förståelse för Fouriertransformen och hur man kan använda den i praktiken för att få
ut frekvensinformation ur en tidsserie/signal (diskreta Fouriertransformen),
• få övning i att använda MATLAB som hjälpmedel,
• öva på att skriva en kortfattad teknisk rapport.
3
Utförande och examination
Projektet utförs i grupper om (högst) fyra studenter. Det finns ett schemalagt tillfälle i datorsal
med lärarstöd där studenterna kan arbeta med projektet och få handledning. I övrigt förutsätts
studenterna lösa problemen på egen hand t.ex. i någon av de datorsalar som finns tillgängliga.
Handledning ges av Marcus Björk, rum P2337, e-postadress [email protected]. Med
fördel kan man boka tid för möte via mail, alternativt ställa eventuella frågor direkt via mail.
Innan ni börjar med projetket bör ni titta igenom det teorikompendie som hör
till ”Spektralanalys - konsten att hitta frekvensinnehållet i en signal”. Där får ni
kopplingen mellan det matematiska fallet, med oändligt utsträckta och kontinuerliga funktioner, och det praktiska fallet, med signaler samplade i ett finit antal punkter. Examinationen
för projektet sker genom en kortfattad, men korrekt skriven, rapport på svenska eller
engelska. Rapporten och eventuella rester skall lämnas in via Studentportalen som en pdf 1
under Transformmetoder, Inlämningar, Projektrapporter W3.
Rapporten ska vara skriven så att någon som har läst kursen i transformmetoder men inte
har gjort detta projekt kan förstå vad som har gjorts, samt vara läsbar utan instruktionen.
1
Ett bra program för att skriva ut filer som pdf är PDFCreator om ni inte kan spara som pdf direkt i det
program ni använder (dvs Word2003 eller tidigare).
1
Det finns en checklista som i stora drag beskriver vad som krävs. Se till att pricka
av checklistan innan rapporten skickas in! I allmänhet skall rapporten följa instruktionen ”Att
skriva en teknisk rapport”. Bifoga väl valda figurer som stödjer era slutsatser samt er MATLABkod så att fel kan detekteras! Ni behöver inte beskriva hur MATLAB-funktionerna ni använder
fungerar, ange bara vilka de är. Icke godkända rapporter måste kompletteras enligt kommentarer
från projekthandledaren. Allt material finns att ladda ner på http://www.it.uu.se/katalog/
marbj996/transformmetoder/p2ht15.
Den slutgiltiga deadlinen för projektet är 10:e januari 2016, kl 23:59. Efter denna deadline
kommer inga rester att ges, så se till att bli godkända INNAN detta datum. Den 27:e november 2015, kl 23:59 måste man lämna in ett utkast där man behandlat de första tre problemen
i projektet (4.1–4.3). Detta ger ett tillfälle att få feedback inför den sista delen av rapporten
som är en praktisk tillämpning där man själv måste använda det man lärt sig av de inledande
problemen. Rapporterna rättas i allmänhet löpande och rester ges vid behov. Detta betyder att
man kan avklara projektet innan juluppehållet om man så önskar.
Kom ihåg: för att bli godkänd i Transformmetoderkursen så måste man vara godkänd
på projektet.
2
Del II
Projektproblem
4
Problemformulering
I detta avsnitt presenteras de olika problemen som ska lösas i projektet. För att bli godkänd
krävs att samtliga delar är godkända. Använd teorikompendiet! Där finns även lite kod
som kan vara till hjälp.
4.1
Inledande exempel: Analys i tidsdomän och frekvensdomän
Undersök vilka frekvenser som bygger upp den brusiga uppmätta ljudsignalen som finns att
ladda ned på http://www.it.uu.se/katalog/marbj996/transformmetoder/p2ht15. Signalen
är samplad med fs = 2000 Hz. Öppna .mat-filen i MATLAB och börja med att lyssna på signalen
med kommandot: soundsc(y,Fs). Plotta sedan signalen i tiden och försök se vilka periodiciteter
(tydliga frekvenser eller ”sinusar”) den innehåller. Använd sedan istället Periodogrammet för
att skatta och undersöka spektrumet (frekvensinnehållet). Kom ihåg att man kan zooma i alla
MATLAB-figurer för att titta närmare på detaljerna, t.ex. ett kortare avsnitt av signalen.
• Hur många tydliga periodiciteter (frekvenser) finns det och vilka är dessa?
• Vad finns det för fördelar med att titta på en signal i frekvensdomänen istället för tidsdomänen?
• Vilken periodicitet har störst amplitud?
Tänk på att ni enbart behöver studera första halvan av signalen i frekvensdomän när ni använder
FFT-kommandot. Andra halvan är bara en spegling eftersom datat är reellt (se teorikompendiet). Notera att signalen innehåller vitt brus. Anledningen att man kallar det vitt är, i analogi
med synligt ljus, att det är vitt om det innehåller alla frekvenser. Vitt brus har alltså samma
energi vid alla frekvenser.
4.2
Upplösning och zeropadding
Upplösningen hos spektrumet är en viktig detalj i spektralanalys. Med ”upplösning” menar
man hur nära två frekvenser kan vara utan att flyta ihop till en enda topp i spektrumet. Letar
du efter periodiciteter i datat och hittar endast en topp i spektrumet skulle det alltså ändå
kunna finnas flera närliggande toppar som inte kan särskiljas! I denna del ska upplösningen hos
Periodogrammet studeras. Skapa ens signal som innehåller två sinusar med vardera frekvensen
f1 = 0.2 och f2 = f1 + ∆f och amplituderna 1. Lägg inte till något brus i denna simulering!
s(t) = sin(2πf1 t) + sin(2πf2 t)
(1)
För att underlätta analysen sätts samplingsfrekvensen till fs = 1 Hz och N = 100 sampel.
Börja med ∆f = 0.1 och skatta signalens spektrum med Periodogrammet. Minska sedan ∆f i
små steg mot 0, skapa nya signaler och plotta Periodogrammet för varje. Gör sedan om samma
experiment med zeropadding L = 10N (se teorikompendiet). Testa sedan även ännu mer zero
padding, t.ex. L = 100N .
3
• Vilket är det minsta ∆f , för vilket de två sinusarna (topparna i spektrum) går att upplösa?
• Vad gör zeropadding och när behöver man använda det?
• Vad händer med upplösningen i detta fall då zeropadding tillämpas och varför?
• Finns det någon anledning att använda L = 100N ? Varför/varför inte?
Redovisa plottar av spektrum, med och utan zeropadding, som styrker era slutsatser. Använd
gärna MATLAB-kommandot subplot för att lättare kunna göra jämförelser mellan plottar.
4.3
Variansreduktion i spektrumet
När man skattar spektrum med ett beränsat antal sampel så kommer skattningen på olika sätt
vara osäker. Som exempel tenderar Periodogrammet av en brusig signal även ge ett spektrum
som ser brusigt ut, dvs. variansen i denna skattning är hög. Det är viktigt att skilja på variansen
av bruset i signalen (som är en del av det man vill skatta) och den osäkerhet eller varians som
man har i själva skattningen av spektrum (”hur brusigt spektrumet ser ut”), vilket beror på
metoden.
Signalen som skall undersökas har fs = 1 Hz och N = 1024 sampel och finns att ladda ned på
projekthemsidan http://www.it.uu.se/katalog/marbj996/transformmetoder/p2ht15.
Skatta och undersök signalens spektrum med hjälp av Periodogrammet och Bartletts metod (se
teorikompendiet). För Bartletts metod kan man testa att använda P = 2, 4, 8 och 16, vilket
alltså innebär att signalen delas in i 2, 4, 8 respektive 16 delar innan Periodogrammet beräknas
för varje och ett medelvärde av resultaten tas. Skriptet bartlettse(y,P,L) ligger tillsammans
med datat och skapar en spektrumskattning med hjälp av Barletts metod för ett givet antal
delintervall P . Ni kan skriva ”help bartlettse” i MATLAB för mer information.
• Vilken inverkan har P på variansen och upplösningen av skattningen? Jämför med Periodogrammet.
• Kan vi få både hög upplösning och låg varians?
• Vilken varians (= effekt [Watt]) har det vita bruset i signalen (se 4.1 för infomation om
vitt brus)?
• Vilken skattning ger bäst estimat av brusets spektrum?
Ni kan använda samma metod som i föregående problem för att titta på upplösningen, eller
direkt från figurerna med varierande P dra slutsatser (motivering krävs).
Redovisa era slutsatser samt relevanta plottar som styrker dessa.
4
4.4
Praktisk tillämpning
Ni ska här välja en av följande fyra praktiska problem.
a) Analys av klimatvariationer.
Datat består av temperaturskillnader (relativt dagens klimat) skattade från iskärnor och är
hämtat från http://www.ncdc.noaa.gov/paleo/metadata/noaa-icecore-2453.html2 . National Climatic Data Center har även en massa annat intressant klimatdata som är tillgängligt för
allmänheten.
Totalt så stäcker sig datat som skall analyseras ca 420000 år tillbaka i tiden. Ursprungligen är
datat inte samplat uniformt i tiden, men för enkelhetens skull är det data som ni skall analysera
omsamplat i 10000 sampel med ett samplingsintervall på ca 42 år (Ts). På så sätt kan vi utan
modifikation använda periodogrammet och Bartlett’s metod.
Ladda ned datat från http://www.it.uu.se/katalog/marbj996/transformmetoder/p2ht15
och ladda in det i MATLAB. Vi får två vektorer, en som innehåller temperaturdifferenserna
(tempDiff), och en som anger isens ålder (iceAge). Plotta temperaturen mot isens ålder för att
få en översikt av tidsberoendet. Notera att i MATLAB så kommer den högra delen av figuren
visa den äldsta isen (högsta åldern). Därför är det smart att invertera x-axeln, vilket man kan
göra i plot tools eller genom att ge kommandot set(gca,’xdir’,’reverse’). Spektralanalysera
datat och försök indentifiera periodiciteter temperaturen. Eftersom medelvärdet i datat inte är
noll måste ni dra bort detta innan utför er spektralanalys, annars får ni en topp för frekvensen
noll (en konstant) som kan försvåra analysen av andra mer intressanta delar av spektrum. Detta
görs enklast med kommandot x = x - mean(x); i MATLAB.
• Vilka periodiciteter skulle vi kunna förvänta oss? Se t.ex. https://sv.wikipedia.org/
wiki/Milankovic-cykler.
• Vilka periodiciteter kan ni hitta? Jämför periodogrammet och Bartlett’s metod.
• Är det motiverat att använda zeropadding? Varför/varför inte?
• Kan denna analys säga något om vad vi bör förvänta oss för klimat i framtiden?
Redovisa era slutsatser samt relevanta plottar som styrker dessa.
2
Petit, J.R., et al., 2001, Vostok Ice Core Data for 420,000 Years, IGBP PAGES/World Data Center for
Paleoclimatology Data Contribution Series #2001-076. NOAA/NGDC Paleoclimatology Program, Boulder CO,
USA.
5
b) Analys av elförbrukningen i Sverige
Här studerar ni elförbrukningen i Sverige. Datat är hämtat från Svenska Kraftnäts hemsida
(http://www.svk.se/aktorsportalen/elmarknad/statistik/) där man kan ladda ned statistik för elproduktion och förbrukning i excel-format. På projekthemsidan finns data med
statistik för förbrukningen år 2014 klart att laddas in i MATLAB. Datat anger den totala
förbrukningen per timme i MWh och målet är att studera vilka periodiciteter vi kan hitta och
jämföra med våra förväntningar.
Eftersom medelvärdet i effektförbrukningen inte är noll måste ni dra bort detta innan utför er
spektralanalys, annars får ni en stor topp för frekvensen noll (en konstant) som kan försvåra
analysen av andra mer intressanta delar av spektrum. Detta görs enklast med x = x - mean(x);
i MATLAB.
• Vilka periodiciteter tror ni på förhand att ni kommer hitta, hur bör energiförbrukningen
variera över ett år (snabba/långsamma förändringar)?
• Spektralanalysera datat för att se om det stämmer överens med era förväntningar.
• I datat finns ”övertoner” d.v.s. multiplar av en grundfrekvens. Varför behövs dessa för att
bygga upp signalen? Se ledning nedan.
Redovisa era slutsatser tillsammans med relevanta plottar som styrker dessa.
Ledning:
Plotta t.ex. en vecka av elförbrukningsdatat i tiden. Hur ser variationerna i förbrukningen ut
mellan t.ex. dag och natt? Är förändringarna mjuka som en sinus eller mer abrupta? Som exempel
ges nedan Fourierserien för en fyrkantsvåg med perioden 2L och ett exempel av signalen visas i
Fig. 1.
∞
4 X 1
nπt
f (t) =
sin
,
(2)
π
n
L
n=1,3,...
1
f(t)
0.5
0
-0.5
-1
0
2
4
6
8
10
12
14
16
t
Figur 1: Exempel på en fyrkantsvåg med L = 1.
6
18
20
c) Analys av MRS data
Magnetresonansspektroskopi (MRS) är ett viktigt diagnostiskt hjälpmedel när man t.ex. letar
efter tumörer i hjärnan. Från att tidigare ha varit tvungen att ta vävnadsprover, s.k. biopsi,
kan man idag med MRS undersöka patienten utan ingrepp. Principerna för MRS bygger på att
man rätar först upp atomernas magnetiska moment genom att lägga på ett kraftigt magnetfält
(längs z-axel). Sedan exciterar man atomerna så att de vrids till ett högre energitillstånd med en
hjälp av en elektromagnitisk puls (RF-signal). Efter excitation faller de magnetiska momenten
tillbaka till grundtillståndet samtidigt som de roterar kring magnetfältet. Detta ger upphov
till en periodisk signal med dämpning i xy-planet. Beroende på till vilken molekyl och hur de
exciterade atomerna är bundna, fås vågor med olika frekvenser.
Signalen från en MRS-undersökning kan alltså approximeras med en summa av vågor med olika
frekvenser från olika ämnen. Beroende på vilken grundämne man exciterar (vanligen väte, fosfor,
natrium eller fluor) kan man se en rad olika ämnen i vävnaden. Tabell 1 visar exempel på ämnen
man kan urskilja vid fosfor-MRS-skann av hjärnan.
I detta problem ska ni ladda ned en simulerad MRS-dataserie från http://www.it.uu.se/
katalog/marbj996/transformmetoder/p2ht15. Serien är ett exempel på en signal från en
fosfor-MRS-skann av hjärnvävnad. Notera att signalen är komplexvärd! Detta är vanligt inom MR då signalen uppmäts i ett plan. Istället för att använda vektorer beskriver man rörelsen
i planet med komplexa funktioner. Studera Periodogrammet av tidsserien. Serien är samplad
med samplingsfrekvens fs = 3 kHz.
• Är spektrumet symmetriskt? Varför/varför inte? (ledning: Använd fftshift() för att få
frekvensen noll i mitten av spektrumet, se help fftshift() för mer information, och
skapa en frekvensaxel från -fs/2 till fs/2.)
• Redogör med hjälp av Tabell 1 för vilka ämnen som förekommer i just denna signal och
dess frekvenser.
• Är det motiverat att använda Bartletts och/eller zeropadding? Varför/varför inte?
Ämne
β-ATP 1
β-ATP 2
β-ATP 3
α-ATP 1
α-ATP 2
γ-ATP 1
γ-ATP 2
Fosfokreatin
Fosfodiester
Oorganisk fosfor
Fosfomonoester
Frekvens [Hz]
-86
-70
-54
152
168
292
308
360
440
490
530
Tabell 1: Exempel på ämnen i hjärnvävnad och deras frekvenser vid fosfor-MRS, samplade med
fs = 3 kHz. ATP = adenosintrifosfat.
Redovisa era slutsatser samt relevanta plottar som styrker dessa.
7
d) Frekvensanalys av en ljudsignal
Denna del går ut på att via en dator spela in en ljudsekvens och sedan undersöka frekvensinnehållet i signalen. Valet av ljudkälla bör vara en signal som inte förändrar sina egenskaper under
den tid den spelas in och som har någon tonal komponent. Det kan t.ex. vara en ton från ditt
favoritinstrument, en stämgaffel eller varför inte ljudet från en visselpipa eller din egen vissling
(hur rent kan du vissla?). Tal är inte lämpligt! Det går även att hitta på andra exempel som kan
vara intressanta som ljudet från en motor eller en eltandborste, men det är bra om man har en
uppfattning om vilken frekvens man förväntar sig. Om du väljer ett instrument kan du pröva
att spela in flera toner och undersöka om frekvensanalysen stämmer med ”musikteorin” (t ex
ska tonen ”normal A” ,dvs A i ettstrukna oktaven, ha frekvensen 440 Hz).
• Finns det en grundton/dominant ton?
• Stämmer frekvensen överens med vad ni förväntat er?
• Finns det övertoner (multiplar av grundtonen) och vilka frekvenser har de?
• Varför uppkommer övertoner?
• Illustrera hur Bartletts metod påverkar resultatet och kommentera.
• Finns det anledning att använda zeropadding? Varför/varför inte?
Några tips
Inspelning: Använd en dator med intern eller extern mikrofon och spela in med ”Ljudinspelaren”
eller dylikt. Lagra filen som ljudfil (wav-format, Microsoft PCM). Det bör räcka med att spela
in någon sekund.
OBS: I bland annat Windows 7 har den inbyggda ”ljudinspelaren” blivit mer begränsad, du
kan t.ex. inte lyssna på dina ljud längre. Sedan har de även tagit bort alternativet att spara som
wav-fil. För att kunna spara som wav-fil måste man köra programmet genom att i sök-fältet
på start-menyn (eller i kommandoraden) skriva: soundrecorder /file out.wav. Ett annat
alternativ är att ladda hem ett gratis-program för inspelning och redigering av ljud, som t.ex.
Audacity, som är ett mycket mer avancerat verktyg.
Överföring av ljudfilen till MATLAB: Med hjälp av kommandot wavread (se vidare information genom att skriva help wavread direkt i MATLAB) kan en ljudfil i wavformat3 läsas in till
MATLABs workspace. För att få rätt enhet på frekvensaxeln vid analysen ska också samplingsfrekvensen läsas in. Om ljudfilen t.ex. heter elgitarr.wav, lagras ljudfilen och dess samplingsfrekvens i MATLAB med kommandot [y,fs] = wavread(’elgitarr’). Kontrollera gärna att
signalen låter som den ska med kommandot soundsc(y,fs).
3
Notera att enligt dokumentationen för wavread stöds endast Microsoft PCM dataformat.
8
Del III
Extramaterial
5
Introduktion till MATLAB
MATLAB är en förkortning av MATRIX LABORATORY och är ett matrisbaserat integrerat
system för numeriska beräkningar och grafisk presentation av data. Programmet är mycket
kraftfullt och har blivit en standard inom många discipliner. En sak man måste komma ihåg är
att MATLAB inte är symboliskt utan numeriskt (även om det finns en symbolisk del). Om man
ändrar en variabel x så måste man beräkna om alla andra variabler som beror av x, detta görs
inte automatiskt. MATLAB vet heller inte vad du har räknat ut (t.ex sin(x)) utan har bara ett
numeriskt värde för detta.
MATLAB har en kärna av inbyggda kommandon och funktioner. Dessa kommandon kan delas
in i följande tre huvudklasser:
klass
1. matrisoperationer
2. grafik
3. data
exempel
[V, D] = eig(X)
plot(x, y)
semilogy(x, y)
save filnamn
load filnamn
beskrivning
egenvektorer och egenvärden till matrisen X
plottar y mot x
plottar log10 (y) mot x
sparar alla variabler i filen filnamn
läs in alla variabler i filen filnamn
Skript i MATLAB kallas för m-filer eftersom de slutar på .m. Dessa är vanliga textfiler som
innehåller en sekvens av kommandon. För att styra programflödet i filerna används kommandon
som for, while, och if. Man konstruerar enkelt egna makrofiler med hjälp av en vanlig texteditor.
I MATLAB finns en integrerad texteditor som enkelt kan nås från menyn eller genom att skriva
”edit” i kommandoraden eller genom att skapa en ny m-fil i menyn.
MATLAB har ett mycket användbart system för hjälp. Systemet är uppbyggt kring kommandot
help. Den huvudsakliga användningen är på formen ‘help kommando’, vilket ger hjälp om
kommandot kommando. Mycket användbart! Notera också att omfattande hjälp finns tillgänglig
R
via menyn samt på Mathworks
hemsida, http://www.mathworks.com/help/techdoc/.
MATLAB har en mycket flexibel och omfattande programmeringsmiljö och det tar lång tid att
lära sig alla dess funktioner och möjligheter. Ett sätt att komma i gång med MATLAB är att
studera några enkla exempel, vilket vi ska göra i nästa avsnitt.
5.1
MATLAB-kommandon
Vi ska här studera några praktiska exempel hur man använder MATLAB. Följande moment
kommer att behandlas:
1. Enskilda kommandon.
2. Plotta data.
3. Att spara och läsa in data.
4. Att skriva program.
5. Allmänna kommandon.
9
5.1.1
Enskilda kommandon
Variabler skapas då man tilldelar dem ett värde. Dessa variabler läggs då i Workspace. Om man
skriver ’;’ i slutet på ett godtyckligt kommando så skrivs resultatet inte ut i Command Window,
det lagras bara i den variabel som tilldelas (t.ex. x=1 alt. x=1;).
Specificering av matriser:
1  2 3
1

ger kolonnvektorn x = 2 
3 

1 2 3
ger matrisen A =  4 5 6 
7 8 9 
1
ger 1:a kolonnen av A, z =  4 
7
ger 1:a raden av A, w = [ 1 2 3 ]
tar ut element med radindex M och kolonnindex N
ger en matris med kolonnerna z och y
(z och y måste ha rätt dimensioner)
ger radvektorn t = [ 0 0.1 0.2 . . . 10 ]
generellt [startvärde:inkrement:slutvärde]
ger samma vektor t som ovan. Generellt
linspace(a,b,N) ger intervallet [a b] i indelat
i N punkter
ger radvektorn x =
x=[1 2 3]=[1,2,3]
y=[1;2;3]
A=[1 2 3;4 5 6;7 8 9]
z=A(:,1)
w=A(1,:)
a=A(M,N)
D=[z y]
t=[0:0.1:10]
t=linspace(0,10,101)
Speciella matriser:
A=ones(M,N)
A=zeros(M,N)
A=eye(N)
A=randn(M,N)
ger
ger
ger
ger
en
en
en
en
M × N matris av ettor
M × N matris av nollor
N × N enhetsmatris
M × N matris av normalfördelade slumptal
Matrisberäkning, CMN betecknar en matris med M rader och N kolonner (dimensionerna på
matriserna måste stämma överens, alternativt att den ena är en skalär):
C=A+B
C=A*B
x=A\b
C=A’
C=inv(A)
CMN är summan av AMN och BMN
CMN är matrisprodukten av AML och BLN
x är lösningen till ekvationssystemet Ax = b, alternativt minsta kvadrat-lösningen
om ingen exakt lösning existerar
CNM är komplexkonjugerade transponatet av AMN
CMM är inversen av AMM
Elementvis beräkning (A och B måste ha samma dimension, alternativt att den ena är en skalär):
10
C=A.*B
[1 2 3].*[4 5 6]
C=A./B
[1 2 3]./[4 5 6]
C=A.^k
[1 2 3].^2
C=A.’
C=conj(A)
Multiplikation
ger 4 10 18
Division
ger 14 52 36
Exponent
ger 1 4 9
Transponat, men ej komplexkonjugering
Komplexkonjugering
Andra användbara kommandon:
length(x)
ger längden av vektorn x
sin(t)
sinus av vektorn t
abs(x)
absolutbeloppet av vektorn x
mean(x)
medelvärdet av vektorn x
fft(x)
beräknar DTF av vektorn x i L=length(x) punkter
fft(x,L)
DFT av vektorn x, uträknat i L punkter (zeropadding
om L >length(x), annars trunkering)
ifft(X)
inversa DFT av vektorn X
fftshift(x) skiftar plats på första och andra halvan av vektorn x
5.1.2
Grafik
När man använder plot så skapas automatiskt ett fönster om inget sådant redan är öppet.
Om man plottar igen så skrivs detta över om man inte öppnar ett nytt fönster alternativt
använder hold on enligt nedan för att skapa en figur med två grafer eller fler i samma fönster.
plot(y)
plottar vektorn y mot elementens index.
plot(x,y)
plottar vektorn y mot vektorn x.
plot([x y])
plottar kolonnvektorerna x och y i samma diagram.
loglog(y)
plottar vektorn y i ett loglog-diagram (log-axlar).
figure
skapar ett nytt tomt figurfönster.
subplot(M,N,k)
nästa plot hamnar i del nummer k av en M rader och
N kolonner stor matris med plot-axlar.
hold on
nästkommande plottar hamnar i samma figur.
hold off
nästkommande plottar skriver över tidigare.
close all
stänger ned alla figurer.
legend(’graf1’,’graf2’,...)
sätter etikett på de olika kurvorna i samma figur.
title(’En graf som visar...’)
namnger figuren.
xlabel(’mått [enhet]’), ylabel namnger axlarna.
axis([xmin xmax ymin ymax])
sätter gränserna på axlarna.
5.1.3
Att spara och läsa in data
För att spara de variabler man har genererat i MATLAB, och därmed finns i Workspace, används
kommandot save. För att läsa in variabler som tidigare sparats används kommandot load.
Exemplen nedan visar hur dessa kommandon används.
11
save filnamn
save filnamn a b c
load filnamn
sparar alla variabler i Workspace i filen filnamn.mat
sparar de i Workspace definierade variablerna a b c i filen
filnamn.mat
läser in alla variabler som sparats i filen filnamn.mat
Använder man MATLABs eget gränssnitt kan man även klicka och släppa för att läsa in data och
ladda sparade figurer. Man kan också importera data i många olika format direkt via Workspace,
samt mycket annat. Pröva gärna själva!
5.1.4
Att skriva program
Gå in på File-menyn och tryck på New om ny fil skall skapas eller Open M-file för att redigera
gammal fil. Skriv önskad kod precis som i Command Window och spara filen med ett filnamn
som slutar på .m (t.ex. test.m). Dessa filer kan nu köras från Command Window genom att
skriva filens namn (i detta fall test).
5.1.5
Allmänna kommandon
help kommando
clear variabel
clear
clc
exit
ger information om kommandot kommando
raderar varabeln variabel ur workspace
raderar alla variabler i workspace
rensar det som skrivits i command window
lämnar MATLAB
12