In [2]:
%reset -f
%matplotlib notebook
%load_ext autoreload
%autoreload 1
%aimport functions
import numpy as np
import copy
import acoustics
from functions import *
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
mpl.rcParams['lines.linewidth']=0.5
# uncomment next line to connect a qtconsole to the same session
#%qtconsole
Die passby Tabelle ist direct vom EMPA übernommen. Diese wird durch den script Ereigniss_to_json.py generiert. Folgende änderungen sind gemacht:
In [3]:
%%capture
import json
passby = json.load(open('Tabellen\passby.json','r+'))
fill_passby_with_signals(passby)
#test
#passby = {k:passby[k] for k in['1','12','3']}
Für Details auswertungLS anschauen.
Für alle passby:
1. Anzahl Achsen
2. Achsen Abstand
Für alle Abschnitte:
1. berechne bandpass signal
Für die Abschnitte Q1 und Q2
2. berechne tPeaks
3. berechne Speeds
In [4]:
%%capture
for pbID, pb in passby.items():
#fill axledistance
#https://de.wikipedia.org/wiki/Drehgestelltypen_%28Schweiz%29
if pb['Zugstyp']=='IC':
pb['axleDistance'] = 2.5
else:
pb['axleDistance'] = 2.5
for A in ['Q1','Q2','Q3','Q4']:
v = pb[A]
#v['signals']['bandpass'] = v['signals']['MIC'].bandpass(20,20000)
v['signals']['A'] = v['signals']['MIC'].weigh()
if A in ['Q1','Q4']:
v['tPeaks'] = detect_weel_times(v['signals']['LS'])
iterator = zip(['vAv', 'dv', 'ti_vi'], train_speed(v['tPeaks'], axleDistance = pb['axleDistance']))
v.update( {k:v for k,v in iterator} )
assert(len(pb['Q1']['tPeaks'])==len(pb['Q4']['tPeaks']))
pb['axleN'] = len(pb['Q1']['tPeaks'])
Für Details SpektrenBerechnen anschauen.
full
: gesamte signaln
: Wagenmitte der n-te Wagen bis zur Wagenmitte der n+1 WagenDie nächste funktion implementiert die Intervalle aus die Vorbeifahrtszeiten jedes Drehgestell
In [4]:
def defIntervals(tp):
Intervals = {
'full': (-np.inf,np.inf)
#'vorbei': (tp.min(),tp.max()),
}
t = tp.reshape(len(tp)//4,4).mean(1)
for n, (t1,t2) in enumerate(zip(t[:-1],t[1:])):
Intervals[int(n+1)] = (t1,t2)
return Intervals
In [5]:
for pbID, pb in passby.items():
# Intervals füllen
for A in ['Q1','Q4']:
v = pb[A]
v['intervals'] = defIntervals(v['tPeaks'])
for A in ['Q2','Q3']:
v = pb[A]
v['intervals'] = {'full': (-np.inf,np.inf)}
In [6]:
Bands = acoustics.signal.OctaveBand(fstart = 100, fstop = 8000, fraction=3)#AB 100Hz wegen nahfeldeffekte
for pbID, pb in passby.items():
for A in ['Q1','Q2','Q3','Q4']:
# calc Octave
v = pb[A]
# wähle intervalle
intervals=v['intervals']
# berechne gefiterte signale
sn = pb[A]['signals']['A']
f , octFilterBank = sn.third_octaves(frequencies = Bands.nominal)
# leq
spektrum, leq = cut_third_oct_spectrum( octFilterBank, intervals, lType= 'leq')
v['spektrum'].update(spektrum)
v.setdefault('leq',{}).update(leq)
v['spektrum']['f'] = f.nominal
In [7]:
%%capture
passby['Beschreibung'] = "postprocessing der Vorbeifarten.\n Die postprocessing ist im `DSPAuswertung.ipynb` zu sehen. "
with open('results.json', 'w+') as data:
json.dump( passby, data, cls = MyEncoder)