import numpy as np
import matplotlib.pyplot as plt
# Константы
c = 343 # Скорость звука (м/с)
rho = 1.225 # Плотность воздуха (кг/м³)
# Ввод данных динамика (пример)
Fs = 30 # Резонансная частота (Гц)
Vas = 50 # Эквивалентный объем (литры -> м³: Vas / 1000)
Qts = 0.4 # Полная добротность
Sd = 300 # Площадь диффузора (см² -> м²: Sd / 10000)
D = 25 # Диаметр динамика (см)
# Дополнительные параметры
Qtc = 0.7 # Для ЗЯ
D_port = 10 # Диаметр порта (см)
Fb = 25 # Частота настройки (Гц) для ПИ
Cmp = 0.001 # Гибкость подвеса (м/Н)
Mmd = 0.02 # Масса диффузора (кг)
def closed_box():
Vas_m3 = Vas / 1000
Vb = Vas_m3 / ((Qtc / Qts)**2 - 1)
F3 = Fs * np.sqrt((Vas_m3 / Vb) + 1)
return Vb, F3
def bass_reflex():
Vas_m3 = Vas / 1000
Vb = 15 * Vas_m3 * (Qts**2.87)
S_port = np.pi * (D_port/2 / 100)**2 # м²
L_port = (c**2 * S_port) / (4 * np.pi**2 * Fb**2 * Vb) - 0.85 * np.sqrt(S_port)
# Проверка скорости воздуха
Vd_max = Sd / 10000 * 0.01 # Предполагаемое смещение (Xmax = 10 мм)
U_max = np.sqrt((Fs**3 * Vd_max) / (2 * np.pi * Fb**2))
return Vb, L_port, U_max
def passive_radiator():
Vas_m3 = Vas / 1000
Vb = Vas_m3 * (Qts / 0.5)**3
Mmp = (1 / (4 * np.pi**2 * Fb**2 * Cmp)) - Mmd
return Vb, Mmp
# Расчеты
Vb_closed, F3_closed = closed_box()
Vb_br, L_port, U_max = bass_reflex()
Vb_pr, Mmp = passive_radiator()
# Вывод результатов
print(f"[Закрытый ящик]\nОбъем: {Vb_closed:.2f} м³\nЧастота среза: {F3_closed:.1f} Гц\n")
print(f"[Фазоинвертор]\nОбъем: {Vb_br:.2f} м³\nДлина порта: {L_port:.2f} м\nМакс. скорость воздуха: {U_max:.2f} м/с (допуск < 0.2 Маха)\n")
print(f"[Пассивный излучатель]\nОбъем: {Vb_pr:.2f} м³\nМасса излучателя: {Mmp:.3f} кг\n")
# Графики АЧХ
freq = np.logspace(1, 3, 500) # 10 Гц - 1000 Гц
# Закрытый ящик
spl_closed = 20 * np.log10(1 / np.sqrt(1 + (freq / F3_closed)**4))
# Фазоинвертор
spl_br = 20 * np.log10(np.sqrt((freq**4) / ((freq**2 - Fb**2)**2 + (freq * Fs / Qts)**2)))
# Пассивный излучатель
spl_pr = 20 * np.log10(freq**2 / np.sqrt((freq**2 - Fb**2)**2 + (freq * Fs / Qts)**2))
plt.figure(figsize=(10, 6))
plt.semilogx(freq, spl_closed, label='Закрытый ящик')
plt.semilogx(freq, spl_br, label='Фазоинвертор')
plt.semilogx(freq, spl_pr, label='Пассивный излучатель')
plt.xlabel('Частота (Гц)')
plt.ylabel('Уровень (дБ)')
plt.grid(True)
plt.legend()
plt.title('Сравнение АЧХ')
plt.show()