【问题标题】:Creating a Pseudo-Cyclic signal using a cyclic signal使用循环信号创建伪循环信号
【发布时间】:2021-01-13 04:04:33
【问题描述】:

我正在寻找一种使用 numpypytorch 来扭曲张量的方法。

例如,给定一个sin(x) 的样本数组,我希望得到它的倾斜版本(最好是相同的大小),这样函数的循环要么被拉伸,要么缩小,甚至两者兼而有之(如果它可以插值它是随机的),因此在某些地方频率较高,在某些地方频率较低。

我需要创建“伪循环​​”信号,这意味着它们几乎是循环的,但并不完美。

【问题讨论】:

    标签: python numpy scipy pytorch signal-processing


    【解决方案1】:

    您可以使用(例如)局部变化的频率。将正弦函数视为基本周期函数,使用局部变化的频率可以产生“拉伸”和/或“膨胀”效果。

    示例 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,您可以从它们开始以获得随机变化的信号频率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2012-01-07
      相关资源
      最近更新 更多