Создание псевдоциклического сигнала с использованием циклического сигнала

#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()
  

что приводит к увеличению частоты псевдопериодического сигнала:

сигнал chirp

Пример 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 с которых вы можете начать, чтобы перейти к случайно изменяющимся частотам сигнала.