Stochastische Signalverarbeitung Versuch 1 Zufallsvariable und Zufallszahlen 1. Vorbereitung 1.1 Gleichverteilung Wahrscheinlichkeitsdichte und Verteilungsfunktion einer auf [a,b] gleichverteilten ZV X: 1 (u ( x a) u ( x b)), mit _ a b ba 1 Fx ( x) (( x a )u ( x a) ( x b)u ( x b)) ba f x ( x) Quelle S.15 Skript xa 0 1 ba 1 f ( x) a xb xb Erwartungswert und Varianz einer auf [a,b] gleichverteilten ZV X: Für eine ZV X mit der Dichte fx(x): 1 ab EX xf x x dx xdx ba a 2 b Quelle S.36 Skript Absolute Konvergenz ist in beiden Fällen vorauszusetzen. Var( X ) E ( X EX ) 2 EX 2 ( EX ) 2 2 Quelle S.41 Skript 1 1 b3 a3 a b 1 ab 2 x dx 4b 2 4ab 4a 2 3a 2 6ab 3b 2 ba a 3 ba 12 2 2 1 Var ( X ) (b a) 12 b Var ( X ) 2 2 1.2 Normalverteilung Wahrscheinlichkeitsdichte und Verteilungsfunktion einer auf [a,b] normalverteilten ZV X: f x ( x) 1 ( x )2 e 2 2 2 x Fx ( x) , , 0 Quelle S.18 Skript Die Verteilungsfunktion kann nicht geschlossen dargestellt werden. Sie steht aber in tabellarischer Form zu Verfügung für gegebene n und . Fx ist die Transformation einer Normalverteilung in eine Standartnormalverteilung. So kann man über diese Formel die Werte aller Normalverteilungen ablesen. 1.3 Diskretes Weißes Rauschen Ist ein stationärer Prozess Zn aus stoch. unabh. und identisch verteilten ZV mit verschwindendem Gleichanteil: E[ Z n ] 0 Quelle S.107 Böhme für alle n. Vgl. mit dem Modell der Unendlich ausgedehnten Stichprobe. Die Dichte fz(z) aller Zn beschreibt den Prozess vollständig. Kovarianz und Spektrum: c zz (k ) z2 k C zz (k ) z2 Quelle S.107ff. Böhme 1.4 Monte-Carlo-Methode Man wählt hierzu zufällige Punkte ( x, y x [1..1] y [1..1]) aus und überprüft, ob diese innerhalb des Einheitskreises liegen. Die sich ergebende Wahrscheinlichkeitsverteilung P(Im Kreis) stellt die Fläche eines Viertels des Einheitskreises dar. Pi kann nun mit folgender Formel berechnet werden: Kreisfläche r 2 Treffer _ in _ Kreisfläche P(Im_ Kreis ) 2 Quadratfläche (2 r ) 4 Anzahl _ generierter _ punkte So wird das Flächenverhältnis in eine Wahrscheinlichkeit übersetzt. Quelle http://de.wikipedia.org/wiki/Monte-Carlo-Algorithmus#Probabilistische_Bestimmung_der_Zahl_Pi Versuche am Rechner 2.1 Mittelwert und Streuung Darstellung der gleichverteilten ZV: Code der zu Erstellung Implementiert wurde: close all clear all n=1000; a=0; b=0; randn('seed',3); v=rand(n,1); plot(v) Hier folgt nun der Code der zur Erfüllung der ersten Aufgabe geführt hat: close all load('dat1_1'); %for next a=0; b=0; for i=1:n a = a + abs(v(i)); end %mittelwert m = a/n for j=1:n b = b + (v(j)-m)^2; end %streunung s=1/(n-1)*b %sumlength msumlenght = sum(abs(v))/length(v) ssumlength = 1/(n-1)*sum((v-sum(v)/length(v)).^2) %meanscov mmean = mean(v) scov = cov(v) Der Code liefert folgende Ergebnisse: m =0.481072439950572 s =0.084656189908093 msumlenght =0.481072439950572 s =0.084656189908093 mmean =0.481072439950572 scov =0.084656189908093 Die Ergebnisse stimmen exakt überein. Dies ist auch nicht verwunderlich, da MATLAB in den eigenen Funktionen mean.m und cov.m auch mit den befehlen size, length und sum arbeitet. So das die Berechnung auf den 3 hier gezeigten Niveaus schlussendlich identisch sind. 2.2 Empirische Kovarianzfunktion Folgender Code berechnet die Kovarianz (c_xx) und die modifizierte Kovarianz(c_xx_k) eines Vektors der Länge v welcher in diesem fall mit den ersten 200 Daten von dat1_1 gefüllt war. function [c_xx,c_xx_k] = kovfkt(v) close all n=length(v); a=0; for i=1:n a = a + v(i); end m = a/n; for j=1:(2*n-1) k=j-n; c=0; for i=1:(n-abs(k)) c = c + (v(i+abs(k))- m)*(v(i)-m); end c_xx(j) = 1/n*c; c_xx_k(j)=1/(n-abs(k))*c; end err=c_xx-1/n*xcov(v)'; subplot(3,1,1), plot((-n+1):(n-1),c_xx) subplot(3,1,2), plot((-n+1):(n-1),c_xx_k) subplot(3,1,3), plot((-n+1):(n-1),err) Abbildungsbeschreibung: Erster Graph: Empirische Kovarianzfunktion x-achse: k y-achse: cxx(k) Zweiter Graph: Modifizierte Empirische Kovarianz-funktion x-achse: k y-achse: cxx(k) Dritter Graph: Differenz cxx-xcov x-achse: k y-achse: fehler(k) Die beiden Funktionen unterscheiden sich lediglich in ihren Normierungen. Währen die normale Kovarianzfunktion immer auf n normiert obwohl die sich überschneidenden Stücke zum Rand hin immer weiter verkleinern, berücksichtigt dies der Ausdruck (n-abs(k)) bei der modifizierten Kovarianzfunktion. Somit ist bei c_xx_k ein Anstieg der Funktion im Randbereicht zu erwarten. Bei der Implementierung sind wir ein wenig vom Skript abgewichen und haben jeweils beide Funktionen berechnet, um eine bessere Dar-/Gegenüberstellung zu erlangen. Das Ergebnis ist in der folgenden Abbildung zu sehn. An erster Stelle: c_xx. An zweiter Stelle: c_xx_k. An dritter Stelle: der Fehler. Der Fehler wurde einfach über die Differenz von c_xx und der MATLAB-Funktion xcov berechnet. Es ist zu beachten das xcov kein normiertes Ergebnis erzeugt. Weiterhin ist an dem Graphen interpretierbar, dass eine Folge von Zufallszahlen eine Realisierung diskreten weißen Rauschens ist. Man erkennt dies an Ähnlichkeit des ersten Graphen zur Dirac-Stoß der charakteristisch für diskretes weißes Rauschen ist. 2.3 Dichte und Histogramm Ergebnisdiagramm der Dichtefunktion: Die oberen beiden Graphiken stellen die Gleichverteilung dar. Der zweite Graph veranschaulicht die den Unterschied zwischen der empirischen (blau) und der theoretisch idealen Dichte der Gleichverteilung. Analog dazu sind die unteren beiden Graphen zu betrachten. Sie geben die Ergebnisse für 1000 standardnormalverteilte Zufallszahlen wieder. Im folgenden der Funktionscode: function [d]=dichte(v,s) close all %histogrammfkt [h, x]=hist(v); [f, w]=hist(s); %zur idealisierten darstellung der dichte g=ones(length(x),1); fx=1/(sqrt(2*pi))*exp(-(w.^2)/2); a=length(v)*(x(2)-x(1)); %auftragen der häufigkeiten über x (GV) subplot(4,1,1),bar(x,h/a), xlabel('x'),ylabel('Haeufigkeit'), title('GV'); subplot(4,1,2),hold all,plot(x,h/a), plot(x,g), xlabel('x'),ylabel('Dichte f(x)'), title('GV'); %(SNV) b=length(s)*(w(2)-w(1)); subplot(4,1,3),bar(w,f/b), xlabel('x'), ylabel('Haeufigkeit'), title('SNV'); subplot(4,1,4),hold all,plot(w,f/b),plot(w,fx), xlabel('x'),ylabel('Dichte f(x)'), title('SNV'); end 2.4 Verteilungsfunktion und Häufigkeit Folgender Code führte zum Ergebnis: close all %laden der daten load 'dat1_1.mat'; load 'dat1_2.mat'; %sortieren der vektoren zur darstellung v2=sort(v); s2=sort(s); %linspace erstellt eine achse x=linspace(1/length(v),1,length(v)); subplot(2,1,1),plot(v2,x), xlabel('x'), ylabel('Haeufigkeit H(X<=x)'), title('GV'); subplot(2,1,2),plot(s2,x), xlabel('x'), ylabel('Haeufigkeit H(X<=x)'), title('NV'); Die obere Grafik zeigt die Gleichverteilung und die untere die Normalverteilung. Auf der jeweiligen y-Achse wurden die Häufigkeiten H(X<=x) aufgetragen. 2.5 Monte-Carlo-Methode zur Schätzung von pi Folgender Code führte zum Ergebnis: Anzahl an Zufallszahlen im Einheitskreis n = 15729 Schätzung für pi: p = 3.1458 close all n=0; eps=20000; randn('seed',3); for i=1:eps x(i)=rand(1,1); y(i)=rand(1,1); if sqrt(x(i)^2+y(i)^2)<=1 n=n+1; end end p = 4*n/eps