2017-06-20 5 views
0

Ich habe ein 2D-Numpy-Array mit X und Y Daten. Die Achse X enthält Zeitinformationen mit einer Auflösung von Nanosekunden. Mein Problem tritt auf, weil ich simulated signal und real signal vergleichen muss. Das Problem der simulated signal ist, dass der Simulator, mit Optimierungszwecken, eine andere Schrittgröße hat, wie in Abb. 1.Füllen Sie fehlende Array-Werte mit extrapoliertem Diagramm Python

Fig 1 - Simulated Data

In anderen meine realen Daten wurden von einem osciloscope erworben und Ihre Daten haben exaclty 1 ns von diference zwischen jedem Punkt aufgezeichnet. Aus diesem Grund muss ich die gleiche Skala in der X Achse haben, um eine korrekte Vergleiche zu machen. Wie kann ich die zusätzlichen Punkte erhalten, um meine Daten mit einem konstanten Schritt zwischen den Punkten zu machen?

EDIT 1

Ich brauche, dass diese neue Punkte füllen meine Array die simulierten Daten mit konstantem Schritt zu machen, wie Show in Abb 2. Fig 2

Die grünen Punkte zeigen ein Beispiel für Daten extrahiert aus extrapolierten Daten.

+0

klar ist nicht, was Sie fragen. Sie können den Code, den Sie haben, und das unerwünschte Ergebnis so zeigen, dass Sie ihm helfen können, ihn zu verbessern. – ImportanceOfBeingErnest

+0

Nicht ganz klar, was Sie wollen, aber es klingt wie "SciPy" Interpolation kann helfen (https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html) –

+0

Bitte beachten Sie, dass während Bilder sind oft nützlich, in diesem Fall vermitteln sie nicht die notwendigen Informationen. Möchten Sie die angegebene Kurve interpolieren? Möchten Sie zwei verschiedene Kurven auf derselben Skala anzeigen? Brechen Sie das Problem auf einen einfachen Fall von 5 Zahlen oder so und geben Sie diese Zahlen in der Frage an. Dann geben Sie klar an, was Sie für diese Zahlen erwarten würden. – ImportanceOfBeingErnest

Antwort

0

Dieses Problem wurde mit scipy interpolate Modul gelöst. Z.B.

interpolate.py

import matplotlib.pyplot as plt 
from scipy import interpolate as inter 
import numpy as np 


Fs = 0.1 
f = 0.01 
sample = 10 

x = np.arange(sample) 
y = np.sin(2 * np.pi * f * x/Fs) 

inte = inter.interp1d(x,y) 

new_x = np.arange(0,9,0.1) 
new_y = inte(new_x) 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.scatter(new_x,new_y,s=5,marker='.') 
ax1.scatter(x,y,s=50,marker='*') 

plt.show() 

Dieser Code gibt folgendes Ergebnis.

enter image description here


0

Ein üblicher Weg, dies zu tun ist, einfach ein paar Punkte zu duplizieren (ein Punkt, mit dem gleichen Mittelwert Hinzufügen ändert nicht viel am meisten von statistischen Werten)
So müssen Sie den Datensatz jedes Mal wenn Sie den Maßstab ändern ändern. Nimmt viel Zeit für jede Skalierung, aber es ist super einfach. Wenn Sie die Skala nicht zu sehr ändern müssen, können Sie es versuchen.

Verwandte Themen