Auswertung der Lichtschrankesignal (LS)

Date: october 2015 Author: ESR


Ziel dieser analyse ist folgende Grössen abzuschätzen:

  • mittelere Geschwindigkeit der Zug
  • Anderung in der Geschwindigkeit
  • Duchfahrtszeit jedes Drehgestell

Notwendige Modulen


In [2]:
%reset -f
%matplotlib notebook
%load_ext autoreload
%autoreload 1
%aimport functions
# %qtconsole
import numpy as np
import acoustics
from functions import *
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
mpl.rcParams['lines.linewidth']=0.5


The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

Daten und Signale Importieren


In [3]:
%%capture c
import json
passby = json.load(open('Tabellen\passby.json','r+'))
fill_passby_with_signals(passby)

Vorbereitung

Auswahl Vorbeifahrt und Abschnitt

  • Auswahl der Vorbeifahrt. Insgesamt haben wir die folgende passby IDs:

In [4]:
print('passby IDs:', list(passby.keys()))


passby IDs: ['11', '12', '2', '5', '14', '4', '8', '0', '13', '9', '3', '6', '1', '7', '10']
  • Auswahl einer Abschnitt mit Lichtschranke:
    • Q1, Q4

In [5]:
E = passby['14']['Q4']
#
print('Signal ID(with corresponding .mat file):', E['ID'])
LSignals = {'LS':E['signals']['LS']}


Signal ID(with corresponding .mat file): Q4M8_10

Detektion der Durchfahrtszeiten (tPeaks) jedes Drehgestell

Wenn die LS vom Rad abgedunket wird entsteht im Signal ein Peak. Damit lassen sich die Durchfahrtszeiten jedes drehgestell abschätzen. Die Funktion detect_weel_times implementiert die Berechnung.


In [6]:
tPeaks = detect_weel_times(LSignals['LS'], decimation = 8 )


Minimal time interval between maxima is:  0.027 ,which is equvalent to  149  samples

das Resultat ist in den nächsten Bild zu sehen


In [8]:
f,ax = plt.subplots()
LSignals['LS'].plot(ax=ax)
for tp in tPeaks:
    ax.axvline(tp,color='red',alpha=0.5)
ax.set_xbound(tPeaks.min()-0.1, tPeaks.max()+0.1)


Mittelere und Änderung der Vorbeifahrtsgeschwindigkeit

Die Abschätzung erfolgt in zwei schritte und ist im train_speed funktion implementiert:

  1. aus tPeaks lässt sich mithilfe der Abstand der Axen im Drehgestell die Geschwindigkeit jeder Drehgestell abschätzen.
  2. Dann kann man mittels eine regression (robuste regression um ausreisser wenig zu gewichten) die mittelere geschwindigkeit und die Änderung der Vorbeifahrtsgeschwindigkeit abgeschätzt werden

Eine Abbildung der Resultate is unten zu sehen


In [9]:
_,_,_ = train_speed(tPeaks, axleDistance=2, plot=True)


                    Robust linear Model Regression Results                    
==============================================================================
Dep. Variable:                      y   No. Observations:                   12
Model:                            RLM   Df Residuals:                       10
Method:                          IRLS   Df Model:                            1
Norm:                     TrimmedMean                                         
Scale Est.:                       mad                                         
Cov Type:                          H1                                         
Date:                Wed, 27 Jan 2016                                         
Time:                        09:08:23                                         
No. Iterations:                     5                                         
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const        867.0123    362.662      2.391      0.017       156.208  1577.816
x1            -0.1537      0.074     -2.088      0.037        -0.298    -0.009
==============================================================================

If the model instance has been used for another fit with different fit
parameters, then the fit options might not be the correct ones anymore .

In [ ]: