Загрузка данных


import numpy as np
import matplotlib.pyplot as plt


# ЗАДАНИЕ 1. Синус 500 Гц

f = 500
fs = 2000
duration = 0.01  # 10 миллисекунд

# Моменты отсчётов и значения сигнала
t = np.arange(round(duration * fs) + 1) / fs
signal = np.sin(2 * np.pi * f * t)

# Более плотная сетка только для показа исходной синусоиды
fine_t = np.linspace(0, duration, 2001)
fine_signal = np.sin(2 * np.pi * f * fine_t)

plt.figure(figsize=(10, 4))

plt.plot(
    fine_t * 1000,
    fine_signal,
    label="Исходный синус"
)
plt.plot(
    t * 1000,
    signal,
    "o--",
    label="Отсчёты: 2000 Гц"
)

plt.title("Синус 500 Гц")
plt.xlabel("Время, мс")
plt.ylabel("Амплитуда, усл. ед.")
plt.grid()
plt.legend()
plt.tight_layout()

plt.savefig("sinus_500.png", dpi=300)


# ЗАДАНИЕ 2. Амплитудная модуляция

fc = 1_000_000   # Частота несущей, Гц
fm = 10_000      # Частота модулирующего сигнала, Гц
m = 0.5         # Глубина модуляции: 50%
A = 1           # Амплитуда несущей
fs = 20_000_000  # Частота дискретизации, Гц

duration = 3 / fm  # Показываем три периода модуляции
t = np.arange(round(duration * fs) + 1) / fs

message = np.sin(2 * np.pi * fm * t)
carrier = np.cos(2 * np.pi * fc * t)

envelope = A * (1 + m * message)
am_signal = envelope * carrier

t_us = t * 1_000_000  # Время в микросекундах

fig, axes = plt.subplots(3, 1, figsize=(11, 9))

# Модулирующий сигнал
axes[0].plot(t_us, message)
axes[0].set_title("Модулирующий сигнал: 10 кГц")

# АМ-сигнал и его огибающие
axes[1].plot(
    t_us, am_signal,
    linewidth=0.6,
    label="АМ-сигнал"
)
axes[1].plot(t_us, envelope, "r--", label="Огибающие")
axes[1].plot(t_us, -envelope, "r--")
axes[1].set_title(
    "Амплитудная модуляция: несущая 1 МГц, глубина 50%"
)
axes[1].legend()

# Увеличенный фрагмент, чтобы видеть колебания несущей
fragment = t <= 10e-6

axes[2].plot(
    t_us[fragment],
    am_signal[fragment],
    "o-",
    markersize=2
)
axes[2].plot(t_us[fragment], envelope[fragment], "r--")
axes[2].plot(t_us[fragment], -envelope[fragment], "r--")
axes[2].set_title("Увеличенный фрагмент: первые 10 мкс")

for ax in axes:
    ax.set_xlabel("Время, мкс")
    ax.set_ylabel("Амплитуда, усл. ед.")
    ax.grid()

plt.tight_layout()
fig.savefig("am_modulation.png", dpi=300)

plt.show()