无天体卷积的梯形内核
Trapezoidal Kernel for convolution without Astropy
我正在尝试在 python 中实现梯形核以进行卷积。有没有办法像在 astropy 模块中那样进行卷积:Trapezoid1DKernel(width,slope) 通过使用它的梯形内核?
我曾有过同样的查询。没有办法实现内核,而是可以生成梯形波,然后您可以继续进行卷积部分。我是用这个实现的:
from scipy import signal
import matplotlib.pyplot as plt
from matplotlib import style
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([32],[1],[0.0322]):
t = np.linspace(0, w, 34)
plt.plot(t,trapzoid_signal(t, width=w, slope=s, amp=a))
plt.show()
结果:
https://i.stack.imgur.com/8RkBF.png
(width和slope的值完全一样,才能生成和astropy的梯形核一样的梯形波形)。希望这有帮助。
我正在尝试在 python 中实现梯形核以进行卷积。有没有办法像在 astropy 模块中那样进行卷积:Trapezoid1DKernel(width,slope) 通过使用它的梯形内核?
我曾有过同样的查询。没有办法实现内核,而是可以生成梯形波,然后您可以继续进行卷积部分。我是用这个实现的:
from scipy import signal
import matplotlib.pyplot as plt
from matplotlib import style
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([32],[1],[0.0322]):
t = np.linspace(0, w, 34)
plt.plot(t,trapzoid_signal(t, width=w, slope=s, amp=a))
plt.show()
结果: https://i.stack.imgur.com/8RkBF.png
(width和slope的值完全一样,才能生成和astropy的梯形核一样的梯形波形)。希望这有帮助。