Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_лаба3.docx
Скачиваний:
0
Добавлен:
25.04.2024
Размер:
653.79 Кб
Скачать

ГУАП

КАФЕДРА 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-го порядка сильно урезает качество звука, т.е. создавалось впечатление, что звук играет из очень плохой аппаратуры. Результат эллиптического фильтра несколько схож с тем, что получается после фильтра Баттерворта, однако с дополнительным ослаблением частот.

Соседние файлы в предмете Мультимедиа технологии