РПЗ Цифровая обработка сигналов (Вариант №35 - Разработка цифрового проигрывателя с графическим интерфейсом (РПЗ))
Описание файла
Документ из архива "Вариант №35 - Разработка цифрового проигрывателя с графическим интерфейсом (РПЗ)", который расположен в категории "". Всё это находится в предмете "цифровая обработка сигналов (цос)" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "цифровая обработка сигналов" в общих файлах.
Онлайн просмотр документа "РПЗ Цифровая обработка сигналов"
Текст из документа "РПЗ Цифровая обработка сигналов"
Московский Государственный Технический Университет имени Н.Э.Баумана Курсовая работа по курсу «Цифровая обработка сигналов» Разработка цифрового проигрывателя с графическим интерфейсом Вариант №35 Группа ИУ3 - 62 Студент: (Лемберский А.А.) Руководитель: (Недашковский В.М.) МОСКВА 2013 |
Содержание
-
Техническое задание……………………………………3
-
Теоретическая часть
2.1 Описание звукового эффекта……………………………………….4
2.2 Модель музыкального плеера в Simulink…………………………..5
2.3 Возможные пути выполнения на высокоуровневом языке...…10
-
Практическая часть
3.1 Реализация интерфейса плеера……………………………………13
3.2 Реализация звукового потока и привязка к интерфейсу……..19
3.3 Итоги……………………………………………………………………25
-
Список использованной литературы, источники и инструменты…………………………………………….27
1
Техническое задание
1. Разработать модель цифрового аудио проигрывателя в пакете Matlab, реализующую заданный звуковой эффект.
2. Разработать программу цифрового аудио проигрывателя с графическим эквалайзером и с поддержкой заданного звукового эффекта.
Условия задания для варианта 35:
-
Звуковой эффект: phaser
-
Количество полос графического эквалайзера: 7
Базовые функции медиаплеера:
-
Графический интерфейс
-
Открытие файлов из графического интерфейса
-
Воспроизведение музыки разных форматов
-
Включение и отключение эффекта
-
Изменение громкости
-
Управление параметрами эффекта
-
Перемещение по треку
-
Графический эквалайзер
2
Теоретическая часть
2.1 Описание звукового эффекта
Phaser является своеобразным преобразователем звукового сигнала. Он осуществляется путем фильтрации звука, создавая серии максимумов и минимумов в его частотном спектре. На протяжении звучания положение этих пиков и впадин может варьироваться, что позволяет создавать специфический круговой эффект.
Образно говоря, для того, чтобы ощутить фэйзер в обычной обстановке, человеку, сидящему, например, необходимо начать как можно чаще вертеть головой из стороны в сторону.
Эффект досигается путем электронного разбиения аудиосигнала на два потока. Один, проходя через фильтр с нелинейной фазой, сохраняет частоту и амплитуду исходного звука, но изменяет свою фазу только на определенной частоте. Затем, после смешивания исходного и обработанного сигналов, частоты, которые находятся в противофазе, гасят друг друга, создавая тем самым характерные впадины в звуковом спектре. Таким образом, изменение соотношения обоих сигналов меняет глубину эффекта.
По принципу работы phaser схож с chorus и отличается от него временем задержки (1-5 мс). Помимо этого задержка сигнала у phaser на разных частотах неодинакова и меняется по определённому закону.
В обычных условиях человеческое ухо практически не способно распознавать изменение фаз, однако оно может воспринять этот эффект, когда происходит смешивание обработанного и исходного сигналов (интерференция). При этом возникает эффект металлического звука или речи робота.
В качестве примера хорошо реализованного эффекта phaser предлагаю послушать песню
♪ Electrafixion – Sister Pain
Гитара в ней звучит именно в заданном стиле.
Кроме эффекта phaser существуют еще эффекты flanger и chorus, которые выполнены по такой же схеме, единственная разница в задержке и коэффициента обратной связи.
Сказать по правде, неподготовленному человеку будет крайне сложно отличить эти эффекты друг от друга.
В следующем разделе я покажу вам схему этого эффекта, выполненную в математическом пакете Matlab в среде моделирования Simulink
2.2 Модель музыкального плеера в Simulink
Matlab – отличный пакет для решения математических задач. Мы воспользуемся им для моделирования нашего музыкального плеера с эффектом phaser.
Приступим к реализации нашего эффекта.
Еще раз повторяя сказанное ранее, мы должны разделить поток на два или несколько, один пустить без искажений, а на другие наложить небольшую временную задержку. Затем все сигналы суммируются и выводятся в аудиоустройство.
Вот как выглядит схема, собранная в симулинке.
Рис. 1
Остановимся поподробнее на каждом элементе этой схемы.
Рис. 2
Этот элемент позволяет нам указать путь к нашему аудиофайлу и использовать его в качестве сигнала.
Зайдем в его настройки:
Рис. 3
Самый главный параметр здесь – Samples per audio frame. Ставим его в единицу. Что такое sample и frame? Это базовые понятия в цифровой обработке музыкальных сигналов. Отцифрованный звук поступает в виде числовых отчетов непрерывным потоком. Для удобства обработки эти отсчеты формируются в массивы, sample (сэмплы). Сэмплы в свою очередь группируются в двумерную матрицу (frame). Поставив единицу в эту графу, мы объявили, что фрейм у нас будет состоять всего из одного сэмпла, т.е. фактически не будет отличаться от него.
Рис. 4
Блок Delay определяет задержку звукового сигнала. Индекс 0 в показатели степени означает, что задержки не будет и сигнал без искажений пройдет через этот блок. Задержка измеряется в сэмплах. В 1 сэмпле 8 бит = 1 байт информации. Для нашего не совсем качественного mp3 файла при частоте дискретизации 44 кГц необходима передача данных хотя бы 128 кбит/с. Таким образом происходит передача около 16000 сэмплов в секунду. Варьируя задержку в блоке Delay мы можем добиться нужного нам звучания.
Рис. 5
Э то окно настроек блока Delay.
Мы можем менять параметры Delay (samples) от 0 до неограниченного числа, но запомните, что при 16000 у нас будет задержка ровно на секунду в музыке, а нам нужна задержка гораздо меньшая.
Как видно из Рис 1, сигнал разделяется на 6 потоков, один который без блока задержки, а 5 остальных с таким блоком. Потом все сигналы суммируются при помощи сумматора.
В конце суммирующий сигнал выводится на аудиоустройство пр помощи блока to audio device
Теперь для задания нашего эффекта phaser установим в блоках delay следующие значения:
Delay1 1000
Delay2 2000
Delay3 3000
Delay4 4000
Delay5 5000
Звук приобрел характерный металлический оттенок. Вы можете сами попробовать поменять значения задержки и понаблюдать за изменениями.
Теперь приступим к реализации схемы нашего плеера с эквалайзером. В прошлом семестре мы выполняли аналогичную работу, поэтому я не буду вдаваться в подробности проектирования эквалайзера. Полученная итоговая схема:
Рис. 6
Как видно из рисунка, звук разделяется на 7 потоков и каждый идет через свой фильтр, каждый из которых проектируется в специальном инструмент matlab fdatool. После чего звук поступает в блок gain, который либо усиливает его, либо ослабевает. Таким образом мы можем отрегулировать звучание по частотам, сделать его высотным или басовым.
Для отладки и наглядного тестирования эффекта phaser я быстро создал пользовательский интерфейс в инструменте matlab guide
Подробный код описан в прошлом семестре, скажу только, что вертикальные ползунки управляют усилением полос, каждый в своем диапазоне частот от BASS до TOP OCTAVE
Возможные значения усиления от -10 до +10 дБ
Кнопка default возвращает значения усиления всех полос в 0 дБ
Горизонтальные ползунки управляют задержкой звукового сигнала, каждый своим потоком. Возможные значения задержки от 0 до 16000 сэмплов в каждом из потоков. Кнопка swith phaser off возвращает значение задержки в 0.
Таким образом, можно пробовать изменять значения очень быстро и динамично для нахождения оптимального звучания.
Теперь, когда мы разобрались с устройством нашего проигрывателя и со схемой нашего эффекта, можно смело приступать к его разработке на языке высокого уровня.
2.3 Возможные пути выполнения на
высокоуровневом языке
Для начала необходимо определиться с выбором операционной системы, на которой будем выполнять работу. В методических указаниях для каждой ОС были рекомендованы свои инструменты, а именно:
-
Для Windows самая рациональная связка - Visual Studio, WinForms, DirectShow.
-
Для Mac OS X - XCode, Cocoa, CoreAudio.
-
Для Linux – Geany, GTK, Gstreamer.
В моем активе были все 3 операционные системы, но я решил начать с самой распространенной – Windows, тем более, что мы неплохо освоили в свое время Visual Studio и WinForms. К моему сожалению, поставить DirectShow не удалось, спросить было не у кого, поэтому это быстро мне отбило охоту.
Что касается Mac OS и в частности CoreAudio, мне удалось наткнуться на отличную книгу,
Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS [Chris Adamson, Kevin Avila]
Я прочитал введение на русском языке, автор готовит читателей к решению сложных задач на достаточно низком уровне программирования, предполагает знания objective c и библиотек cocoa. Я решил подтянуть свои знания, поставил XCode, прочитал небольшую, но хорошо написанную книгу по objective C
Become an Xcoder. Start Programming the Mac Using Objective-C. By Bert Altenberg, Alex Clarke and Philippe Mougin
Рекомендую тем, кто хочет быстро научиться что-либо писать на Mac и OS X
Кроме того, я прослушал видеокурс по библиотекам cocoa на youtube, там их достаточное количество.
К моему разочарованию, дальше работа не двинулась, т.к. после русского предисловия книги мне предложили заказать такую книгу, чего я делать не стал, а в сети найти удалось только англоязычный вариант, который для изучения был весьма непрост. Тем не менее, у меня твердо сложилось убеждение, что CoreAudio определенно лучший инструмент для создания мультимедийных приложений. Появилось желание это изучить, чем я возможно займусь, когда появится время.
Итак, остается Linux, система, с которой я был не знаком до сиз пор, но проект выполнил именно на ней. Тут были уже люди, у кого можно спросить и получить вразумительный ответ. Я установил Ubuntu, Geany - компилятор языка С, библиотеки gstreamer и gtk.
Я и моя коллега Евгения Ахунзянова написали подробную инструкцию, как все это устанавливается и компилируется на Linux. Это можно найти в самой последней версии методички.
Как устанавливать Linux на компьютер мы описывать не стали, т.к. все это подробно рассказывается на курсе Технологии Программирования.
Хоть это и было подчеркнуто в методичке, но позволю повториться себе еще раз про gtk и gstreamer.
Это не какие-то программы, где вы можете себе взять и создать плеер или что-то еще. Это просто библиотеки различных функций и объектов, которые можно подключить к среде программирования и использовать в своих проектах на языке С.
Gstreamer – мультимедийный фреймворк, написаный на языке C и использующий систему типов GObject. Используется в различных плеерах, редакторах, программах для создания конференций и портативных устройствах. Документацию на него можно найти по адресу: