2. Messwerte filtern und interpolieren#

In dieser Übung werden Messwerte eines Signals importiert und gefiltert. Da die Messwerte zum Teil lückenhaft sind, werden die fehlenden Stellen außerdem noch interpoliert.

Situation#

An zwei Schaltungen wurden unterschiedliche Messungen durchgeführt. Die Ergebnisse liegen als Excel-Dateien vor und sollen nun mithilfe von Matlab ausgewertet werden. Beachten Sie, dass es durch einen zeitweiligen Ausfall der Messtechnik u.U. zu Schwierigkeiten bei der Auswertung kommen kann.

Sig1_measure.xlsx

Sig2_measure.xlsx

1. Datenimport#

Importieren Sie Sig1_measure.xlsx mit dem Befehl xlsread. Legen Sie ggf. zusätzliche Variablen für Zeit- und Spannungswerte an. Beachten Sie die Hinweise aus Übung 1 zum Datenimport.

Öffnen Sie Messung parallel in Excel. Was genau importiert Matlab?

M = xlsread(Dateiname.txt);

2. Daten visualisieren#

Plotten Sie das Signal über die Zeit (M aus Aufgabe 1 ist eine 2000x2 Matrix). Beschriften Sie die Achsen mit \(t [s]\) und \(U [V]\) und erzeugen Sie ein Gitter im Hintergrund.

% your code here

3. Erste Datenauswertung#

Bestimmen Sie den Zeitanteil in Prozent, in welcher das Signal „High“ ist; also einen Wert von etwa 5V hat.

Durchlaufen Sie hierzu die Messwerte mittels einer for-Schleife und zählen Sie jedes Mal, wenn der aktuelle Messwert größer als z.B. 4 ist.

Teilen Sie dann diese Summe durch die Gesamtanzahl der Messwerte.

Pseudocode:

% s = Zählvariable, N = Anzahl Messwerte, y = Messwerte

s = 0;
for i = 1 bis N
Wenn Messwert an Stelle i größer 4, dann:
		s an Stelle i um +1 erhöhen
end	
s = s/N

Messen Sie die Zeit zur Ausführung dieses Code-Abschnitts, indem Sie in der Zeile davor das Wort tic und in der Zeile danach das Wort toc ergänzen.

% your code here

4. Vermeidung der for-Schleife#

Schleifen in Matlab tendieren dazu recht langsam zu sein. Versuchen Sie den „High“-Anteil des Signals nun nur mit dem Befehl sum statt der for-Schleife zu berechnen.

Tipp

Das folgende Beispiel gibt die Anzahl der Zahlen größer 3 im Bereich 1 bis 5 aus.

x = 1:5;		% Erzeugt die Werte 1,2,...,5.
x>3			% Gibt „0 0 0 1 1“ zurück.
sum(x>3)		% Gibt „2“ zurück.

Messen Sie auch hier die Ausführungsdauer des Code-Abschnitts mittels tic-toc und vergleichen Sie die Zeiten. Wie sehr konnten Sie das Programm optimieren?

% your code here

5. Datenimport und Plot#

Importieren Sie Sig2_measure.xlsx mit dem Befehl xlsread. Legen Sie ggf. zusätzliche Variablen für Zeit- und Spannungswerte an.

Öffnen Sie Messung parallel in Excel. Was genau importiert Matlab?

Plotten Sie anschließend die importierten Daten.

% your code here

6. Erste Datenauswertung und Filterung#

Lassen Sie sich mittels max die Höchstwerte der Messung ausgeben. Welches Problem tritt auf?

Tipp 1

Die Funktion „isnan“ findet sog. NaN-Werte (not a number) und gibt dort eine logische 1 zurück. Beispiel:

x = [4,5,NaN,7,NaN,1];
isnan(x)				% gibt „0 0 1 0 1 0“ zurück
x(isnan(x))			% gibt „NaN NaN“ zurück
					% „~“ invertiert logische Ausdrücke
x(~isnan(x))			% gibt „4 5 7 1“ zurück

Tipp 2

Elemente aus Matrizen und Vektoren können wie folgt gelöscht werden:

x = [4,5,NaN,7,NaN,1];
x(3) = [];			% gibt „4 5 7 NaN 1“ zurück
x(4) = [];			% gibt „4 5 7 1“ zurück

Die NaN-Werte der Messung treten jeweils zeilenweise auf. Analysieren Sie also z.B. eine einzelne Spalte mit isnan um anschließend alle NaN-Zeilen zu löschen.

7. Dateninterpolation#

Bedingt durch die NaN-Werte bzw. deren Filterung ist die Messung lückenhaft. Zur Überbrückung der Lücken müssen die Werte daher mittels interp1 interpoliert werden.

Erweitern Sie das Programm also so, dass Messwerte zu einem beliebigen Zeitpunkt t abgerufen werden können.

x = [1 2 3 4 5];			% Vorhandene x-Werte
y = [2 4 6 8 10];		% Vorhandene y-Werte
xq = 2.5;				% Abfrage-Punkt
interp1(x,y,xq,linear)	% Gibt „5“ zurück

Hinweis

Statt linear kann auch pchip oder spline verwendet werden, um eine „rundere“ Interpolation zu erhalten.

8. Dateninterpolation als function#

Erstellen Sie ein neues Skript, welches aus zwei Functions aufgebaut ist:

Dem Hauptprogramm main und einer Funktion interpol, welche der Interpolation der Messwerte dienen soll.

%% file main.m

function main
	% Hauptprogramm
	% ...
	% Hier Datenimport und Filterung ergänzen
	% Messwerte werden z.B. in Matrix M gespeichert
	% ...
	global M			% Speichern der Messwerte in globaler
					% Variable M
	t = 0.021;		% Abfragezeitpunkt
	U = interpol(t)	% Interpolierter Wert zur Zeit t
end
%% file interpol.m

function y = interpol(t)
	global M			% Laden der globalen Variable M
	xx = M(:,1);
	yy = M(:,2);
	y = interp1(xx,yy,t,pchip);
end

9. Integralberechnung#

Die Matlab-Routine integral erlaubt die Berechnung numerischer Integrale.

int = integral(@fun,xmin,xmax)

@fun ist hierbei ein sog. Function Handle. Hier wird der Name der zu integrierenden Funktion mittels @-Symbol übergeben, also z.B. @interpol. xmin und xmax sind die Integrationsgrenzen.

Berechnen Sie die Integrale der Signale mittels integral und der in Aufgabe 8 erstellten function.

Beachten Sie, dass das Integral einer Sinusfunktion über eine volle Periode 0 ergibt. Sie müssen also Ihr Programm zuvor noch minimal anpassen.

Tipp

Der Betrag wird in Matlab mittels der Funktion „abs“ berechnet.

x = -5;
abs(x)	% Gibt „5“ zurück.

Lösung#

- Hinweis: Dieses Video ist von YouTube aus eingebunden und nicht Teil des frei lizenzierten Materials! -