如何在 python 中表示方波以及如何对其进行卷积?

How to represent a square wave in python and how to convolve it?

我试图多次将方波与其自身进行卷积并查看生成的图形。我知道如何用手做卷积,但我没有使用 Python 进行信号处理的经验。所以我的问题是:

  1. 如何在 Python 中表示信号?例如:

x(t) = 1 , 0 ≤ t ≤ 1

x(t) = 0,否则

  1. 如何将这个方波与其自身进行卷积?

到目前为止,我必须使用numpy的内置卷积方法;但问题是我无法代表这个方波。

创建合适的 0-1 数组的一种方法是 np.fromfunction,向其传递一个在 wave 中 returns 为真的函数。转换为浮点数会产生 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 and as the density of Irwin–Hall distribution