Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加2个正弦波后出现干涉图峰值的相位_Python_Signal Processing - Fatal编程技术网

Python 添加2个正弦波后出现干涉图峰值的相位

Python 添加2个正弦波后出现干涉图峰值的相位,python,signal-processing,Python,Signal Processing,给定两个正弦波,我通过相加来计算合成正弦波。现在我想计算干涉图峰值出现的相位 以下是我生成的图: 这是我试图创造的形象。我想画一个子图A: 以下是我使用的脚本: 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

给定两个正弦波,我通过相加来计算合成正弦波。现在我想计算干涉图峰值出现的相位

以下是我生成的图:

这是我试图创造的形象。我想画一个子图A:

以下是我使用的脚本:

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()
使用计算分析信号,从而计算:


例如,您可能想看一看a,您的所有列表理解都不是必需的。

使用来计算分析信号,因此:



例如,您可能想看一看a,您对列表的所有理解都不是必需的。

要添加的正弦波振幅是否总是相等的?如果是的话,这就大大简化了事情……不,这只是为了泛化。但是如果振幅相同,你会怎么做呢?对于等振幅波,你可以得到一个简单的和的闭合表达式,它是快速变化的正弦波和缓慢变化的正弦波的乘积(参见)。从那里得到快速变化的因子达到极值的时间步长是很简单的(不是一个编程问题,而是一个数学问题)。唯一让我困惑的是你所附图中的黑点:它似乎是smt的阶段(参数),但这并不清楚。此外,图中的垂直线与。。。求和的极值。所以,无论是谁做的,都是在猜测这些地点,或者策划与你所问的不同的事情。你能详细说明一下除了你已经拥有的以外,你还想给这个数字增加什么吗?所以,我猜是绿色信封(很简单,见参考文献),但那些黑点是什么?绿色信封不是问题。。。。所以基本上这些黑点指的是每个合成(和)波的峰值出现的相位值。要加的正弦波的振幅总是相等的吗?如果是的话,这就大大简化了事情……不,这只是为了泛化。但是如果振幅相同,你会怎么做呢?对于等振幅波,你可以得到一个简单的和的闭合表达式,它是快速变化的正弦波和缓慢变化的正弦波的乘积(参见)。从那里得到快速变化的因子达到极值的时间步长是很简单的(不是一个编程问题,而是一个数学问题)。唯一让我困惑的是你所附图中的黑点:它似乎是smt的阶段(参数),但这并不清楚。此外,图中的垂直线与。。。求和的极值。所以,无论是谁做的,都是在猜测这些地点,或者策划与你所问的不同的事情。你能详细说明一下除了你已经拥有的以外,你还想给这个数字增加什么吗?所以,我猜是绿色信封(很简单,见参考文献),但那些黑点是什么?绿色信封不是问题。。。。所以基本上这些黑点指的是每个合成波(和波)峰值出现的相位值。
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)