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