如何解决使用循环信号创建伪循环信号
我正在寻找一种使用numpy
或pytorch
来扭曲张量的方法。
例如,给定sin(x)
的样本数组,我希望得到它的偏斜版本(最好是相同大小),以使函数的周期被拉伸或缩小,或者甚至是两者(如果有的话)可以对其进行随机插值),因此某些部分的频率较高,而某些部分的频率较低。
我需要创建“伪循环”信号,这意味着它们几乎是循环的,但并不完美。
解决方法
您可以使用(例如)本地变化的频率来玩耍。将正弦函数作为基本周期函数,使用局部变化的频率可以产生“拉伸”和/或“扩张”效果。
示例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,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,y)
plt.ylabel('signal')
plt.xlabel('samples')
plt.show()
具有以下输出
使用频率功能可以帮助获得其他伪周期信号形状。还要注意,scipy
带有一组sweep_poly
之类的信号发生器,您可以从中开始,以获取随机变化的信号频率。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。