Verschieben Sie ein Signal um einen Bruchteil einer Probe


9

Ich habe ein Signal mit einer Abtastzeit von 0,5 Mikrosekunden und möchte dieses Signal um einen Bruchteil der Abtastzeit verschieben, beispielsweise um 3 Nanosekunden.

Ich habe einige Online-Ressourcen über die Filterung von Teilverzögerungen und über die Verwendung von FFT und IFFT zur Durchführung einer solchen Verzögerung gelesen. Kann mich jemand auf eine Theorie dazu verweisen oder mir eine Idee geben, wie ich sie umsetzen kann?

Für die regelmäßige Verschiebung des Signals für ganzzahlige Abtastwerte habe ich dies implementiert, indem ich das Signal um die erforderliche Anzahl von Abtastwerten verschoben und am Anfang Nullen hinzugefügt habe. Ist dieser Ansatz richtig?

Antworten:


13

Es gibt einen guten Übersichtsartikel, der 1996 im IEEE Signal Processing Magazine erschien: Aufteilen der Einheitsverzögerung: Werkzeuge für das Filterdesign mit gebrochener Verzögerung . Das Schöne daran ist, dass es auch eine Reihe verwandter Matlab-Dateien gibt. Mit diesen Routinen können Sie ein solches System entwerfen.

Was das Verschieben um eine ganzzahlige Anzahl von Samples betrifft, ist das, was Sie getan haben, offensichtlich richtig.


Ich habe nur das Papier überflogen, daher bin ich mir nicht sicher, ob dies explizit vorhanden ist, aber die gebrochene Verzögerung hängt mit der gebrochenen Ableitung zusammen, die die n-te Ableitung auf eine beliebige Reihenfolge verallgemeinert.
Soultrane

2

Neben fft-Lösungen können Sie auch Interpolation verwenden. Die geeignete Art der Interpolation hängt natürlich von Ihren Anforderungen ab! Die lineare Interpolation hat in der Vergangenheit bei mir mit Flanscheffekten gut funktioniert, aber Ihr Kilometerstand kann variieren.

Eine Lagrange-Interpolation kann sich auch lohnen, wenn die lineare Interpolation nicht gut genug ist. http://blog.demofox.org/2015/07/08/lagrange-interpolation/


Hermite ist vielleicht besser als Lagrange, aber wenn Sie Zugriff auf MATLAB (oder ein FIR-Filterdesignprogramm) haben, können Sie sich einen Interpolator für "Mehrphasenfilterbank" entwerfen, in dem Sie Koeffizientensätze für eine Vielzahl unterschiedlicher, gleichmäßig verteilter, Teilverzögerungen. Wählen Sie die zwei diskreten Bruchverzögerungen aus, die Ihrer gegebenen Bruchverzögerung am nächsten liegen, und interpolieren Sie linear zwischen ihnen.
Robert Bristow-Johnson

0

Dies kann mit der Funktion 'delayseq' in MATLAB erfolgen. Diese Funktion kann das Signal in Teilproben verschieben. Sie können entweder die Anzahl der Samples schreiben, die Sie verschieben möchten, oder die Anzahl der gewünschten Verzögerungen in Bezug auf die Zeit. Es ist jedoch wichtig zu beachten, dass das verzögerte Signal dieselbe Länge wie das ursprüngliche Signal hat. Wenn Sie das Signal also nicht abschneiden möchten, verwenden Sie zuerst die Null-Auffüllung und dann die Verzögerungseq. https://in.mathworks.com/help/phased/ref/delayseq.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.