ГУАП
КАФЕДРА 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доцент, канд. тех. наук, доцент |
|
|
|
О. О. Жаринов |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 3 |
ИЗУЧЕНИЕ МЕТОДОВ ФИЛЬТРАЦИИ АУДИОСИГНАЛОВ В PYTHON. ПРИМЕНЕНИЕ РЕКУРСИВНЫХ ФИЛЬТРОВ |
по курсу: Мультимедиа технологии |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
|
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель работы
Получить навыки обработки аудиосигналов на примере методов фильтрации сигналов во временной области с использованием рекурсивных цифровых фильтров.
Вариант задания
Номер варианта: №8
Тип фильтра: фильтр высоких частот
Граничные частоты полосы пропускания фильтра:
Теоретические сведения
Мультимедиа аудиоконтент представляет собой разновидность медиаконтента, основанную на звуковых элементах, включающих подкасты, аудиорекламу, аудиокниги, голосовые сообщения и другие форматы, где главным средством коммуникации является звук. В качестве основных задач по обработке мультимедиа аудиоконтента обычно выделяют следующие:
Редактирование аудиофайлов – это процесс изменения звуковых файлов, например, удаление шумов, вырезание фрагментов, добавление эффектов и т.д.;
Воспроизведение аудиофайлов – процесс проигрывания звуковых файлов на разных устройствах;
Визуализация аудиофайлов – возможность визуально оценить звук, записанный внутри файла, а также узнать АЧХ звука;
Транскодирование аудиофайлов – процесс преобразования аудиофайлов из одного формата в другой;
И т.д.
Методы фильтрации аудиосигналов используются для улучшения качества звука и удаления нежелательных шумов. Фильтрация аудиосигналов может быть выполнена с помощью различных инструментов, таких как ФНЧ и ФВЧ, ПФ и РФ, эквалайзеры, компрессоры, лимитеры и т.д. Фильтрация аудиосигналов позволяет улучшить качество звука, удалить шумы и искажения, а также настроить звук под определённые требования.
Фильтрация высоких частот
Теперь перейдем к основным частям лабораторной работы. Сама работа состоит из двух частей, и в первой части необходимо написать программу, осуществляющую фильтрацию высоких частот из аудиофайла при помощи рекурсивного фильтра. В зависимости от выбора алгоритма фильтрации, звук будет по-разному фильтроваться. В качестве аудиодорожки был выбран саундтрек, играющий по радио в игре Portal [2]. Список используемых переменных представлен в таблице 1, а сам код программы – в листинге 1. Также, исходный код программы вместе со всеми аудиофайлами находится в репозитории на GitHub [1].
Таблица 1. Список используемых переменных
Название |
Тип |
Описание |
Sample_rate |
Целочисленный |
Частота дискретизации звука |
Input_signal |
Двумерный массив |
Исходный двухканальный звук |
params |
Словарь |
Список параметров для фильтрации |
Filtered_signal |
Двумерный массив |
Отфильтрованный сигнал |
Листинг 1. Реализация фильтра высоких частот на Python
def IIR_filter(input_signal, sample_rate, plot_ones: bool = False, plot_multiple: bool = False, **kwargs): # Расчет коэффициентов в зависимости от типа фильтра: rp, rs = 2, 60 kwargs = kwargs["kwargs"] params = {'order': kwargs['IIR_order'], 'ftype': kwargs['filter_type']} match kwargs['filter_type']: case "butter": sos = signal.butter(kwargs['IIR_order'], kwargs['low_freq'], btype=kwargs['alg_type'], fs=sample_rate, output='sos') b, a = signal.butter(kwargs['IIR_order'], kwargs['low_freq'], btype=kwargs['alg_type'], analog=True) case "cheby1": sos = signal.cheby1(kwargs['IIR_order'], rp, kwargs['low_freq'], btype=kwargs['alg_type'], fs=sample_rate, output='sos') b, a = signal.cheby1(kwargs['IIR_order'], rp, kwargs['low_freq'], btype=kwargs['alg_type'], analog=True) params["rp"] = rp case "cheby2": sos = signal.cheby2(kwargs['IIR_order'], rs, kwargs['low_freq'], btype=kwargs['alg_type'], fs=sample_rate, output='sos') b, a = signal.cheby2(kwargs['IIR_order'], rs, kwargs['low_freq'], btype=kwargs['alg_type'], analog=True) params["rs"] = rs case "ellip": sos = signal.ellip(kwargs['IIR_order'], rp, rs, kwargs['low_freq'], btype=kwargs['alg_type'], fs=sample_rate, output='sos') b, a = signal.ellip(kwargs['IIR_order'], rp, rs, kwargs['low_freq'], btype=kwargs['alg_type'], analog=True) params["rp"] = rp params["rs"] = rs
# Применяем фильтрацию к сигналу и строим график output_signal = signal.sosfilt(sos, input_signal, axis=0) if plot_ones: plt.figure(figsize=(12, 6)) filter(b, a, params) if plot_multiple: filter(b, a, params) return output_signal
input_signal, sample_rate = sf.read("3/input_audio.wav") # sample_rate, input_signal = io.wavfile.read("3/input_audio.wav") fft_input_spectrum = np.fft.fft(input_signal[:,0]) magnitude_input_spectrum = 20 * np.log10(abs(fft_input_spectrum)) freqs = np.fft.fftfreq(len(fft_input_spectrum), 1/sample_rate)
# Пропускаем сигнал через ФВЧ и сравниваем АЧХ params = {} params["low_freq"] = 800 params["alg_type"] = 'high' params["IIR_order"] = 4 params["filter_type"] = 'butter' filtered_signal = IIR_filter(input_signal, sample_rate, plot_ones=True, kwargs=params) afr2(input_signal[:,0], filtered_signal[:,0], sample_rate, params["filter_type"], params["IIR_order"]) plt.show() |
Далее, для того чтобы убедиться в том, что данная программа корректно, попробуем запустить её со следующими параметрами: граничная частота = 800 Гц, порядок фильтра = 4, тип фильтра = Баттерворта. Сперва, на рисунке 1 показан график АЧХ самого фильтра, а на рисунке 2 – полученный после применения данного фильтра частотный график аудиозаписи в сравнении с исходной записью.
Рисунок 1 – АЧХ фильтра
Рисунок 2 – Сравнение результатов применения фильтра
Также, необходимо дать словесное описание различий между результатом, полученным в ходе выполнения предыдущей лабораторной работы и текущей. В итоговой аудиозаписи предыдущей работы нижние частоты были вырезаны напрочь, что создавало впечатления сильной нехватки «басов».
В процессе прослушивания результатов текущей работы сильной нехватки нижних частот не ощущалось. Безусловно при сравнении с оригиналом было очевидно отсутствие «басов», однако оно не так сильно резало слух.
Также, попробуем применить различные алгоритмы фильтрации на исходную запись и сравним разницу в полученных результатах. Так, на рисунке 3 показаны АЧХ всех применяемых фильтров, а на рисунке 4 – сравнение полученных АЧХ сигнала.
Рисунок 3 – АЧХ применяемых фильтров
Рисунок 4 – Сравнение полученных АЧХ сигналов
Также, попробуем дать словесное описание найденных различий. Так, фильтр Чебышева 1-го порядка по звучанию был наиболее похож на то, что было получено в ходе выполнения предыдущей лабораторной работы. Результат применения фильтра Баттерворта уже был описан ранее. Фильтр Чебышева 2-го порядка сильно урезает качество звука, т.е. создавалось впечатление, что звук играет из очень плохой аппаратуры. Результат эллиптического фильтра несколько схож с тем, что получается после фильтра Баттерворта, однако с дополнительным ослаблением частот.