24-3-21/BE Uppdaterad 26-1-12/US Uppdaterad 28-1-11/US MATLAB-stöd till Telekomm-kursen Vt-8 För Data- och Elektro MATLAB-stöd 1
Ungefär så här ser program-interfacet ut när Du klickat på MATLAB-ikonen Definiera arbets-mapp Kommando-rad Vid arbete på kommando-raden fungerar programmet som räknedosa. Några exempel: MATLAB-stöd 2
Definiera x som heltal till 1, beräkna y som x och plotta y som funktion av x: 3.5 3 2.5 2 1.5 1.5 2 4 6 8 1 Om semikolon (;) utelämnas visas resultat direkt i kommadoförnstret. Det går att rensa arbetsarean med kommandot clc >> t=:.1:.4;y=exp(-t) y = 1..948.8187.748.673 t är en vektor med värden från till.4 med steglängd.1 En vektor kan definieras så här: t = startvärde:steg:slutvärde; (Om semikolon utelämnas skrivs t ut direkt) Det finns även en funktion för att skapa vektorer: Man upptäcker snart att det blir otympligt att enbart jobba i kommandofönstret och kan då samla ett antal kommandon i en fil med extension.m. Öppna ny m-fil här MATLAB-stöd 3
Spara filen som t.ex. my_ex1.m Exekvering antingen från texteditorn genom klick eller genom att på kommando-raden skriva in filens namn: >>my_ex1 Resultatet blir så här: MATLAB-stöd 4
1.9.8.7.6.5.4.3.2.1.2.4.6.8 1 1.2 1.4 1.6 1.8 2 Låt oss nu plotta en sinusfunktion med frekvensen 5 Hz. (Period-tid 1/5 =.2 sek.) Lägg i samma plott in en cosinusfunktion med samma frekvens: MATLAB-stöd 5
1.8.6.4.2 -.2 -.4 -.6 -.8-1.5.1.15.2.25.3.35.4 Om man vill ha hjälp med t.ex plot-funktionen, skriv: >> help plot PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue. point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down) ^ triangle (up) MATLAB-stöd 6
< triangle (left) > triangle (right) p pentagram h hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. En signal har många egenskaper. Här är några: my_ex3.m f=5; N=2; P=1/f; T=N*P; t=:.1:t; s=sin(2*pi*f*t); Beräkna några egenskaper hos s maxx=max(s) minn=min(s) medel=mean(s) eff=std(s) 5 Hz Antal perioder Periodtid Totaltid Tidvektor med steg.1 sek. Sinus Maxvärde Minvärde Medelvärde Effektivvärde ("RMS") Max,min,mean och std är inbyggda funktioner Exekvering ger maxx=1, minn= -1, medel = -8.56e-17 eff =.771 MATLAB-stöd 7
En viktig egenskap hos en signal är dess spektrum, dvs signalens frekvens-innehåll En ofta använd funktion för beräkning av spektrum är FFT, Fast Fourier Transform: Följande m-filer visar exempel på användning av FFT my_ex4.m f=5; N=2; P=1/f; T=N*P; t=:.1:t-.1; fs=1/.1; s=sin(2*pi*f*t); Beräkna spektrum för s N=length(s); df=fs/n; y=abs(fft(s)); f=:df:(n/2-1)*df; y=y(1:n/2); skala=2/n; plot(f,skala*y); xlabel('frekvens [Hz]'); Title('Spektrum för s'); 5 Hz Antal perioder Periodtid Totaltid Tidvektor med steg.1 sek. dvs samplingsfrekvens fs = 1 Hz Sinus Antal sampel Frekvensupplösning Utför FFT och tag beloppet Frekvensaxel Halvera spektrum Justera amplitudskalning Plotta spektrum MATLAB-stöd 8
1 Spektrum för s.9.8.7.6.5.4.3.2.1 5 1 15 2 25 3 35 4 45 5 Frekvens [Hz] Man ser en frekvenskomponent med amplituden 1 enhet vid frekvensen 5 Hz, vilket var väntat. Modifiera genom att ta beloppet av signalen s: my_ex4_dist.m Som my_ex4.m:... s=sin(2*pi*f*t); s=abs(s); figure(1) plot(t,s); Beräkna spektrum för s skala=1/n; figure(2) plot(f,skala*y); xlabel('frekvens [Hz]'); Title('Spektrum för s'); Sinus Likrikta genom att ta absolutbeloppet Plotta spektrum MATLAB-stöd 9
1.9.8.7.6.5.4.3.2.1.5.1.15.2.25.3.35.4 Figur 1, Tidsplan Spektrum för s.9.8.7.6.5.4.3.2.1 -.1 5 1 15 2 25 3 35 4 45 5 Frekvens [Hz] Figur 2, Frekvensplan Man kan se DC-komponenten på c:a.63. Grundtonen är nu på 1 Hz. Varför? Denna kan även beräknas genom att skriva: >> skala*y(1) OBS index börjar på 1! Vilket ger svaret:.6314 Kommandot mean(s) ger samma svar:.6314 Varför? MATLAB-stöd 1
Analysera nu en fyrkantvåg: my_ex5.m f=5; 5 Hz N=2; Antal perioder P=1/f; Periodtid T=N*P; Totaltid t=:.1:t-.1; Tidvektor med steg.1 sek. fs=1/.1; dvs samplingsfrekvens fs = 1 Hz s=square(2*pi*f*t,5); Symmetrisk 4-kantvåg Beräkna spektrum för s N=length(s); Antal sampel df=fs/n; Frekvensupplösning y=abs(fft(s)); Utför FFT f=:df:(n/2-1)*df; Frekvensaxel y=y(1:n/2); Halvera spektrum y()=y()/2; Justera DC-nivån skala=2/n; figure(1) stem(f,skala*y,'filled','k'); Plotta spektrum, OBS plottar med stem xlabel('frekvens [Hz]'); Title('Spektrum för s'); grid Raster figure(2) plot(t(1:1),s(1:1),'k'); Plotta tidsfunktion OBS under 1 sekund axis([ 1-1.1 1.1]); Juster skalning 1.8.6.4.2 -.2 -.4 -.6 -.8-1.1.2.3.4.5.6.7.8.9 1 Signal i tidsdomän MATLAB-stöd 11
1.4 Amplitud-Spektrum för s 1.2 1.8.6.4.2 5 1 15 2 25 3 35 4 45 5 Frekvens [Hz] Signal i frekvensdomän. Man ser att DC-nivån blir pga symmetrin Observera att spektrum innehåller en grundton, 5 Hz och udda övertoner 5, 15, 25 Hz etc. Effekten P hos en sinusformad signal x, kan beräknas med funktionen var(x) Effektivvärdet RMS hos samma signal beräknas t.ex som sqrt(var(x)) ( RMS = P i lasten 1 Ohm ) Övning 1: Beräkna med MATLAB fyrkantvågens effekt ( Svar: 1 ) Övning 2: Beräkna med MATLAB hur stor del av signalens effekt som ligger grundtonen ( Svar: c:a 81 ) MATLAB-stöd 12
1.5 1.5 -.5-1 -1.5.2.4.6.8 1 Exempel på lösning MATLAB-stöd 13
Beräkning av en periodisk signals effekt genom att ersätta en integral med en summa En periodisk signal x(t) antas ha en effekt P, som beräknas med formeln: 1 P = T t + T t x( t) 2 dt dvs: Integrera signalen i kvadrat över 1 period och dividera med periodtiden T Ett kodexempel: effekt.m Beräkna effekten hos en periodisk fyrkantvåg med periodtid T och duty-cycle duty dt=.1; Tidssteg T=1; Normalisera periodtid till 1 t=:dt:t; Tid duty=25; Duty cycle i x1=ones(1,duty)-.5; Signalnivå =1 under tiden dc/1 x2=zeros(1,length(t)-duty-1)-.5; Signalnivå = resten av perioden x=[x1 x2]; Bygg upp hela perioden p=sum(x.*x)*dt/t Approximera integral med summa Efter exekvering fås resultatet.25 Några kommentarer: Funktionen ones(1,n) skapar en följd av n st. 1:or Funktionen zeros(1,n) skapar en följd av n st. :or Två rad-vektorer v1 och v2 kan läggas ihop efter varandra ( konkateneras ) genom att man skriver: [v1 v2] >> v1=:2:7; v2=7:-2:; [v1 v2] 2 4 6 7 5 3 1 Multiplikation elementvis av 2 lika långa vektorer v1 och v2 utföres så här: v1.*v2 Observera punkten! >> v1.*v2 ger: 1 12 6 Det visar sig praktiskt att kunna definiera egna funktioner. MATLAB-stöd 14
Ett exempel: function summa=my_sum(a,b) MY_SUM adderar 2 tal IN: a,b OUT: summa summa=a+b; Anropet >> my_sum(1,7) ger svaret 8 Kommandot help my_sum ger svaret: MY_SUM adderar 2 tal IN: a,b OUT: summa Ett exempel till: function [over,under]=test(x,lim_over,lim_under) Test undersöker hur manga värde i vektorn x som ligger över nivån lim_over resp. nivån lim_under IN: x, lim_over, lim_under OUT: Antal över lim_over, antal under lim_under over=sum(find(x)>lim_over); under=sum(find(x)<lim_under); >> x=[1:1];[a,b]=test(x,3,2) Notera hur anropet sker ger svaret 7 resp. 1 Övning 5: Modifiera m-filen effekt.m på sid 14 så att den blir en funktion MATLAB-stöd 15
effekt(duty,offset) som anropas med parametrar duty ( i ) och offset samt returnerar effekten. Offset anger förskjutning av signalen i höjdled. Med offset = ligger hög nivå på 1 och låg nivå på. 1 offset duty/1 1 Anropet effekt(5,) bör ge svaret.5 och effekt(75,1) ge svaret 3,25 Övning 6: Skriv en m-fil som med ideer från m-filen effekt.m beräknar effekten i en helvågslikriktad sinus med amplituden 1 ( Svar:.5 ) Övning 7: dt=.1; Tidssteg T=1; Normalisera periodtid till 1 sekund t=:dt:t; Tid x=sin(2*pi*1*t); Frekvens 1 Hz x=abs(x); Belopp av sinus for j=1:length(x) FOR-loop, length(x)=antal element i x if(x(j)>.5) om element i x>.5 x(j)=.5; sätt till.5 end end if end end for p=sum(x.*x)*dt/t Approximera integral med summa Vad gör detta program? MATLAB-stöd 16
Lite om Analog modulation I princip innebär Modulationen en multiplikation mellan informationssignalen och bärvågen. För detaljer se kursbok. Ett programexempel med Amplitudmodulering: am1.m fm=5; fb=5; fs=1; t=:1/fs:2; m=.8; modulerande=sin(2*pi*fm*t); carrier=sin(2*pi*fb*t); signal=(1+m*modulerande).*carrier; figure(1) plot(t,signal,'k');grid N=length(signal); df=fs/n; f=:df:df*(n/2-1); y=abs(fft(signal)); y=y(1:n/2); skala=2/n; y=skala*y; y(1)=y(1)/2; figure(2) stem(f,y,'k'); Modulerande frekvens Bärfrekvens Samplingsfrekvens Tidvektor Modulationsgrad Modulerande signal Bärvåg Amplitudmodulerad signal Plotta signal i tidsplan Antal sampel Frekvensupplösning Frekvensvektor FFT-beräkning Skär bort spegelbild för enkelsidigt spektrum Justera DC-nivån Plotta signal i frekvensplan De figurer programmet genererar visas nedan MATLAB-stöd 17
1.5 1.5 -.5-1 -1.5.1.2.3.4.5.6 Amplitudmodulerad signal i tidsplanet. 1.9.8.7.6.5.4.3.2.1 1 2 3 4 5 6 7 8 9 Amplitudmodulerad signal i frekvensplanet. MATLAB-stöd 18
Om man låter en digital signalkälla modulera en bärvåg enligt följande, talar vi fortfarande om analog modulation: s5.m Program som slumpar fram en binär talföljd och låter den modulera en bärvåg. Nbit=1; Antal bitar slump=rand(1,nbit); Slumpa fram ett tal mellan och 1 binary=slump>.5; Alla Slump>.5 ger 1:a, övriga ger :a M=1; Antal sampel/bit x=[]; Reservera plats Skapa en analog signal av bitmönstret for index=1:nbit x=[x binary(index)*ones(1,m)]; end figure(1) plot(.1*(1:length(x)),x,'k'); axis([-.1 15 -.1 1.1]); Tidsplan Låt binary modulera en bärvåg dt=.1; t=:dt:dt*nbit*m-dt; carrier=sin(2*pi*2*t); mod=carrier.*x; figure(2) plot(.1*(1:length(x)),mod,'k'); N=length(mod); Transformera till frekvensplan: fs=1/dt; df=fs/n; f=:df:df*(n/2-1); y=abs(fft(mod)); y=(2/n)*y; [yy,idx_max]=max(y); y(idx_max)=; y=y(1:n/2); figure(3) plot(f,y,'k'); Sampelintervall Bärvåg Modulera Modulerad signal i tidsplanet Antal element Kapa max-komponent, dvs bärvågen Frekvensplan Plotta den modulerade signalen MATLAB-stöd 19
1.9.8.7.6.5.4.3.2.1 4 4.5 5 5.5 Figur 1. Binär signal, bit-tid.1 sekund.8.6.4.2 -.2 -.4 -.6 -.8 4 4.5 5 5.5 Figur 2.1 Modulerad bärvåg..8.6.4.2 -.2 -.4 -.6 -.8 4.1 4.15 4.2 4.25 4.3 4.35 4.4 4.45 Figur 2.2. Modulerad bärvåg. Detalj MATLAB-stöd 2
.9.8.7.6.5.4.3.2.1 16 17 18 19 2 21 22 23 24 Figur 3. Detalj av spektrum runt bärvågen vid 2 Hz. Obs frekvensområdet från 2 19 till 21 som kallas huvudlob och vars bredd är Bit tiden Övning 7. Hur bred är huvudloben vid ett system där bit-hastigheten är 27 kbit/s. ( Svar: 54 khz ) MATLAB-stöd 21