Forum: Digitale Signalverarbeitung / DSP / Machine Learning Unterschiedliche Signale Phase synchronisieren


von tom (Gast)


Lesenswert?

Guten Abend,


 Wie lassen sich zwei verschieden Wellenformen (kein Sinus),

mit gleicher Grundfrequenz,

zeitlich synchronisieren?


Die Grundfrequenzen sind gleich und konstant,

die Phasen verschieden und konstant,

die Wellenformen verschieden und nicht konstant,

die Amplituden verschieden und nicht konstant.


Wie lässt sich effizient und mit einem kleinen Buffer die 
Phasenverschiebung zueinander berechnen?

Bin für jeden Tip dankbar "

von c r (Gast)


Lesenswert?

2 Nulldurchgänge des 1. Signals liefert die Frequenz
1 Nulldurchgang  des 2. Signals liefert die Zeitdifferenz

von Alex (Gast)


Lesenswert?

Görtzel für die Grundfrequenz auf beiden Signalen berechnen und daraus 
die Phasendifferenz berechnen

von Raymund Hofmann (Gast)


Lesenswert?

Beide Signale mit einem Sinus und Cosinus (aus Tabelle) der bekannten 
Grundwelle multiplizieren und über eine Periode aufsummieren.

Egebnis kann als zwei komplexe Zahlen geshen werden oder die erste 
Frequenz (nicht DC) aus zwei diskreten Fourier Transformationen über die 
Samples einer Periode.

Ein Ergebnis mit dem konjugierten des zweiten Ergebnis multiplizieren, 
das ergibt eine komplexe Zahl mit der gewünschten Phasendifferenz.
Absolutwert der komplexen Zahl kann als Indikator für Signalstärke auf 
der Grundfrequenz zu gebrauchen.

Goertzel stellt wegen rekursiven Berechnungen höhere Anforderungen an 
die numerische Auflösung besonders bei bei vielen Samples.

von tom (Gast)


Lesenswert?

c r schrieb:
> 2 Nulldurchgänge des 1. Signals liefert die Frequenz
> 1 Nulldurchgang  des 2. Signals liefert die Zeitdifferenz

Diesen Ansatz mache ich jetzt gerade weil er mir am einfachsten 
erscheint und ich das sowiso in etwa so vor hatte ...

Da es später Signale, welche aus dem ADC kommen sein werden, erhoffe ich 
mir mit diesem Simplen (und vermutlich schnellsten Algorithmus) auch die 
Fehler durch Rauschen klein halten zu können:
 (keine Außreißer verwenden oder Durchschnitt nehmen oder oder?)


Zunächst werde ich auf jeden Fall den DC-Offset entfernen müssen.


Außerdem muss ich die Grundfrequenz mit einen Tiefpassfilter 
"isolieren". Habt Ihr einen Tipp was für ein Tiefpass sich gut eignen 
würde? Im Extrem-Fall wäre es ja z.B. eine PWM, von der ich die 
Sinus-Grundschwingung isolieren müsste.
Idealer weise auch noch ohne große Latenz? Ist das überhaupt möglich?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

tom schrieb:
> Da es später Signale, welche aus dem ADC kommen sein werden,

tom schrieb:
> Habt Ihr einen Tipp was für ein Tiefpass sich gut eignen
> würde? Im Extrem-Fall wäre es ja z.B. eine PWM, von der ich die
> Sinus-Grundschwingung isolieren müsste.
> Idealer weise auch noch ohne große Latenz? Ist das überhaupt möglich?

Was soll'n das ganze insgesamt werden? Wo kommen diese Signale denn her, 
bevor sie aus "dem" (welchen) ADC kommen. Wo gehen sie hin? Wozu ist der 
ganze Zirkus gut?
Warum machst du's nicht so, wie von Raymund Hofmann vorgeschlagen?

Fragen ueber Fragen...

Gruss
WK

Edit: Einen hab'ich noch:
Eines der Signale in I und Q Komponente aufsplitten, dann jede dieser 
Komponenten mit dem anderen Signal multiplizieren. Danach durch 2 
Tiefpaesse, und dann aus den beiden per atan2() die Phasenverschiebung 
berechnen. Ist aber nur so ne Blitzidee, geht vielleicht auch schief...

: Bearbeitet durch User
von tom (Gast)


Lesenswert?

Dergute W. schrieb:
> Wo kommen diese Signale denn her,
> bevor sie aus "dem" (welchen) ADC kommen.
Elektronische Musikinstrumente kommen mit "Audio-Interface"-ADCs in den 
Computer. Glaube das spielt aber eigentlich keine Rolle hier.

> Warum machst du's nicht so, wie von Raymund Hofmann vorgeschlagen?

A) Weil ich's nicht ganz verstehe was Raymund sagt ;)

B) Weil die Frequenzen eventuell am Ende doch ein wenig von einander 
abweichen, was ich mit dem sehr einfachen Algorithus kompensieren kann 
(Unterschiede der Wellenlängen gegenrechnen) oder bloß am Attack einmal 
synchronisieren und anschließend läuft das durch minimale 
Frequenzunterschiede eventuell ein wenig auseinander, was nicht schlimm 
wäre.
C) Wie schon oben gesagt, ich mich gut um Abweichungen durch das 
Grundrauschen kümmern kann!?

