Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практика научная / Практика_отчёт_БИК2205.docx
Скачиваний:
0
Добавлен:
13.05.2026
Размер:
380.41 Кб
Скачать
    1. Результат сравнения методов

По результатам сравнения различных кодеков для дальнейшего моделирования был выбран кодек aptX, как самый сбалансированный по характеристикам. Кодек обеспечивает достойное качество звучание при любом битрейте, при этом, в максимуме, сильно не превышая «стандартный» битрейт передачи аудио в 320 кбит/с. В дополнение к вышеописанному кодек имеет сравнительно малые задержки передачи из-за простоты вычислений.

  1. Практическая часть исследования

    1. Представление модели в виде структурной схемы

Рисунок 3.1.1 – Структурная схема модели

Структурная схема состоит из: входного аудиофайла, четырёх цифровых полосовых фильтров (ЦПФ), адаптивного микшера, кодера, декодера, выходного аудиофайла, качество которого определяется человеком на слух.

  • На вход подаётся какой-нибудь аудиофайл, в формате .wav, то есть без сжатия, который считывается моделью для дальнейшей обработки;

  • Далее считанный аудиофайл подаётся на четыре цифровых полосовых фильтра, каждый из которых выделяет один из частотных диапазонов из полученного аудио;

  • Все четыре отфильтрованных сигнала одновременно подаются на адаптивный микшер, который объединяет все фильтрованные сигналы в один, кодируя значения амплитуды полученных отсчётов сигналов разным количеством байт, в зависимости от принадлежности отсчёта тому или иному диапазону;

  • Микшированный сигнал подаётся на кодер, который осуществляет разностное кодирование;

  • Кодированный сигнал подаётся на декодер, который из разностных отсчётов восстанавливает исходный сигнал;

  • Декодированное аудио выводится в файл .wav, то есть без сжатия, для дальнейшего прослушивания пользователем.

    1. Представление метода в виде функциональной схемы

Рисунок 3.2.2 – Функциональная схема модели

На функциональной схеме модели изображен алгоритм загрузки и обработки аудиофайла. На схеме отсутствуют функции, которые не влияют напрямую на функционал модели, однако делают ввод и вывод данных более дружелюбным к пользователю. Эти функции будут описаны в этом разделе ниже, после «основных».

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

Далее с помощью функции «lbrs_load()» библиотеки «librosa» осуществляется загрузка указанного аудиофайла для дальнейшей работы. Функция «lbrs_load()» загружает файл в виде массива со значениями амплитуды каждого отсчёта, размерности (<колво_отсчётов>x<количество_каналов>), возвращая описанный массив, а также частоту дискретизации. В рамках модели аудиофайл загружается в стерео режиме с частотой дискретизации 44100 Гц и 8-ю байтами на хранение значения амплитуды каждого отсчёта.

После задаются необходимые диапазоны частот для цифровых фильтров, а также необходимые количества байт на хранение амплитуд отсчётов каждого диапазона. В рамках модели, это 1 Гц – 5500 Гц, 5501 Гц – 11000 Гц, 11001 Гц – 16500 Гц, 16501 – 22000 Гц и 8, 4, 2, 2 соответственно;

Фильтрация загруженного аудиофайла по заданным диапазонам осуществляется в цикле с помощью функции «filtration()», которая по заданным параметрам синтезирует цифровой полосовой фильтр и «пропускает» сигнал через синтезированный фильтр, возвращая фильтрованный сигнал. Синтез фильтра осуществляется с помощью функций «kaiserord()» – рассчитывает порядок фильтра и параметр Кайзера – «firwin()» – рассчитывает коэффициенты полосового КИХ‑фильтра с окном Кайзера по полученным параметрам – библиотеки «scipy.signal». Фильтрация осуществляется с помощью функции «lfiilter()» – применяет фильтр с указанными коэффициентами к полученному сигналу – той же библиотеки. После этого, так как фильтр не способен полностью занулить сигнал, производится зануление всех значений амплитуд отсчётов, которые меньше или равны амплитудам сигнала в области затухания. В рамках модели, помимо диапазонов частот, используются следующие параметры при синтезе фильтров: частота Найквиста равна 22050 Гц, ширина переходной зоны равна 5/22050 Гц, ослабление вне зоны пропускания равно 15 дБ.

После фильтрации четыре полученных сигнала объединяются в один с помощью функции «signal_mixing()», которая, посимвольно сравнивая все четыре сигнала, «выцепляет» из них ненулевое значение амплитуды отсчёта, ограничивает количество байт на хранение значения амплитуды найденного отсчёта в соответствии с принадлежностью отсчёта одному из диапазонов, и записывает обработанный отсчёт в новый массив, сохраняя очерёдность следования отсчётов. На выходе функции получается один массив отсчётов, значения амплитуд которых занимают разный объём памяти.

Далее микшированное аудио поступает на кодер – функцию «encoder()», которая осуществляет разностное кодирование: вместо амплитуд отсчётов, кодер сохраняет лишь разность между амплитудами текущего и предыдущего отсчётов. В качестве «опорного» отсчёта используется первый поступивший в кодер.

Кодированный сигнал поступает на кодер – функцию «decoder()», которая выполняет обратную операцию: вместо разности между амплитудами, декодер возвращает значения амплитуд отсчётов. В качестве «опорной» разности используется первая поступившая в декодер.

После этого из итогового обработанного сигнала, с помощью функции «show_waveform()», формируются графики волнового представления сигнала. Непосредственное формирование графиков осуществляется с помощью функции «waveshow()» библиотеки «librosa». Функция «show_waveform()» же позволяет пользователю указывать дополнительные параметры графика: номер графика, заголовок графика, а также формировать легенду к графикам.

В конце работы модели пользователю поступает запрос на вывод получившихся аудио в файл. По согласию, фильтрованное или итоговое аудио выводится в файл с помощью функции «sf_write()» библиотеки «soundfile». Вывод осуществляется в формате .wav способом PCM(ИКМ) c разрядностью 16 бит.

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

Ввод и вывод текстовой информации осуществляется с помощью библиотеки «curses» и её встроенных функций.

  • Функция «init_cnvs()» переводит окно консоли в режим ввода/вывода информации, убирает отображение курсора и отображает рамку по краям окна консоли;

  • Функция «draw_text()» выводит в окно консоли указанный текст;

  • Функция «get_text()» осуществляет ввод информации, в виде строки, которой пользователь ввёл с клавиатуры;

  • Функция «get_char()» осуществляет ввод информации, в виде одного символа, которой пользователь ввёл с клавиатуры.

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

Соседние файлы в папке практика научная