Phasenverschiebung von Sinussignalen berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Phasenverschiebung von Sinussignalen berechnen

Beitragvon george » Dienstag 15. Mai 2007, 09:17

Hallo,

ich habe die Aufgabe bekommen die Phasenverschiebung von zwei Sinussignalen zu berechnen.

Habe dir da eine Idee?
Danke

gruss george
Zizibee
User
Beiträge: 166
Registriert: Donnerstag 12. April 2007, 08:36

Beitragvon Zizibee » Dienstag 15. Mai 2007, 09:24

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?
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Beitragvon george » Dienstag 15. Mai 2007, 09:29

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
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Beitragvon Panke » Dienstag 15. Mai 2007, 09:41

Es reicht wenn du die Extrema/Nulldurchgänge suchst und die Verschiebung der Extrema/Nulldurchgänge betrachtest. Dann musst du keine Funktionsgleichung aufstellen.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 15. Mai 2007, 09:46

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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Beitragvon george » Dienstag 15. Mai 2007, 09:54

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 15. Mai 2007, 10:32

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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Beitragvon george » Dienstag 15. Mai 2007, 10:38

Hallo CM,

Die Signale haben die absolut gleiche Frequenz.
Ich denke mal das ich erst interpolieren werden um dann weiter zu berechnen.


gruss george
BlackJack

Beitragvon BlackJack » Dienstag 15. Mai 2007, 11:27

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.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Dienstag 15. Mai 2007, 11:30

BlackJack 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.


Man könnte auch differenzieren ;)
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Beitragvon george » Dienstag 15. Mai 2007, 11:37

Hallo

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.


Das Problem ist, dass die Signale einen positiven Offset haben. Dies bedeutet, es gibt keine negativen Werte.
Ich denke, dass ich zuerst die Interpolation durchführen werden und dann über die Maxima rangehen werden

gruss george
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 15. Mai 2007, 11:40

BlackJack hat geschrieben:oder man berechnet den Schnittpunkt der Geraden durch die beiden Messpunkte mit der 0-Achse.

Da der Sinus um die Nulldurchgaenge herum fast linear ist, ist das (theoretisch) Beste, was man machen kann. :)
BlackJack

Beitragvon BlackJack » Dienstag 15. Mai 2007, 11:50

@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.
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Beitragvon Goa » Dienstag 15. Mai 2007, 13:31

ich würde es mit einem fit probieren (zum Beispiel mit leastsq aus dem scipy.optimize.minpack):

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


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):

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]


Ich hoffe das hilft :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder