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.
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.