Сгенерировать график единичного прямоугольного импульса

gele444ka

Новичок
Пользователь
Сен 30, 2021
1
0
1
Вот задание:
Построение единичного прямоугольного импульса: задать промежуток значений времени10 секунд, частота дискретизации 256 Гц. Построить график единичного прямоугольного импульса шириной 300 мс, с центром в момент времени 4 с.

Вот такой код есть, но почему то он строит треугольный ипульс:

1632994082025.png

Python:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

def rect(T):
    """create a centered rectangular pulse of width $T"""
    return lambda t: (-T/2 <= t) & (t < T/2)

def pulse_train(t, at, shape):
    """create a train of pulses over $t at times $at and shape $shape"""
    return np.sum(shape(t - at[:,np.newaxis]), axis=0)

sig = pulse_train(
    t= np.linspace(0, 10, 10, endpoint=False),              # time domain
    at=np.array([4]),  # times of pulses
    shape=rect(0.3)                 # shape of pulse
)
plt.plot(sig)
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
вставьте код как код, соблюдая отступы, подробнее тут как задать вопрос
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот такой код есть, но почему то он строит треугольный ипульс:
Видимо потому что вы в коде указали частоту дискретизации 1 гц вместо 256 гц. Если увеличить частоту дискретизации (количество точек на графике по оси x) то импульс будет прямоугольным:

Python:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

def rect(T):
    """create a centered rectangular pulse of width $T"""
    return lambda t: (-T/2 <= t) & (t < T/2)

def pulse_train(t, at, shape):
    """create a train of pulses over $t at times $at and shape $shape"""
    return np.sum(shape(t - at[:,np.newaxis]), axis=0)

sig = pulse_train(
    t= np.linspace(0, 10, 2560, endpoint=False),              # time domain
    at=np.array([4]),  # times of pulses
    shape=rect(0.3)                 # shape of pulse
)
plt.plot(sig)
plt.show()
 

Форум IT Специалистов