Как изобразить прямоугольную волну в питоне и как ее свернуть? - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь свернуть прямоугольную волну с собой более одного раза и увидеть полученный график.Я знаю, как сделать свертку своими руками, но у меня нет опыта обработки сигналов с Python.Итак, мои вопросы:

  1. Как я могу представить сигнал в Python?Например:

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

x (t) = 0, в противном случае

Как я могу свернуть эту прямоугольную волну с собой?

Что я зашёл так далеко, так это то, что я должен использовать встроенный метод Numpy Convolve;но проблема в том, что я застрял, представляя эту прямоугольную волну.

1 Ответ

0 голосов
/ 13 мая 2018

Один из способов создать подходящий массив 0-1 - это np.fromfunction, передав ему функцию, которая возвращает True в волне. Преобразование в плавающее приводит к массиву 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

Математически они известны как кардинальные B-сплайны и как плотность распределение Ирвина-Холла .

...