我试图不止一次地将方波与自身卷积并看到结果图。我知道如何通过我的手进行卷积,但我对使用Python的信号处理没有经验。所以我的问题是:
x(t)=1,0≤t≤1
x(t)= 0,否则
到目前为止,我必须使用numpy的内置卷积方法;但问题是我被困在这个方波中。
答案 0 :(得分:2)
创建合适的0-1数组的一种方法是np.fromfunction
,传递一个在wave中返回True的函数。转换为float会产生0-1数组。
对于此图示,最好将波定位在数组的中间,避免与卷积相关的边界效应。使用mode='same'
允许将所有曲线绘制在一起。另外,不要忘记将convolve
的输出除以sample_rate
,否则每次卷积时它将与其成比例增长。
import numpy as np
import matplotlib.pyplot as plt
sample_rate = 100
num_samples = 500
wave = np.fromfunction(lambda i: (2*sample_rate < i) & (i < 3*sample_rate), (num_samples,)).astype(np.float)
wave1 = np.convolve(wave, wave, mode='same')/sample_rate
wave2 = np.convolve(wave1, wave, mode='same')/sample_rate
wave3 = np.convolve(wave2, wave, mode='same')/sample_rate
plt.plot(np.stack((wave, wave1, wave2, wave3), axis=1))
plt.show()
在数学上,这些被称为cardinal B-splines,密度为Irwin–Hall distribution。