Моделирование Эффекта Доплера для движущегося объекта.
Модель физического эксперимента по Эффекту Доплера для движущегося объекта.
Общее назначение программ (моделей) - исследование зависимости изменения частоты от различных факторов, таких как:
-
Угол направления движения тела
-
Вид движения тела - равномерное или равноускоренное
-
Скорость движения тела
Программа for_angles.ipynb - для анализа зависимости от угла движения тела
Программа for_speed.ipynb - для анализа зависимости от вида и скорости движения тела.
Код имеет следующую структуру:
Параметры моделирования (общие для обеих программ)
max_speed = 6 # Ни на что не влияет на данный момент
# подробнее - в Руководство пользователя.ipynb
initial_x, initial_y = 20, 10 # Стартовые координаты (м)
radius = 20 # Длина траектории (м)
frequency = 1000 # Частота источника (Гц)
speed_of_sound = 343 # Скорость звука (м/с)
time_step = 0.1 # Шаг времени (с)
source_pos = (0, 20) # Позиция источника/приёмника
Уникальные параметры для каждой программы
# for_angles.ipynb
angles = [np.radians(30), np.radians(45)] # Углы траектории
constant_speed = 4 # Постоянная скорость
# for_speed.ipynb
acceleration = 0.5 # Ускорение (м/с²)
alpha = 0 # Угол движения (0°)
Ключевые функции
calculate_trajectory имеет некоторые особенности:
Для for_speed.ipynb добавляет параметр accel (acceleration - ускорение), которое используется при расчете:
distance = speed * t + 0.5 * accel * t²
def calculate_trajectory(alpha, speed, accel=0):
# Расчёт траектории с учётом ускорения
return time_points, distance, position_x, position_y
calculate_frequency
def calculate_frequency(position_x, position_y, velocity):
# Расчёт доплеровского сдвига
return freq_detected
ВАЖНО: Учитывает радиальную составляющую скорости cos_theta
save_to_bd_and_txt() для for_speed.ipynb отличается от for_angles.ipynb:
def save_to_db_and_txt(time, distance, freq, mode_name):
# Сохранение с указанием типа движения
return interp_time, interp_freq
for_angles.ipynb:
-
Добавляет параметр mode_name (Равномерное или Равноускоренное движение тела)
-
Использует отдельную структуру при составлении БД
CREATE TABLE measurements (
id INTEGER PRIMARY KEY,
mode TEXT, -- Тип движения
time REAL, -- Время (с)
distance REAL, -- Расстояние (м)
frequency REAL -- Частота (Гц)
);
Визуализация
Визуализация в обеих программах реализована с помощью библиотеки matplotlib и представляет интуитивно понятные графики для анализа физических процессов.
Траектория движения
plt.subplot(2, 2, 1)
plt.plot(x_const, y_const, 'b--', label='Равномерное')
plt.scatter(source_pos[0], source_pos[1], marker='s', color='r')
График отображает пространственное перемещение объекта в декартовой системе координат. Синяя пунктирная линия показывает путь при равномерном движении, зеленая - при ускоренном. Красный квадрат маркирует неподвижный источник/приемник сигнала. Оси автоматически масштабируются под параметры radius, initial_x/y, что позволяет наглядно оценить геометрию эксперимента.
Динамика частоты
plt.subplot(2, 2, 2)
plt.plot(time_const, freq_const, 'b', label='Равномерное')
plt.scatter(t_const, f_const, color='r')
На этом графике представлена зависимость воспринимаемой частоты от времени. Сплошная синяя линия отображает непрерывную динамику доплеровского сдвига при равномерном движении, а красные точки выделяют ключевые интерполированные значения на дистанции. Крутизна кривой демонстрирует скорость изменения частоты, а положение минимума соответствует моменту максимального удаления объекта.
Сравнение режимов или Сравнение угло
plt.subplot(2, 2, 3)
plt.plot(time_accel, freq_accel, 'g', label='Ускоренное')
Специальный субплот для анализа ускоренного движения, где зеленая кривая контрастирует с равномерным случаем. Разница в наклонах графиков визуализирует влияние ускорения на темп изменения частоты. Расстояние между кривыми в конечных точках количественно характеризует дополнительный доплеровский сдвиг, вызванный переменной скоростью.
Интерполированные точки
plt.scatter(t_const, f_const, color='r', label='7 точек')
Красные маркеры на обоих частотных графиках отмечают результаты интерполяции в 7 равноудаленных точках траектории. Эти точки служат опорными для количественного сравнения различных сценариев и упрощают сопоставление данных из разных экспериментов. Равномерное распределение по дистанции позволяет анализировать частотную динамику в стандартизированных пространственных точках.
Компоновка графиков
plt.tight_layout()
plt.show()
Пример итоговых графиков (для исследования зависимости от скорости)

Заключение
Программы предоставляют инструментарий для исследования эффекта Доплера. Для корректных результатов:
-
Проверяйте физические параметры перед запуском
-
Контролируйте пути сохранения данных
-
Анализируйте текстовые отчёты совместно с графиками
-
Учитывайте ограничения модели (точечный источник, идеальное отражение)