В numpy - как я могу вычислить фазу и амплитуду синусоиды, соотнося ее с синусом и косинусом? - PullRequest
0 голосов
/ 23 марта 2019

У меня есть входящая синусоида с известной частотой. Я понимаю, что можно вычислить его фазу и амплитуду, вычислив их соотношение с синусом и косинусом. Как бы я это сделал, используя numpy?

Или, может быть, есть лучший способ сделать это. Глядя на это здесь , но я не знаю, как выполнить вычисления в numpy.

Я новичок Буду признателен за некоторые советы.

1 Ответ

1 голос
/ 23 марта 2019

Один удобный способ - воспользоваться формулой Эйлера 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
...