У меня есть сигнал с временем выборки 0,5 микросекунды, и я хотел бы сдвинуть этот сигнал на долю времени выборки, скажем, на 3 наносекунды.
Я прочитал несколько онлайн-ресурсов о дробной фильтрации задержки и об использовании FFT и IFFT для выполнения такой задержки. Может ли кто-нибудь указать мне какую-то теорию по этому поводу или дать мне представление о том, как ее реализовать.
Для регулярного сдвига сигнала для целочисленных отсчетов я реализовал это, сдвинув сигнал на требуемое количество отсчетов и добавив нули в начале. Правильный ли этот подход?
Помимо выполнения решений типа fft, вы также можете использовать интерполяцию, конкретный тип интерполяции, который уместен, будет, конечно, основываться на ваших потребностях! Раньше линейная интерполяция работала хорошо для меня с эффектами фланца, но ваш пробег может отличаться.
Лагранжеву интерполяцию также может стоить изучить, если линейная интерполяция недостаточно хороша. http://blog.demofox.org/2015/07/08/lagrange-interpolation/
источник
Это можно сделать с помощью функции delayseq в MATLAB. Эта функция может сдвигать сигнал в дробных выборках. Вы можете либо указать количество сэмплов, которые вы хотите сдвинуть, либо, с точки зрения времени, количество задержки, которое вы хотите. Но важно отметить, что задержанный сигнал имеет ту же длину, что и исходный сигнал, поэтому, если вы не хотите обрезать сигнал, сначала используйте заполнение нулями, а затем delayseq. https://in.mathworks.com/help/phased/ref/delayseq.html
источник