Сдвиг сигнала на долю выборки


9

У меня есть сигнал с временем выборки 0,5 микросекунды, и я хотел бы сдвинуть этот сигнал на долю времени выборки, скажем, на 3 наносекунды.

Я прочитал несколько онлайн-ресурсов о дробной фильтрации задержки и об использовании FFT и IFFT для выполнения такой задержки. Может ли кто-нибудь указать мне какую-то теорию по этому поводу или дать мне представление о том, как ее реализовать.

Для регулярного сдвига сигнала для целочисленных отсчетов я реализовал это, сдвинув сигнал на требуемое количество отсчетов и добавив нули в начале. Правильный ли этот подход?

Ответы:


13

Есть хорошая обзорная статья, которая появилась в 1996 году в журнале IEEE Signal Processing Magazine: разделение задержки на единицу: инструменты для создания фильтра с дробной задержкой . Приятно то, что есть также набор связанных файлов Matlab . Эти процедуры позволят вам разработать такую ​​систему.

Что касается сдвига на целое число выборок, то, что вы сделали, очевидно, правильно.


Я только просмотрел статью, так что я не уверен, явно ли это там, но дробная задержка связана с дробной производной, которая обобщает n-ю производную в произвольном порядке.
соултрейн

2

Помимо выполнения решений типа fft, вы также можете использовать интерполяцию, конкретный тип интерполяции, который уместен, будет, конечно, основываться на ваших потребностях! Раньше линейная интерполяция работала хорошо для меня с эффектами фланца, но ваш пробег может отличаться.

Лагранжеву интерполяцию также может стоить изучить, если линейная интерполяция недостаточно хороша. http://blog.demofox.org/2015/07/08/lagrange-interpolation/


Hermite может быть лучше, чем Lagrange, но если у вас есть доступ к MATLAB (или программе проектирования FIR-фильтров), вы можете создать себе интерполятор «банк многофазных фильтров», в котором у вас есть наборы коэффициентов для множества различных, равномерно распределенных, дробные задержки. выберите две дискретные дробные задержки, наиболее близкие к заданной дробной задержке, и линейно интерполируйте между ними.
Роберт Бристоу-Джонсон

0

Это можно сделать с помощью функции delayseq в MATLAB. Эта функция может сдвигать сигнал в дробных выборках. Вы можете либо указать количество сэмплов, которые вы хотите сдвинуть, либо, с точки зрения времени, количество задержки, которое вы хотите. Но важно отметить, что задержанный сигнал имеет ту же длину, что и исходный сигнал, поэтому, если вы не хотите обрезать сигнал, сначала используйте заполнение нулями, а затем delayseq. https://in.mathworks.com/help/phased/ref/delayseq.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.