gpt4 book ai didi

python-3.x - Python 中的梯形波

转载 作者:行者123 更新时间:2023-12-02 03:02:53 25 4
gpt4 key购买 nike

如何在 Python 中生成梯形波?

我研究了SciPy和NumPy等模块,但没有成功。是否有像 scipy.signal.gaussian 这样的模块返回表示高斯函数波的值数组?

Enter image description here

我使用Astropy的梯形内核生成了这个,梯形1DKernel(30,斜率=1.0)。我想在 Python 中实现这个而不使用 Astropy。

最佳答案

虽然宽度和斜率足以定义三角信号,但梯形信号需要第三个参数:幅度。

使用这三个参数,您可以轻松调整 scipy.signal.sawtooth 函数,通过截断和偏移三角形函数来获得梯形形状。

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


def trapzoid_signal(t, width=2., slope=1., amp=1., offs=0):
a = slope*width*signal.sawtooth(2*np.pi*t/width, width=0.5)/4.
a[a>amp/2.] = amp/2.
a[a<-amp/2.] = -amp/2.
return a + amp/2. + offs

t = np.linspace(0, 6, 501)
plt.plot(t,trapzoid_signal(t, width=2, slope=2, amp=1.), label="width=2, slope=2, amp=1")
plt.plot(t,trapzoid_signal(t, width=4, slope=1, amp=0.6), label="width=4, slope=1, amp=0.6")

plt.legend( loc=(0.25,1.015))
plt.show()

enter image description here

请注意,您可能还想根据用例定义一个阶段。

为了定义单个脉冲,您可能需要稍微修改一下函数并提供一个范围超过 [0,width] 的数组。

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

def trapzoid_signal(t, width=2., slope=1., amp=1., offs=0):
a = slope*width*signal.sawtooth(2*np.pi*t/width, width=0.5)/4.
a += slope*width/4.
a[a>amp] = amp
return a + offs

for w,s,a in zip([2,5], [2,1], [1,0.6]):
t = np.linspace(0, w, 501)
l = "width={}, slope={}, amp={}".format(w,s,a)
plt.plot(t,trapzoid_signal(t, width=w, slope=s, amp=a), label=l)

plt.legend( loc="upper right")
plt.show()

enter image description here

关于python-3.x - Python 中的梯形波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44539696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com