2016-06-15 2 views
0

Учитывая 2 синусоидальных волны, я вычисляю результирующие синусоидальные волны, добавляя их. Теперь я хочу рассчитать фазу, на которой происходят пики интерференционной картины.Фаза, при которой пик интерференционной картины возникает после добавления 2 синусоидальных волн

здесь сюжет генерируется мной: enter image description here

и вот образ, который я пытаюсь создать. Я хочу обратить сюжетные A: enter image description here

Вот скрипт, используемый мною:

import numpy as np 
import matplotlib.pyplot as plt 

w_s = 10*2*np.pi 
w_d = 11.5*2*np.pi 
a_s = 1 
a_d = 1 
phi_d = 0 

x =np.arange(0,2,0.01) 

v_s = [a_s*np.cos(w_s*t) for t in np.arange(0,2,0.01)] 
v_d = [a_d*np.cos(w_d*t + phi_d) for t in np.arange(0,2,0.01)] 
resultant = [sum(i) for i in zip(v_s, v_d)] 

f, (ax1, ax2,ax3) = plt.subplots(3, sharex=True, sharey=True) 
ax1.plot(x,resultant,'k') 
ax1.set_ylabel('sum') 
ax2.plot(x, v_d,'b') 
ax2.set_ylabel('dendrite') 
ax3.plot(x, v_s,'r') 
ax3.set_ylabel('soma') 
f.subplots_adjust(hspace=0) 
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False) 
plt.setp([a.get_yticklabels() for a in f.axes[:3]], visible=False) 
plt.xlabel('Time(s)') 
plt.show() 
+0

Будут ли равны амплитуды синусоидальных волн? Если да, это значительно упрощает ... –

+0

Нет, это просто для обобщения. но все равно, как вы будете действовать, если амплитуды одинаковы. –

+0

При одинаковых амплитудных волнах вы можете получить простое замкнутое выражение для суммы, которое задается как произведение быстро меняющейся синусоиды и медленно меняющейся синусоиды (см. [Ref1] (http: //hyperphysics.phy-astr. gsu.edu/hbase/audio/sumdif.html)). Оттуда получение временных меток, при которых быстро меняющийся фактор достигает экстремумов, является тривиальным (а не проблемой программирования, а математическим). Единственное, что меня озадачивает - это черные точки в фигуре, которую вы прикрепили: это, по-видимому, фаза (аргумент) smt, но это не ясно. Кроме того, вертикальные линии на рисунке не выравниваются с –

ответ

2

Используйте Hilbert Transform для расчета аналитического сигнала и, следовательно, в envelope and instantaneous phase:

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

t = np.arange(0, 2, 0.01) 

a1, f1, phi1 = 1, 10, 0 
a2, f2, phi2 = 1, 11.5, 0 
s1 = a1 * np.cos(2 * np.pi * f1 * t + phi1) 
s2 = a2 * np.cos(2 * np.pi * f2 * t + phi2) 


fig, (axsum, ax1, ax2) = plt.subplots(3, sharex=True, figsize=(10,8)) 

axsum.plot(t, s1+s2, 'k') 
axsum.set_ylabel("sum") 

ax1.plot(t, s1, 'b') 
ax1.set_ylabel("signal 1") 

ax2.plot(t, s2, 'r') 
ax2.set_ylabel("signal 2") 
ax2.set_xlabel("time in s") 


sum_analytic = signal.hilbert(s1+s2) 
axsum.plot(t, np.abs(sum_analytic), 'g', lw=2) 
for ix in signal.argrelmax(np.abs(sum_analytic))[0]: 
    axsum.axvline(t[ix], color='r', lw=2) 

envelope of signal


Возможно, вам стоит взглянуть на NumPy tutorial, поэтому все ваши списки не были необходимы, например.

 Смежные вопросы

  • Нет связанных вопросов^_^