如何通过将正弦和正弦和余弦相关的正弦曲线计算相位



i具有带有已知频率的正弦曲线。我知道可以通过计算其与正弦和余弦的相关性来计算其相位和振幅。我该如何使用numpy?

或者有更好的方法可以做到这一点?在这里看这个,但我不知道如何在numpy中进行计算。

一种方便的方法是利用Euler的公式e^(i phi) = cos phi + i sin phi

def get_cos_params(samples):
    N = len(samples)
    x = np.linspace(-np.pi, np.pi, N, endpoint=False)
    template = np.exp(1j * x)
    corr = 2 / N * template@samples
    R = np.abs(corr)
    phi = np.log(corr).imag
    return R, phi

示例:

N = np.random.randint(10, 1000)
phi = np.random.uniform(-np.pi, np.pi)
R = np.random.uniform(0.1, 10)
x = np.linspace(-np.pi, np.pi, N, endpoint=False)
signal = R * np.cos(x-phi)
R_recon, phi_recon = get_cos_params(signal)
print(np.isclose(R, R_recon), np.isclose(phi, phi_recon))
# True True

最新更新