如何在 python 中表示方波以及如何对其进行卷积?
How to represent a square wave in python and how to convolve it?
我试图多次将方波与其自身进行卷积并查看生成的图形。我知道如何用手做卷积,但我没有使用 Python 进行信号处理的经验。所以我的问题是:
- 如何在 Python 中表示信号?例如:
x(t) = 1 , 0 ≤ t ≤ 1
x(t) = 0,否则
- 如何将这个方波与其自身进行卷积?
到目前为止,我必须使用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。
我试图多次将方波与其自身进行卷积并查看生成的图形。我知道如何用手做卷积,但我没有使用 Python 进行信号处理的经验。所以我的问题是:
- 如何在 Python 中表示信号?例如:
x(t) = 1 , 0 ≤ t ≤ 1
x(t) = 0,否则
- 如何将这个方波与其自身进行卷积?
到目前为止,我必须使用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。