Сдвиг влево на t0 в сигнале можно получить путем свертки его с δ(t+t0). Я хочу получить это в Python, используя дискретные сигналы, используя только оператор np.convolve в mode='full'. Обратите внимание, что я не могу использовать np.roll или присваивание из индекса, например [shift:]. Его необходимо получить исключительно путем свертки. Вот пример:
Код: Выделить всё
signal = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
shift = 3
filter = ??
shifted_signal = np.convolve(signal, filter, mode='full')
print(shifted_signal)
[4, 5, 6, 7, 8, 9, 0, 0, 0, ...
Количество нулей в правой части или, скажем, длина смещенного_сигнала не имеет значения. Но я хочу, чтобы сигнал начинался с правильной позиции. Каким должен быть фильтр, чтобы я получил желаемый результат? Мне это нужно так, потому что я пытаюсь получить сдвиг влево в результате анализа БПФ. Сдвиг влево на t0 во временной области соответствует умножению ei2πft0 в частотной области. Я могу получить t0, сравнивая сдвинутый сигнал с оригиналом в частотной области. Но чтобы проверить, работает ли мой алгоритм, я просто не могу придумать фильтр, который выполнял бы сдвиг влево во временной области.
Я попробовал filter = [0, 0, 0, 1 ] и filter = [1, 0, 0, 0], но они добавляют нули слева и справа от сигнала. Сам сигнал не начинается с желаемого индекса. Я понятия не имею, какой еще фильтр можно использовать для получения желаемого результата.
Подробнее здесь:
https://stackoverflow.com/questions/788 ... ion-in-pyt