citec-spbu / classifier_of_sound_sources_it_clinic_2024

0 stars 0 forks source link

Эффект Доплера #18

Open AnatolyAdamovich opened 1 week ago

AnatolyAdamovich commented 1 week ago

Посмотреть:

ttaltam commented 6 days ago

Эффект Доплера — это явление, при котором частота и длина волны звука (или света) изменяются, когда источник сигнала и наблюдатель движутся относительно друг друга. Если источник и наблюдатель сближаются, частота сигнала увеличивается, а если удаляются — частота снижается. Например, звук сирены становится более высоким при приближении и снижается при удалении.

Как проявляется эффект Доплера в аудио

В аудиофайлах эффект Доплера проявляется как изменение высоты тона звука, когда источник перемещается. Это особенно заметно в звуках машин, сирен, движущихся объектов и других сигналов, где есть изменение частоты по мере приближения или удаления от микрофона.

Методы обработки эффекта Доплера в Python

Чтобы бороться с эффектом Доплера или шумами, мешающими анализу звука, можно использовать фильтрацию и нормализацию аудиосигналов.

Устранение шума

  1. Фильтрация высоких и низких частот: Можно использовать библиотеки, такие как scipy и librosa, для фильтрации частот выше и ниже нужного диапазона. Например, Butterworth или Chebyshev фильтры помогают удалить нежелательные частоты.

    from scipy.signal import butter, lfilter
    
    def butter_bandpass(lowcut, highcut, fs, order=5):
       nyq = 0.5 * fs
       low = lowcut / nyq
       high = highcut / nyq
       b, a = butter(order, [low, high], btype='band')
       return b, a
    
    def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
       b, a = butter_bandpass(lowcut, highcut, fs, order=order)
       y = lfilter(b, a, data)
       return y
  2. Удаление шумов методом спектрального вычитания: С помощью библиотеки librosa можно получить спектр звука, выделить основную частоту, а затем подавить нежелательные шумы.

    import librosa
    import numpy as np
    
    def noise_reduction(y, sr):
       # Преобразование в частотную область
       S_full, phase = librosa.magphase(librosa.stft(y))
       # Оценка шумового профиля
       S_noise = np.median(S_full, axis=1)
       # Устранение шумов
       S_denoised = np.maximum(S_full - S_noise[:, np.newaxis], 0)
       return librosa.istft(S_denoised * phase)
  3. Сглаживание эффектов Доплера: Если эффекты Доплера связаны с движением источника звука, можно применить техники временной нормализации, такие как Dynamic Time Warping (DTW), чтобы "синхронизировать" частоты.

Борьба с фрустрацией от шумов