【问题标题】:Frequency analysis of multiple sawtooth signal多锯齿信号的频率分析
【发布时间】:2019-02-14 17:11:34
【问题描述】:

有没有一种方法可以计算由多个锯齿函数组成的信号的基频?我有一个由 x 个嘈杂的锯齿组成的信号,我想得到它们的幅度和频率。参见下面的python代码:

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 1, 100)
y = signal.sawtooth(1 * np.pi * t) + 0.1*signal.sawtooth(4 * np.pi * t) + 0.01*signal.sawtooth(50 * np.pi * t)

plt.plot(t, y)
plt.show()

这给出了情节 sawtooth function

有没有办法分解信号得到类似的东西:

Frequency Amplitude
 1 1
 4 0.1
 50 0.01

我尝试过使用 FFT,但信号与上述信息不太相符。如果信号不是正弦波/余弦波,有什么想法可以将信号分解为其基本部分?

【问题讨论】:

    标签: python numpy signal-processing fft


    【解决方案1】:

    如果我正确理解了您的查询,您可以使用以下代码:

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import signal
    import scipy.fftpack
    
    # Number of samplepoints : use 2**n powers to optimize FFT
    N = 4096    # be aware of Nyquist–Shannon sampling theorem
    # Length of your signal
    t_f = 20
    # sample spacing
    T = t_f / N
    # Time signal vector
    t = np.linspace(0, t_f, N)
    #
    # first with trigonometric functions to make sure it's working
    y = 2*np.cos(t) + 12*np.cos(9*t) + 5*np.cos(42*t) # here you got 1-9-42 harmonics
    yf = scipy.fftpack.fft(y) # use FFT algorithm on the temporal signal
    xf = np.linspace(0.0, t_f/(2.0*T), N/2)  # taking advantage of symmetry of FFT if the signal is real valued
    # Plot of the spectral output
    fig, ax = plt.subplots()
    ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))
    plt.show()
    

    它提供了你的功能:

    # now with saw tooth functions
    y = signal.sawtooth(1 * np.pi * t) + 0.1*signal.sawtooth(4 * np.pi * t) + 0.01*signal.sawtooth(50 * np.pi * t)
    yf = scipy.fftpack.fft(y)
    xf = np.linspace(0.0, t_f/(2.0*T), N/2)
    # Plot of the spectral output
    fig, ax = plt.subplots()
    ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))
    plt.show()
    

    之后,您可以对这些结果进行后处理,并获得信号频谱分量的给定频率/幅度。

    希望这对您有所帮助。问候。

    【讨论】:

    • 问题是锯齿波信号具有衰减的 DFT 特征,需要去除。我几乎需要将信号的 FFT 除以干净信号的 FFT,但我还没有想出办法。
    【解决方案2】:

    如果所有锯齿波的周期数足够大,请尝试使用自相关而不是 FFT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多