D) Es mir am effizientesten und schnellsten erscheint. Bin mir bloß 
nicht sicher ob das mit DC-offset-removal + Tiefpass dann immer noch so 
ist.

Grüße

von Dergute W. (derguteweka)


Lesenswert?

Moin,

tom schrieb:
> Elektronische Musikinstrumente kommen mit "Audio-Interface"-ADCs in den
> Computer. Glaube das spielt aber eigentlich keine Rolle hier.

Naja, macht schon nen Unterschied, find ich. Wenns irgendwelche 
Geraeusche von Getrieben/Motoren/etc. waeren, waer's wahrscheinlich 
simpler.

Wenn die 2 Signale doch ein klitzekleinesbisschen unterschiedliche 
Frequenzen haben, kommt halt aus deinem Apparat, wenn er wirklich 100% 
funktioniert ein niederfrequenter Saegezahn... (Weil der 
Phasenunterschied dann halt froehlich von 0...2pi oder retour laeuft).

Nachdem du dann wahrscheinlich doch nicht genau die Frequenz der Signale 
hast, wirds mit Raymunds Idee eher schwierig. Dann kannstes mit meinem 
Vorschlag probieren, da brauchts keine extra Referenzfrequenz. Je nach 
Oberwellengehalt koennt da ein Tiefpass vorher auch nicht schaden, sonst 
koennten sich z.b. 3. Oberwelle vom Signal A und 4. Oberwelle vom Signal 
B runtermischen und damit das Ergebnis verfaelschen.

Gruss
WK

von tom (Gast)


Lesenswert?

Danke für die wohlwollende Antwort Dergute, aber das weiß ich natürlich 
bereits alles )

> ein niederfrequenter Saegezahn
Nein, ich synce nicht fortlaufend sondern nur einmal bei einem Attack, 
im Buffer.

> Wenns irgendwelche
> Geraeusche von Getrieben/Motoren/etc. waeren, waer's wahrscheinlich
> simpler.
Ich denke nicht. Und Geräusche != periodische Schwingung.

> Nachdem du dann wahrscheinlich doch nicht genau die Frequenz der Signale
> hast, wirds mit Raymunds Idee eher schwierig.
Die kann ich ja schnell heraus finden. Würde Raymunds Lösung mit zwei 
nicht absolut exakt gleichen Frequenzen und Oktaven usw. funktionieren?

Funktioniert Raymunds Idee auch mit Gleichspannungs-Offset?

Gesampelte analoge Signale? Würde das etwas Grundrauschen hinnehmen?

...
Kann mir jemand einen effizienten und recht steilen Tiefpass empfehlen 
um die Grundschwingung zu isolieren? Phasenlinear muss er glaube ich 
nicht sein, weil ein identisches Filter, mit gleicher Grenzfrequenz auf 
beide Signale angewerdet wird, - womit der Fehler auch gleich sein 
müsste!?

von tom (Gast)


Lesenswert?

* zwei identische Filter

von Jitterer (Gast)


Lesenswert?

Einfach kreuzkorrelieren ggf vorher mit supsampling interpolieren und 
dann das erste Maximum ist die gesuchte Phasenverschiebung.

Dafür musst du aber sicher stellen, dass die Signale im Abtastfenster 
halbwegs koheränt sind.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Effizient, recht steil und Phase wurscht: Bei so praezisen Anforderungen 
sag' ich: Nimm Cauerfilter.

tom schrieb:
> Gesampelte analoge Signale? Würde das etwas Grundrauschen hinnehmen?

Dem Rauschen ists doch egal, wo's herkommt - und wieviel ist "etwas"?

tom schrieb:
> Würde Raymunds Lösung mit zwei
> nicht absolut exakt gleichen Frequenzen und Oktaven usw. funktionieren?

Klar, vielleicht mit Einschraenkungen - jenachdem was du als 
"funktionieren" bezeichnest.
Was erwartest du, wenn du z.B. 2 Buffer mit jeweils 10100 Samples hast, 
im einen ist ein Sinus mit 100 Samples Periode, im anderen ein Cosinus 
mit 101 Samples Periode - weil die Frequenzen halt nur "ungefaehr gleich 
sind. Was soll dann dein Wunschalgorithmus liefern?

Ich wuerd' sagen - das ist alles bei dir ziemlich unpraezise; probiers 
halt aus, ob's dir taugt.

Gruss
WK

von tom (Gast)


Lesenswert?

Jitterer schrieb:

> Dafür musst du aber sicher stellen, dass die Signale im Abtastfenster
> halbwegs koheränt sind.

Dafür bräuchte ich ja auch eben solch ein Filter. Mit Filtern kenne ich 
mich noch fast null aus...

Und ja, jittern wird es ;)

von Jitterer (Gast)


Lesenswert?

Hast du mal Beispieldaten für uns?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.