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 "
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...
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 ;)