Przesunąć sygnał o ułamek próbki

9

Mam sygnał o czasie próbkowania 0,5 mikrosekundy i chciałbym przesunąć ten sygnał o ułamek czasu próbkowania, powiedzmy o 3 nano sekundy.

Przeczytałem kilka zasobów online na temat filtrowania ułamkowego opóźnienia oraz na temat używania FFT i IFFT do wykonania takiego opóźnienia. Czy ktoś może wskazać mi jakąś teorię na ten temat lub dać mi pomysł, jak ją wdrożyć.

W celu regularnego przesuwania sygnału dla próbek liczb całkowitych zaimplementowałem to, przesuwając sygnał o wymaganą liczbę próbek i dodając zera na początku. Czy to podejście jest prawidłowe?

smysłow
źródło

Odpowiedzi:

13

Jest dobry artykuł przeglądowy, który ukazał się w 1996 roku w czasopiśmie IEEE Signal Processing Magazine: Podział opóźnienia jednostki: narzędzia do projektowania filtra ułamkowego opóźnienia . Zaletą jest to, że dostępny jest również zestaw powiązanych plików Matlab . Te procedury pozwolą ci zaprojektować taki system.

Jeśli chodzi o przesunięcie o liczbę całkowitą próbek, to, co zrobiłeś, jest oczywiście poprawne.

Matt L.
źródło
Przeszukałem tylko papier, więc nie jestem pewien, czy jest to wyraźnie w nim zawarte, ale opóźnienie ułamkowe jest powiązane z pochodną ułamkową, która uogólnia n-tą pochodną do dowolnego porządku.
soultrane
2

Oprócz robienia rozwiązań typu fft można również używać interpolacji, właściwy rodzaj interpolacji, który jest odpowiedni, będzie oczywiście oparty na twoich potrzebach! Interpolacja liniowa działała w przeszłości dla mnie dobrze z efektami kołnierzowymi, ale przebieg może się różnić.

Interpolacja Lagrange'a może być również warta spojrzenia w btw, jeśli interpolacja liniowa nie jest wystarczająco dobra. http://blog.demofox.org/2015/07/08/lagrange-interpolation/

Alan Wolfe
źródło
Hermite może być lepszy niż Lagrange, ale jeśli masz dostęp do MATLAB (lub programu do projektowania filtrów FIR), możesz sam zaprojektować interpolator „banku filtrów wielofazowych”, w którym masz zestawy współczynników dla różnych różnych, równomiernie rozmieszczonych, ułamkowe opóźnienia. wybierz dwa dyskretne opóźnienia ułamkowe najbliższe podanemu opóźnieniu ułamkowemu i interpoluj liniowo między nimi.
Robert Bristol-Johnnson
0

Można to zrobić za pomocą funkcji „delayseq” w MATLAB. Ta funkcja może przesunąć sygnał w ułamkowych próbkach. Możesz wpisać liczbę próbek, które chcesz przesunąć, lub pod względem czasu, żądanego opóźnienia. Należy jednak zauważyć, że opóźniony sygnał ma tę samą długość, co sygnał oryginalny, więc jeśli nie chcesz obcinać sygnału, najpierw zastosuj wypełnienie zerowe, a następnie opóźnij sekwencję. https://in.mathworks.com/help/phased/ref/delayseq.html

Mitali Rathod
źródło