WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Beschleunigungsdaten zu Strecke - Problem mit cumtrapz

 

student88

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2016, 22:24     Titel: Beschleunigungsdaten zu Strecke - Problem mit cumtrapz
  Antworten mit Zitat      
Guten Abend zusammen Smile

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 Smile (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
close all;                      % close opened figures

%% defines
samplefreq_kx  = 0.00125;       % Accel data has been recorded with 1600 hz -> 1600Hz/2=800hz

%% Step 1: Load profile
addpath('C:\...');  % Define path with profile

% 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);


%% Plot offset free signals (180s & 120s)

figure('Name','Acceleration data','NumberTitle','off')
ax1 = subplot(2,1,1);
plot(t_180_kx,accel_z_kx_180_offsetfree)
grid on;
title('KX022 z acceleration (@180s)');
xlabel('time [s]');
ylabel('accel [m/s^2]');

ax2 = subplot(2,1,2);
plot(t_120_kx,accel_z_kx_120_offsetfree)
grid on;
title('KX022 z acceleration (@120s)');
xlabel('time [s]');
ylabel('accel [m/s^2]');

% 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');

%% Calculate velocity for 180 & 120 seconds
v_z_kx_180  = cumtrapz(t_180_kx,accel_z_kx_180_offsetfree);
v_z_kx_120  = cumtrapz(t_120_kx,accel_z_kx_120_offsetfree);

figure('Name','Calculated velocity','NumberTitle','off')
ax3 = subplot(2,1,1);
plot(t_180_kx,v_z_kx_180)
grid on;
title('KX022 calculated velocity @180s');
xlabel('time [s]');
ylabel('velocity [m/s]');

ax4 = subplot(2,1,2);
plot(t_120_kx,v_z_kx_120)
grid on;
title('KX022 calculated velocity @120s');
xlabel('time [s]');
ylabel('velocity [m/s]');

linkaxes([ax3,ax4],'y');
linkaxes([ax3,ax4],'x');

%% Calculate position for 180 & 120 seconds
s_z_kx_180  = cumtrapz(t_180_kx,v_z_kx_180);
s_z_kx_120  = cumtrapz(t_120_kx,v_z_kx_120);

figure('Name','Calculated position','NumberTitle','off')
ax5 = subplot(2,1,1);
plot(t_180_kx,s_z_kx_180)
grid on;
title('KX022 calculated position @180s');
xlabel('time [s]');
ylabel('position [m]');

ax6 = subplot(2,1,2);
plot(t_120_kx,s_z_kx_120)
grid on;
title('KX022 calculated position @120s');
xlabel('time [s]');
ylabel('position [m]');

linkaxes([ax5,ax6],'y');
linkaxes([ax5,ax6],'x');
 


Die Verläufe dazu seht ihr im Anhang.

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.

Download
 Dateiname:  velocity.png
 Dateigröße:  39.13 KB
 Heruntergeladen:  427 mal
displacement.png
 Beschreibung:
Position, welche sich aus der Geschwindigkeit ergibt.

Download
 Dateiname:  displacement.png
 Dateigröße:  34.41 KB
 Heruntergeladen:  422 mal
accel.png
 Beschreibung:
Beschleunigungsdaten (oben 180 sekunden, unten Ausschnitt davon)

Download
 Dateiname:  accel.png
 Dateigröße:  61.1 KB
 Heruntergeladen:  411 mal


student88

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2016, 15:48     Titel:
  Antworten mit Zitat      
Fehler gefunden Smile Ziemlich doofer Fehler...

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 Razz
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.