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 "
2 Nulldurchgänge des 1. Signals liefert die Frequenz 1 Nulldurchgang des 2. Signals liefert die Zeitdifferenz
Görtzel für die Grundfrequenz auf beiden Signalen berechnen und daraus die Phasendifferenz berechnen
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.
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?
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
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
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
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!?
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.
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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.