#python #numpy #scipy #pytorch #signal-processing
#python #numpy #scipy #pytorch #обработка сигналов
Вопрос:
Я ищу способ использования numpy
или pytorch
для искажения тензора.
Например, учитывая массив выборок sin(x)
, я надеюсь получить его искаженную версию (желательно того же размера), чтобы цикл функции либо растягивался, либо сжимался, либо даже и то, и другое (если он может интерполировать его случайным образом), поэтому в некоторых частях частота выше, а в некоторых частяхниже.
Мне нужно создать «псевдоциклические» сигналы, что означает, что они почти циклические, но не идеальные.
Ответ №1:
Вы можете поиграть с (например) локально изменяющейся частотой. Рассматривая синусоидальную функцию в качестве базовой периодической функции, использование локально изменяющейся частоты может дать «растянутый» и / или «расширенный» эффект.
Пример 1: функция chirp с линейным изменением частоты (проверьте страницу wiki для получения дополнительной информации):
import matplotlib.pyplot as plt
import numpy as np
# initialize
n = 1000
x = np.linspace(0, 10, n)
# variying frequency between 2 and 4
f = np.linspace(2, 4, n)
y = np.sin(f * x)
# plot local frequency values and signal
plt.subplot(211)
plt.plot(x, f)
plt.ylabel('Local frequency')
plt.subplot(212)
plt.plot(x, y)
plt.ylabel('signal')
plt.xlabel('samples')
plt.show()
что приводит к увеличению частоты псевдопериодического сигнала:
Пример 2: изменение частоты с помощью произвольной функции (здесь полином):
import matplotlib.pyplot as plt
import numpy as np
# initialize
n = 1000
x = np.linspace(0, 10, n)
# variying frequency between 2 and 4
f = .5 * (2 (x - 5) ** 2 2 * x)
y = np.sin(f * x)
# plot local frequency values and signal
plt.subplot(211)
plt.plot(x, f)
plt.ylabel('Local frequency')
plt.subplot(212)
plt.plot(x, y)
plt.ylabel('signal')
plt.xlabel('samples')
plt.show()
со следующим выводом
Игра с функцией частоты может помочь получить другие формы псевдопериодического сигнала. Также обратите внимание, что scipy
он поставляется с набором генераторов сигналов, sweep_poly
с которых вы можете начать, чтобы перейти к случайно изменяющимся частотам сигнала.