import matplotlib.pyplot as plt

# Создание холста для рисования
fig, ax = plt.subplots(figsize=(10, 6.5))
ax.set_xlim(0, 10)
ax.set_ylim(0, 7)
ax.axis('off')  # Скрытие осей координат

# Настройки стилей блоков (цвета, рамки)
box_encoder = dict(boxstyle='round,pad=0.5', facecolor='#e6f2ff', edgecolor='#0066cc', lw=1.5)
box_decoder = dict(boxstyle='round,pad=0.5', facecolor='#fff2e6', edgecolor='#cc6600', lw=1.5)

# --- БЛОКИ КОДЕРА ---
ax.text(5, 6.6, 'КОДЕР (Encoder)', fontsize=12, fontweight='bold', ha='center', color='#0066cc')

ax.text(0.8, 5.5, 'Входной\nаудиосигнал', boxstyle='square,pad=0.3', facecolor='none', edgecolor='gray', ha='center', va='center', fontsize=9)
ax.text(3.2, 5.5, 'Анализирующий\nбанк фильтров', **box_encoder, ha='center', va='center', fontsize=10)
ax.text(3.2, 4.0, 'Психоакустическая\nмодель', **box_encoder, ha='center', va='center', fontsize=10)
ax.text(6.5, 5.5, 'Квантование\nи кодирование', **box_encoder, ha='center', va='center', fontsize=10)
ax.text(9.2, 5.5, 'Мультиплексор\nпотока', **box_encoder, ha='center', va='center', fontsize=10)
ax.text(9.2, 4.3, 'Выходной\nбитовый поток', boxstyle='square,pad=0.3', facecolor='none', edgecolor='gray', ha='center', va='center', fontsize=9)

# Настройка стрелок связи
arrow = dict(facecolor='black', edgecolor='black', width=0.6, head_width=3, head_length=4, shrink=0.05)

# Отрисовка стрелок кодера
ax.annotate('', xy=(2.0, 5.5), xytext=(1.4, 5.5), arrowprops=arrow)
ax.annotate('', xy=(5.2, 5.5), xytext=(4.4, 5.5), arrowprops=arrow)
ax.annotate('', xy=(3.2, 4.5), xytext=(3.2, 5.0), arrowprops=arrow)
ax.annotate('', xy=(5.5, 5.1), xytext=(4.4, 4.0), arrowprops=dict(facecolor='black', width=0.6, head_width=3, head_length=4, connectionstyle="angle,angleA=0,angleB=90,rad=0"))
ax.annotate('', xy=(8.1, 5.5), xytext=(7.8, 5.5), arrowprops=arrow)
ax.annotate('', xy=(9.2, 4.7), xytext=(9.2, 5.1), arrowprops=arrow)

# --- БЛОКИ ДЕКОДЕРА ---
ax.text(5, 3.1, 'ДЕКОДЕР (Decoder)', fontsize=12, fontweight='bold', ha='center', color='#cc6600')

ax.text(0.8, 2.0, 'Входной\nбитовый поток', boxstyle='square,pad=0.3', facecolor='none', edgecolor='gray', ha='center', va='center', fontsize=9)
ax.text(3.0, 2.0, 'Демультиплексор\nпотока', **box_decoder, ha='center', va='center', fontsize=10)
ax.text(5.8, 2.0, 'Обратное\nквантование', **box_decoder, ha='center', va='center', fontsize=10)
ax.text(8.5, 2.0, 'Синтезирующий\nбанк фильтров', **box_decoder, ha='center', va='center', fontsize=10)
ax.text(8.5, 0.7, 'Выходной\nаудиосигнал', boxstyle='square,pad=0.3', facecolor='none', edgecolor='gray', ha='center', va='center', fontsize=9)

# Отрисовка стрелок декодера
ax.annotate('', xy=(1.9, 2.0), xytext=(1.4, 2.0), arrowprops=arrow)
ax.annotate('', xy=(4.6, 2.0), xytext=(4.1, 2.0), arrowprops=arrow)
ax.annotate('', xy=(7.2, 2.0), xytext=(7.0, 2.0), arrowprops=arrow)
ax.annotate('', xy=(8.5, 1.1), xytext=(8.5, 1.5), arrowprops=arrow)

plt.tight_layout()
plt.savefig('MPEG_architecture_RU.png', dpi=300, bbox_inches='tight') # Сохранение в файл
plt.show()
