您可以使用(例如)局部变化的频率。将正弦函数视为基本周期函数,使用局部变化的频率可以产生“拉伸”和/或“膨胀”效果。
示例 1:线性频率变化的啁啾函数(查看wiki page 了解更多信息):
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,您可以从它们开始以获得随机变化的信号频率。