fork download
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. # Константы
  5. c = 343 # Скорость звука (м/с)
  6. rho = 1.225 # Плотность воздуха (кг/м³)
  7.  
  8. # Ввод данных динамика (пример)
  9. Fs = 30 # Резонансная частота (Гц)
  10. Vas = 50 # Эквивалентный объем (литры -> м³: Vas / 1000)
  11. Qts = 0.4 # Полная добротность
  12. Sd = 300 # Площадь диффузора (см² -> м²: Sd / 10000)
  13. D = 25 # Диаметр динамика (см)
  14.  
  15. # Дополнительные параметры
  16. Qtc = 0.7 # Для ЗЯ
  17. D_port = 10 # Диаметр порта (см)
  18. Fb = 25 # Частота настройки (Гц) для ПИ
  19. Cmp = 0.001 # Гибкость подвеса (м/Н)
  20. Mmd = 0.02 # Масса диффузора (кг)
  21.  
  22. def closed_box():
  23. Vas_m3 = Vas / 1000
  24. Vb = Vas_m3 / ((Qtc / Qts)**2 - 1)
  25. F3 = Fs * np.sqrt((Vas_m3 / Vb) + 1)
  26. return Vb, F3
  27.  
  28. def bass_reflex():
  29. Vas_m3 = Vas / 1000
  30. Vb = 15 * Vas_m3 * (Qts**2.87)
  31. S_port = np.pi * (D_port/2 / 100)**2 # м²
  32. L_port = (c**2 * S_port) / (4 * np.pi**2 * Fb**2 * Vb) - 0.85 * np.sqrt(S_port)
  33.  
  34. # Проверка скорости воздуха
  35. Vd_max = Sd / 10000 * 0.01 # Предполагаемое смещение (Xmax = 10 мм)
  36. U_max = np.sqrt((Fs**3 * Vd_max) / (2 * np.pi * Fb**2))
  37. return Vb, L_port, U_max
  38.  
  39. def passive_radiator():
  40. Vas_m3 = Vas / 1000
  41. Vb = Vas_m3 * (Qts / 0.5)**3
  42. Mmp = (1 / (4 * np.pi**2 * Fb**2 * Cmp)) - Mmd
  43. return Vb, Mmp
  44.  
  45. # Расчеты
  46. Vb_closed, F3_closed = closed_box()
  47. Vb_br, L_port, U_max = bass_reflex()
  48. Vb_pr, Mmp = passive_radiator()
  49.  
  50. # Вывод результатов
  51. print(f"[Закрытый ящик]\nОбъем: {Vb_closed:.2f} м³\nЧастота среза: {F3_closed:.1f} Гц\n")
  52. print(f"[Фазоинвертор]\nОбъем: {Vb_br:.2f} м³\nДлина порта: {L_port:.2f} м\nМакс. скорость воздуха: {U_max:.2f} м/с (допуск < 0.2 Маха)\n")
  53. print(f"[Пассивный излучатель]\nОбъем: {Vb_pr:.2f} м³\nМасса излучателя: {Mmp:.3f} кг\n")
  54.  
  55. # Графики АЧХ
  56. freq = np.logspace(1, 3, 500) # 10 Гц - 1000 Гц
  57.  
  58. # Закрытый ящик
  59. spl_closed = 20 * np.log10(1 / np.sqrt(1 + (freq / F3_closed)**4))
  60. # Фазоинвертор
  61. spl_br = 20 * np.log10(np.sqrt((freq**4) / ((freq**2 - Fb**2)**2 + (freq * Fs / Qts)**2)))
  62. # Пассивный излучатель
  63. spl_pr = 20 * np.log10(freq**2 / np.sqrt((freq**2 - Fb**2)**2 + (freq * Fs / Qts)**2))
  64.  
  65. plt.figure(figsize=(10, 6))
  66. plt.semilogx(freq, spl_closed, label='Закрытый ящик')
  67. plt.semilogx(freq, spl_br, label='Фазоинвертор')
  68. plt.semilogx(freq, spl_pr, label='Пассивный излучатель')
  69. plt.xlabel('Частота (Гц)')
  70. plt.ylabel('Уровень (дБ)')
  71. plt.grid(True)
  72. plt.legend()
  73. plt.title('Сравнение АЧХ')
  74. plt.show()
Success #stdin #stdout #stderr 3.47s 68152KB
stdin
Standard input is empty
stdout
[Закрытый ящик]
Объем: 0.02 м³
Частота среза: 52.5 Гц

[Фазоинвертор]
Объем: 0.05 м³
Длина порта: 0.62 м
Макс. скорость воздуха: 0.05 м/с (допуск < 0.2 Маха)

[Пассивный излучатель]
Объем: 0.03 м³
Масса излучателя: 0.021 кг

stderr
Fontconfig error: No writable cache directories