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