Forum: Digitale Signalverarbeitung / DSP / Machine Learning Zeitliche Verschiebung im Frequenzbereich


von HilbertTrans (Gast)


Lesenswert?

Mir liegen Messwerte x(k) (Impulskamm) im Zeitbereich vor (reelle 
Größe). Ich möchte diese zeitlich um t verschieben. Dieses mache ich im 
Frequenzbereich durch Multiplikation mit exp(1i*2*pi*dt), wobei dt = 
2pi*f*t.

Ich habe da folgenden Ansatz gewählt:

x_dt = ifft(fft(x)*exp(-1i*2*pi*dt))

Da x_dt komplexe Werte annimmt, muss ich nur den Realteil betrachten?

Einen Ausweg würden analytische Signale liefern:

x(k) = x(k) + 1i hilbert(x(k))
x_dt = ifft(fft(x)*exp(-1i*2*pi*dt))

Jetzt geht es wieder um die Frage, was ich mir plotte. Realteil, 
Imaginärteil, ... Plotte ich mir den Imaginärteil sieht man die 
zeitliche Korrektur. Jedoch nur, solange die Verschiebung keine 
"Krummen" Werte annimmt. (zeitliche Verschiebung der Pulse zu erkennen, 
jedoch durch den komplexen Charakter Amplitude des Imaginärteil 
abweichend, hier steckt mein Verständnisfehler)

Hat jemand passende Hinweise/Literatur zu dem Problem.

von W.S. (Gast)


Lesenswert?

Also so recht verstehe ich dein Vorhaben nicht:

Du hast Meßwerte sprich Samples vorliegen, im Zeitbereich. Nun willst du 
selbige ebenfalls im Zeitbereich verschieben, also um n Samples nach 
hinten (nach vorn geht ja nicht..) - also wo ist das Problem? Ist es gar 
keine Verschiebung im Zeitbereich, sondern eine Phasendrehung der für 
die Abbildung dieser Samples benötigten SIN/COS Wellen?

W.S.

von HilbertTrans (Gast)


Lesenswert?

Du hast recht. Ich habe nicht bedacht, dass ich nicht um jeden 
beliebigen Wert im Zeitbereich verschieben kann, sondern nur um 
Vielfache an Samples. Durch Zeropadding könnt ich dies im 
Grequenzbereich erhöhen. Dann habe ich jedoch auch zwangsläufig die N 
fache Anzahl an "Samples" zu verarbeiten.

Ich habe den Fehler gemacht, dass ich um ein ungerades Vielfaches 
Verschoben habe.

von derguteweka (Gast)


Lesenswert?

Moin,

Man kann auch um Bruchteile von Samples verschieben, bloss laeuft's dann 
auf ein (FIR-)Filter raus - und jenachdem wie schlecht man mit den 
"Dreckeffekten" der Filterung leben kann, wird das Filter etwas 
laenglich und der Aufwand hoeher.
Ein Filter mit diesen Koeffizienten [-0.25 0.75 0.75 -0.25] wuerde z.B. 
um 1.5 Samples verschieben - allerdings auch einen Ripple im 
Frequenzbereich erzeugen und hat auch noch eine Nullstelle bei der 
halben Abtastfrequenz.

Gruss
WK

von W.S. (Gast)


Lesenswert?

derguteweka schrieb:
> Ein Filter .... wuerde z.B.
> um 1.5 Samples verschieben

Also DAS mach mir mal vor. OK, du könntest die Samplefrequenz verdoppeln 
und zwischen 2 Ursprungs-Samples interpolierten. Aber was war eigentlich 
dein Zweck?

W.S.

von derguteweka (Gast)


Lesenswert?

Moin,

W.S. schrieb:
> Also DAS mach mir mal vor.

Stell' dein Licht nicht unter den Scheffel, das muss ich dir nicht 
vormachen, das schaffst du auch ganz alleine :)

Natuerlich kann man auch das Signal "upsamplen/interpolieren", um 
Zwischenwerte zu kriegen - kommt halt drauf an, was man so damit vorhat 
- aber es geht prinzipiell auch mit der original Samplingfrequenz und 
z.B. einem gefensterten und etwas verschobenen sinc() als FIR Filter.

Gruss
WK

von W.S. (Gast)


Lesenswert?

derguteweka schrieb:
> aber es geht prinzipiell auch mit der original Samplingfrequenz

höchstens per "erst rauf, dann interpolieren und umrechnen, dann wieder 
runter".

Andernfalls solltest du mal erklären, wie man in einem zeitdiskreten 
System ein Sample um eine halbe Zeiteinheit versetzt... Nee, zeitdiskret 
ist und bleibt zeitdiskret.

W.S.

von derguteweka (Gast)


Lesenswert?

Moin,

Da nimmt man halt einen idealen Tiefpass aus dem Karton mit den 
FIR-Filtern, mit einer Grenzfrequenz von Fabtast/2.
D.h. eigentlich ist das gar kein richtiger Tiefpass, denn der laesst ja 
alle Frequenzen durch, aber erstmal egal.

Die Koeffizenten so eines idealen Tiefpass waeren also
h(N)=sin(pi*N)/(pi*N)
mit N von Chuck Norris gezaehlt: von -unendlich bis +unendlich.
Wenn Chuck damit fertig ist, merk' ich: Oh - Glueck gehabt - alle 
h(N)=0, bis auf N=0; da ist h(0)=1
Also besteht mein idealer Tiefpass nur aus dem einen, von 0 
verschiedenen Koeffizienten h(0)=1. Welch' Ueberraschung....aber leider 
keine Verschiebung der Eingangssamples...

