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

时间:2018-05-12 12:54:02

标签: python numpy signal-processing convolution

我试图不止一次地将方波与自身卷积并看到结果图。我知道如何通过我的手进行卷积,但我对使用Python的信号处理没有经验。所以我的问题是:

  1. 如何在Python中表示信号?例如:
  2. x(t)=1,0≤t≤1

    x(t)= 0,否则

    1. 如何将这个方波与自身卷积?
    2. 到目前为止,我必须使用numpy的内置卷积方法;但问题是我被困在这个方波中。

1 个答案:

答案 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()

convolution

在数学上,这些被称为cardinal B-splines,密度为Irwin–Hall distribution