Hallo,
ich habe die Aufgabe bekommen die Phasenverschiebung von zwei Sinussignalen zu berechnen.
Habe dir da eine Idee?
Danke
gruss george
Phasenverschiebung von Sinussignalen berechnen
Wenn du den Sinus um 1/2 pi verschiebst hast du einen cosinus und bei 2 pi wieder den selben sinus. Vielleicht solltest du etwas genauer schreiben, was du willst.
Hast du die Kurvenverläufe oder die Formeln von den Sinussignalen?
Hast du die Kurvenverläufe oder die Formeln von den Sinussignalen?
Hallo Zizibee,
ich habe jeweils zwei Datenarrays, die die beiden Sinussignale als Messwerte darstellen.
Ich denke mal, dass ich sicherlich zuerst die Sinusfunktion der einzelnen Messignale berechnen werden muss, um dann die Phasenverschiebung zu berechnen.
Aber wie mache ich es am einfachsten???
gruss george
ich habe jeweils zwei Datenarrays, die die beiden Sinussignale als Messwerte darstellen.
Ich denke mal, dass ich sicherlich zuerst die Sinusfunktion der einzelnen Messignale berechnen werden muss, um dann die Phasenverschiebung zu berechnen.
Aber wie mache ich es am einfachsten???
gruss george
Genau. Oder wenn Deine Daten verrauscht sind, kannst Du auch die FFT berechnen und die Verschiebung der Maxima ermitteln. Ggf. mußt Du dann einen low-pass filter anwenden. Aber das nur der Vollständigkeit halber ...
Viel Erfolg,
Christian
Viel Erfolg,
Christian
Hallo
danke für eure Antworten.
Das mit Nulldurchgängen ist eine guter Ansatz. Problem ist jetzt aber, dass die Signale einen Offset haben und sehr grob abgetastet sind.
Da ich mathematisch nicht ganz so gut bewandert bin, ist mir an dieser Stelle unklar, wie ich das Signal aufarbeiten muss, um die Nulldurchgänge(und daraus die Phasenverschiebung) zu bekommen.
Das mit der FFT ist soweit klar, dass man damit die Frequenz des Signals berechnen kann.
gruss george
danke für eure Antworten.
Das mit Nulldurchgängen ist eine guter Ansatz. Problem ist jetzt aber, dass die Signale einen Offset haben und sehr grob abgetastet sind.
Da ich mathematisch nicht ganz so gut bewandert bin, ist mir an dieser Stelle unklar, wie ich das Signal aufarbeiten muss, um die Nulldurchgänge(und daraus die Phasenverschiebung) zu bekommen.
Das mit der FFT ist soweit klar, dass man damit die Frequenz des Signals berechnen kann.
gruss george
Die Frequenz der Datensätze sollte doch die gleiche sein oder haben wir Dich falsch verstanden? Bei der FFT käme es also auch auf die Position der Maxima an (strenggenommen müßtest Du die Absolutwerte berechnen). Je nach Datensatz ist der FFT-Ansatz aber ein Overkill. Ebenso eine Sinustransformation ...
Alternativ zu den Nulldurchgängen, kannst Du auch die Extremwertpostitionen bestimmen. Das wurde ja schon erwähnt. Wenn Deine Datensätze zu grob sind, dies mit den eigentlichen Werten zu tun, kannst Du vorab interpolieren. Scipy bietet hierzu Funktionen an. (Hängt davon ab, was diesem Zusammenhang "grob" genau bedeutet.)
Gruß,
Christian
Alternativ zu den Nulldurchgängen, kannst Du auch die Extremwertpostitionen bestimmen. Das wurde ja schon erwähnt. Wenn Deine Datensätze zu grob sind, dies mit den eigentlichen Werten zu tun, kannst Du vorab interpolieren. Scipy bietet hierzu Funktionen an. (Hängt davon ab, was diesem Zusammenhang "grob" genau bedeutet.)
Gruß,
Christian
Die Nulldurchgänge müssten sich doch ganz gut durch Vorzeichenwechsel in den Daten ermitteln lassen, oder?
Je nachdem, wie genau es werden soll, könnte man sagen der Zeitpunkt des Nulldurchgangs war genau zwischen den beiden Zeitpunkten, oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.
Je nachdem, wie genau es werden soll, könnte man sagen der Zeitpunkt des Nulldurchgangs war genau zwischen den beiden Zeitpunkten, oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.
Man könnte auch differenzierenBlackJack hat geschrieben:Die Nulldurchgänge müssten sich doch ganz gut durch Vorzeichenwechsel in den Daten ermitteln lassen, oder?
Je nachdem, wie genau es werden soll, könnte man sagen der Zeitpunkt des Nulldurchgangs war genau zwischen den beiden Zeitpunkten, oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.
Hallo
Ich denke, dass ich zuerst die Interpolation durchführen werden und dann über die Maxima rangehen werden
gruss george
Das Problem ist, dass die Signale einen positiven Offset haben. Dies bedeutet, es gibt keine negativen Werte.Die Nulldurchgänge müssten sich doch ganz gut durch Vorzeichenwechsel in den Daten ermitteln lassen, oder?
Je nachdem, wie genau es werden soll, könnte man sagen der Zeitpunkt des Nulldurchgangs war genau zwischen den beiden Zeitpunkten, oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.
Ich denke, dass ich zuerst die Interpolation durchführen werden und dann über die Maxima rangehen werden
gruss george
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Da der Sinus um die Nulldurchgaenge herum fast linear ist, ist das (theoretisch) Beste, was man machen kann.BlackJack hat geschrieben:oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.
@george: Naja, alles ist relativ. Man kann die 0-Achse ja in die "Mitte" des Signals verschieben, schon hat man auch negative Werte. Die Maxima müsste man sich in dem Fall aber auch ansehen.
ich würde es mit einem fit probieren (zum Beispiel mit leastsq aus dem scipy.optimize.minpack):
definiere dir eine sinusfunktion wie folgt:
lade die Daten in zwei (numpy-)arrays t,V
und mach den fit (für die Startparameter in a0 musst du natürlich was halbwegs intelligentes eingeben):
Ich hoffe das hilft
definiere dir eine sinusfunktion wie folgt:
Code: Alles auswählen
from scipy.optimize.minpack import leastsq
from numpy import sin
def sin_funct_offset(para, t):
"""sinus function with offset on amp. para = A, f, phi, B.
returns A*sin(2*pi*f*t + phi) + B
"""
A, f, phi, B = para
return A*sin(2*pi*f*t + phi) + B
und mach den fit (für die Startparameter in a0 musst du natürlich was halbwegs intelligentes eingeben):
Code: Alles auswählen
def fit_function(para,x,y=0):
return y - sin_functfunct(para, x)
a0=(A0, f0, phi0, B0)
solution = leastsq(fit_function, a0, (t, V))
fitpara = solution[0]