Also berechne ich mal meine h(N) anders, mit einem verschobenen sinc:

h(N)=sin(pi*N-0.25)/(pi*N-0.25)

Chuck Norris zaehlt wieder von -unendlich bis +unendlich...
Huuups, jetzt isses aber nicht mehr ganz so dolle, denn alle h(N) sind 
jetzt ungleich 0, d.h. mein Filter ist nicht nur 2x unendlich lange, 
sondern auch noch nicht kausal. Bloed.
Jetzt kommen halt die Dreckeffekte, die ich schon erwaehnte, denn ich 
schneid' mal das Filter vorne und hinten irgendwo ab und musses soweit 
verschieben, dasses wieder kausal wird. Dadurch krieg' ich erstmal eine 
Verzoegerung um N samples rein und einen Amplituden/Phasengang - aber 
eben auch eine Gruppenlaufzeit, die um N+0.25 herum schwankt - zumindest 
bei unteren Frequenzen. Je laenger ich das Filter machen kann und je 
"schoener" ich fenstere, desto besser werd' ich's hinkriegen.
So werden ich Signale um Bruchteile einer Abtastperiode verzoegert. 
Nicht direkt schoen, aber machbar.

Gruss
WK

von HilbertTrans (Gast)


Lesenswert?

Verstanden im Zeitbereich. Danke. Wollt die Verschiebung aus folgendem 
Grund im FrequenzBereich machen: so müsste man doch jede beliebige 
Verschiebung dich Multiplikation mit der entsprechenden Phase 
realisieren können. Die Rücktransformation enthält das verschobene 
Signal. In der Theorie. Jetzt ist der Frequenzbereich begrenzt. Trotzdem 
muss ich damit zB eine Dreiecksfolge verschieben können. Um beliebige 
Bruchteile (wenn man es im Frequenzbereich angeht).
Multipliziert man nun im Frequenzbereich die Reelle Eingangsfolge mit 
einer frequenzselektiven Phase wird die Rücktransformierte komplex. 
Schaut man sich nur den Realteil an, ist die Folge zwar zeitlich 
verschoben, jedoch auch in der Amplitude verändert. Liegt das nun 
dadrin, dass man den Imaginärteil vernachlässigt?
Bitte macht mich auf Logikfehler aufmerksam. Möchte es verstehen.

von derguteweka (Gast)


Lesenswert?

Moin,

Axsoo - prinzipiell und um ganzzahlige samplezahlen verschieben (oder 
besser gesagt: rotieren, denn die Daten, die "hinten" rausfallen, kommen 
ja "vorne" wieder rein) klappt ja mit deiner Methode. Und bei den 
nichtganzzahligen Verschiebungen - tja, warum solls dir da besser gehen 
als Chuck Norris und mir?  ;-)

Deine Frequenzbereichs-exp-Funktion, mit der du im Zeitbereich 
verschieben willst, die widerholt sich ausserhalb der Grenzen einer DFT, 
wenn man sie als DFT-transformierte einer irgendwie gearteten 
Zeitverschiebefunktion im Zeitbereich ansehen wuerde - und das ist was 
anderes, als zeitliches Verschieben.

Diese Effekte kannst du verkleinern, wenn du dein Signal vorne und 
hinten mit ordentlich Nullen "stuffst" - aber das laeuft im Prinzip auf 
dasselbe hinaus, wie wenn bei meiner Methode das Filter laenger gewaehlt 
wird...

Gruss
WK

von Gerald M. (gerald_m17)


Lesenswert?

Verschieben ist doch kein Problem, oder?
Um 2 samples nach hinten schieben geht mit den Koeffizienten: 0 0 1
Da kommt dann das erste sample wieder raus, sobald das 3. da ist.
Um 2.5 samples verschieben geht mit: 0 0 0,5 0,5
Da bekommt man dann einfach den Mittelwert der beiden ersten samples 
heraus, was ja einer linearen interpolation entspricht.

Oder sehe ich da was falsch? Ist schon ne Weile her bei mir...

von derguteweka (Gast)


Lesenswert?

Moin,

Naja, so ganz problemfrei ist das Verschieben um Bruchteile von 
Sampleabstaenden nicht; es muessen eben neue Samplewerte "erfunden" 
werden; dabei treten unschoene Nebeneffekte auf - sogar wurscht, ob man 
nun im Zeit- oder Frequenzbereich schiebt...

Bei dem [0 0 0.5 0.5] Beispiel krieg' ich z.B. umsonst und gratis einen 
Tiefpass mitgeliefert; vielleicht will ich den aber garnicht...
Nehm' ich dagegen so ein Filter:
[0.12732  -0.21221   0.63662   0.63662]
Dann ist der Tiefpasscharakter nicht mehr so ausgepraegt; dafuer ist 
halt die Gruppenlaufzeit nicht mehr so schoen konstant 2.5, sondern geht 
mit hoeheren Frequenzen ordentlich runter.
Ist halt wie immer bei Filterberechnungen: Mindestens eine Kroete muss 
man schlucken...

Gruss
WK

von Dogbert (Gast)


Lesenswert?

HilbertTrans schrieb:
> Multipliziert man nun im Frequenzbereich die Reelle Eingangsfolge mit
> einer frequenzselektiven Phase wird die Rücktransformierte komplex.

Nicht wenn die Multiplikation im Frequenzbereich mit einem 
"symmetrischen" Signal erfolgt, also einem auch im Zeitbereich rein 
reelwertigen Signal, Symmetrie hier erklärt:

ftp://ftp.tnt.uni-hannover.de/pub/edu/DigSig1/Edler/digsig-08.pdf

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.