Beschleunigungsdaten zu Strecke - Problem mit cumtrapz
student88
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.06.2016, 21:24
Titel: Beschleunigungsdaten zu Strecke - Problem mit cumtrapz
Guten Abend zusammen
Ich habe einen Datensatz an Beschleunigungswerten (in der Einheit g). Diese wurden über einen Zeitraum von 3 Minuten aufgenommen und stellen das Grundrauschen des Sensors dar (5 Sekunden wurden vorweg aufgezeichnet, sind aber nicht weiter zu beachten).
Um aus der Beschleunigung die Geschwindigkeit und Strecke zu erhalten, nutze ich cumtrapz. Ich weiß, dass ich mit den verrauschten Signalen nicht viel anfangen kann und da noch ein Tiefpassfilter drüber muss. Es geht mir jetzt erstmal nur um eine Verständnisfrage (den Offset ziehe ich von den importierten Werten ab, da sonst keine brauchbaren Ergebnisse nach dem Integrieren herauskommen)
Mit dem unten beigefügten Skript lasse ich mir jeweils die Geschwindigkeit und Position für den gesamten Zeitraum (180 sekunden) und einen Teilbereich des Zeitraums (120 sekunden) berechnen.
Guckt man sich die Verläufe an, welche sich für Geschwindigkeit und Position ergeben, so müsste doch (!) der Wert für (beispielsweise) die Geschwindigkeit bei 100 sekunden in beiden Verläufen (180 sekunden und 120 sekunden ausschnitt) der gleiche sein.
Nochmal zur Erläuterung: oben sieht man den gesamten Verlauf des aufgenommenen Signals, unten nur die ersten 120 Sekunden des Signals.
So sieht das Skript aus:
Code:
%% init clear; % clear workspace closeall; % close opened figures
%% defines
samplefreq_kx = 0.00125; % Accel data has been recorded with 1600 hz -> 1600Hz/2=800hz
% Define profile to load here: load('Profil_20_2.mat'); % Profil 20_2 = Sensor KX022 in hold position, 3 minutes.
t_180_kx = 0:samplefreq_kx:180; % define time array for 180 seconds
t_120_kx = 0:samplefreq_kx:120; % define time array for 120 seconds
% Use acceleration data of KX022 @180 seconds % Signal has to be converted, because sensor gives out g! % Use only every second entry in KX022_Signals % Entry 8001 = Start at 5 seconds (first 5 seconds of signal is not % important!)
accel_z_kx_180 = KX022_Signals(4,8001:2:end) * 9.80665; % convert from g to m/s2
% Use acceleration data of KX022 @120 seconds
accel_z_kx_120 = KX022_Signals(4,8001:2:200001) * 9.80665;
%% Remove offset of given signals (for 180 & 120 seconds) % mean calculates the given offset % acceleration value has to be zero without offset!
accel_z_kx_180_offsetfree = accel_z_kx_180 - mean(accel_z_kx_180);
accel_z_kx_120_offsetfree = accel_z_kx_120 - mean(accel_z_kx_120);
% link y-axis of subplot ax1 and ax2 % First argument in linkaxes defines which subplot is used as reference % (ax2 has bigger noise) linkaxes([ax2,ax1],'y');
Habt ihr zu diesem Problem einen Vorschlag für mich?
Wenn ich das ganze mit einem Sinussignal durchführe, funktioniert es wunderbar und ich erhalte sowohl für 180 Sekunden, als auch beim gekürzten 120 Sekunden Signal den gleichen Wert nach dem Integrieren an (beispielsweise) Zeitpunkt 100 Sekunden.
LG
Niko
velocity.png
Beschreibung:
Geschwindigkeit, welche sich aus den Beschleunigungsdaten ergibt.
Wenn man den Offset via mean() berechnet, dann ergibt sich logischerweise für 180 sekunden ein anderer Offset als für 120 sekunden... Soviel dazu
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.