Отчет по лабораторной работе №3
Описание файла
Документ из архива "Отчет по лабораторной работе №3", который расположен в категории "". Всё это находится в предмете "микропроцессорные устройства" из 7 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "микропроцессорные устройства обработки сигналов" в общих файлах.
Онлайн просмотр документа "Отчет по лабораторной работе №3"
Текст из документа "Отчет по лабораторной работе №3"
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Московский государственный технический университет имени Н.Э. Баумана»
Факультет ИУ – «Информатика и управление»
Кафедра ИУ-3 – «Информационные системы и телекоммуникации»
Отчет по лабораторной работе №3
по дисциплине «Микропроцессорные устройства обработки сигналов»
на тему ««Звуковой эффект»
Студент группы ИУ3-72 Г.О.Курганов
Преподаватель кафедры ИУ-3 В.С.Выхованец
Москва 2013
Содержание
1 Постановка задачи 3
2 Описание эффекта частотное вибрато (Bending) 3
3 Алгоритм частотного вибрато 5
3.1 Основной цикл 6
3.2. Функция Bending 6
4 Практическая часть 8
5 Список использованной литературы 12
1 Постановка задачи
Целью выполнения домашнего задания является изучение звукового эффекта, заданного в теме домашнего задания, и описание алгоритма, его реализующего.
Для выполнения домашнего задания необходимо найти, изучить и описать заданный звуковой эффект, используя источник [1], а также другие доступные источники. На следующем этапе разрабатывается алгоритм цифровой обработки сигнала, реализующего звуковой эффект. При разработке алгоритма учесть, что исходный звуковой сигнал поступает на обработку от звукового кодека по одному отсчету, получаемому при вызове функции sam = GetSample(), где sam – текущий отсчет звукового сигнала. Обработанные отсчеты передаются звуковому кодеку обратно путем вызова функции PutSample(sam).
2 Описание эффекта частотное вибрато (Bending)
В современной музыкальной индустрии повсеместно используются различные звуковые эффекты, обогащающие палитру музыкальных произведений и добавляющие к ним дополнительные краски. Эффекты могут использоваться не только при обработке музыкальных произведений, но и при воспроизведении речевого материала для снижения монотонности при прослушивании длительных фрагментов.
Частотные преобразования могут проводиться над спектром сигнала или над частотой воспроизведения сигнала. На основе частотных преобразований спектра реализуются различные фильтры и эквалайзеры. В радиотехнике при частотной модуляции несущая частота является гармоническим колебанием, а модулируется сложным сигналом (см. Рисунок 2.1). В аудиотехнике при формировании звуковых эффектов – несущей является широкополосный звуковой сигнал, который модулируется периодическим сигналом не обязательно синусоидальной формы.
Рисунок 2.1 Частотная модуляция гармонического колебания
В самом общем смысле суть эффекта вибрато заключается в периодическом изменении одного из параметров звукового колебания: амплитуды, частоты или фазы. Изменение (колебание) параметра происходит с очень малой частотой — единицы герц. Различают амплитудное, частотное и фазовое вибрато. В любом случае результатом является обогащение спектра исходного колебания, происходит модуляция звукового колебания низкочастотным сигналом. Законы физики неумолимы — спектр сигнала при этом действительно расширяется.
Vibrato (от англ. "vibrate" - вибрация). Частотное вибрато достигается путем частотной модуляции сигнала с небольшой частотой и малой глубиной модуляции (до 10 Гц). Воспринимается как завывание звука.
Реализация частотного вибрато в электромузыкальных инструментах и синтезаторах проста и естественна. Работу всех узлов электронных музыкальных синтезаторов как аппаратных, так и реализованных программным путем, синхронизирует опорный генератор. Если изменять его частоту, то будут изменяться частоты и всех синтезируемых колебаний. В радиотехнике этот процесс называется частотной модуляцией. Если изменение частоты производится по периодическому закону, то в результате получается частотное вибрато. По существу, при частотном вибрато также расширяется спектр исходного сигнала, причем тембр периодически изменяется во времени.
Частотное вибрато используется и само по себе, и входит в качестве составной части в более сложные звуковые эффекты.
Эффект вибрато имитирует вибрато человеческих голосов, определяющий их тембр, теплоту и выразительность, и соответствующий прием исполнения на струнных музыкальных инструментах, периодически изменяющий в небольших пределах высоту звуков. Эффект вибрато может быть получен в устройствах, реализующих эффекты детонации и хора при полном удалении входного сигнала из выходного. Этот эффект часто путают с эффектом тремоло, где сигнал подвергается не частотной, а амплитудной модуляции.
3 Алгоритм частотного вибрато
Перед непосредственной реализацией эффекта частотного вибрато необходимо поставить некоторые ограничения. Наиболее естественная музыкальная частота модуляции составляет 4—8 Гц (частота вибрато музыкальных звуков). При таких частотах вибрато приобретает своеобразную тембровую окраску, украшающую и оживляющую звук. Красивое звучание получается только в том случае, когда глубина частотного вибрато (относительное изменение частоты звука) невелика. Как известно, единица музыкальных интервалов, в 1200 раз меньшая, чем октава, называется центом. Интервал между соседними полутонами в темперированной гамме равен в точности 100 центам. Колебание высоты тона при частотном вибрато не должно превышать нескольких десятков центов. В противном случае создается впечатление нарушения строя инструмента.
Таким образом, условимся, что модулирующий сигнал представляет собой синусоиду с частотой 6 Гц, а максимальное колебание высоты тона широкополосного модулируемого сигнала составляет 60 центов, что в среднем соответствует 20 Гц.
Также частота входного сигнала должна составлять не менее 4 кГц для узнаваемости человеческого голоса. Следовательно, минимальная частота дискретизации сигнала допускается равной 8 кГц. При заданной частоте дискретизации в 8 кГц промежуток времени между двумя отсчётами составляет 1/8000 с. Длительность массива отсчётов, состоящего из 1024 элементов равна 1024 * 1/8000 = 0,128 c. Следовательно, на один отсчёт приходится 7,8 Гц. Максимально колебание высоты тона равна 20 Гц, т.е. 2,56 отсчёта для нашего случая. Округлим до 3. Получаем, что смещение спектра в 3 отсчётов составляет 3 * 7,8 = 23,4 Гц. Величина 23,4 Гц близка к 20 Гц, что позволит нам почувствовать разницу между входным и выходным звуком как эффект вибрато Таким образом, считаем величину выборки в 1024 отсчётов окончательно утвержденной.
Далее выполняем прямое преобразования Фурье с 1024 звуковыми отсчётами. После преобразования Фурье необходимо осуществить само смещение. Очевидное решение ситуации – заполнить первые V элементов массива смещенного спектра отсчётов нулями и начать запись первых 512–V элементов исходного спектра сразу с V+1 элемента или записать в массив смещенного спектра последние 512–V элемента исходного, а оставшиеся V элементов заполнить нулями. Значение V и выбор того или иного направления смещения определяется значением модулирующего синусоидального сигнала, которое будем получать для определенности в момент взятия последнего отсчета каждой выборки. После смещения проделываем операцию обратного преобразования Фурье для перевода полученного массива смещенных отсчётов во временную область. После прохождения ЦАП и вывода на звуковое устройство получаем звук, отличающийся от входа на 23,4 Гц в предельном случае, смещенный в сторону верхних или нижних частот.
3.1 Основной цикл
Основной цикл алгоритма состоит из следующих шагов:
Шаг 1. Обнуление входных буферов x[N] выходного буфера y[N], счётчика i, счетчика k.
Шаг 2. Инициализация кодека.
Шаг 3. Увеличение счетчика k на единицу.
Шаг 4. Чтение из кодека текущего отсчета сигнала и запись в буфер, х[i] = GetSample().
Шаг 5. Увеличение счетчика i на единицу.
Шаг 6. Проверка значения i: если i < N, то переход на Шаг 3, если i = 1024 – на следующий шаг.
Шаг 7. Выполнение функции Bending над N отсчётами текущего входного массива x[].
Шаг 8. Запись выходного отсчета сигнала в кодек, PutSample(y[N-i]).
Шаг 9. Уменьшение счетчика i на единицу.
Шаг 10. Проверка значения i: если i > 0, то переход на Шаг 7, если i = 0 – на Шаг 3.
3.2 Алгоритм работы функции Bending()
Шаг 1. Определение значения переменной с помощью заданной таблицы синусов, val = sinTab[k%12].
Шаг 2. Выполнение прямого преобразования Фурье над входным массивом x[N].
Шаг 3. Анализ знака val: если значение val ≥ 0, переходим на Шаг 4, если val < 0, переходим на Шаг 6.
Шаг 4. Заполнение первых val элементов выходного массива y[] нулями.
Шаг 5. Заполнение оставшихся элементов массива y[] первыми N/2 – val элементами массива x[]. Переход на Шаг 8.
Шаг 6. Заполнение первых N/2 – val элементов выходного массива y[] последними N/2 – val элементами массива x[].
Шаг 7. Заполнение оставшихся val элементов массива y[] нулями.
Шаг 8. Выполнение обратного преобразования Фурье над выходным массивом y[].
4 Практическая часть
Программа имеет вхождение в главной функции main.c, где вызывается функция aic3204_loop_stereo_in1.c. Эта функция настраивает AIC3204 и, получая отсчеты в канале stereo_in1 подает их на канал headphone.
Код программы:
#include "stdio.h"
#include "evm5515.h"
#include "Dsplib.h"
#include "math.h"
#define Rcv 0x08
#define Xmit 0x20
#define NX 1024 // number of points to FFT
/* Extern functions of DSPLib – needed for FFT and IFFT */
extern void rfft(DATA* , ushort, type);
extern void rifft(DATA* , ushort, type);
extern Int16 AIC3204_rset( Uint16 regnum, Uint16 regval);
void Bending(DATA *in, DATA *out, Int16 sin*, Int16 N, Int16 k);
/* Arrays for input, output channels and table of sines. */
DATA in1[NX];
DATA in2[NX];
DATA out1[NX];
DATA out2[NX];
Int16 sinTab[12] = {1, 2, 3, 2, 1, 0, -1, -2, -3, -2, -1, 0 };
/* Output input from STEREO IN 1 through the HEADPHONE jack */
Int16 aic3204_loop_stereo_in1( )
{
/* Pre-generated sine wave data, 16-bit signed samples */
Int16 data1, data2;
/* -----------------------------------------------------------*
* * * Configure AIC3204 ** CODEC_CLKIN = PLL CLK * * CODEC_CLKIN = NADC * MADC * AOSR * ADCFS *
* PLL_CLK = PLL_CLKIN * R * J.D / P *
* PLL_CLKIN = BCLK = 1.536MHz *
* ADCFS = 48KHz *
* ---------------------------------------------------------------------------------------- */
AIC3204_rset( 0, 0x00 ); // Select page 0
AIC3204_rset( 1, 0x01 ); // Reset codec
AIC3204_rset( 0, 0x01 ); // Select page 1
AIC3204_rset( 0, 0x08 ); // Disable crude AVDD generation from DVDD
AIC3204_rset( 2, 0x00 ); // Enable Analog Blocks
// PLL and Clocks config and Power Up
AIC3204_rset( 0, 0x00 ); // Select page 0
AIC3204_rset( 27, 0x00 ); // BCLK and WCLK is set as i/p to AIC3204(Slave)
AIC3204_rset( 4, 0x07 ); // PLL setting: PLLCLK <- BCLK and CODEC_CLKIN <-PLL CLK
AIC3204_rset( 6, 0x20 ); // PLL setting: J = 32
AIC3204_rset( 7, 0 ); // PLL setting: HI_BYTE(D)
AIC3204_rset( 8, 0 ); // PLL setting: LO_BYTE(D)
// For 8 KHz sampling
AIC3204_rset( 5, 0x92 ); // PLL setting: Power up PLL, P=1 and R=2
AIC3204_rset( 13, 0x00 ); // Hi_Byte(DOSR) for DOSR = 128 decimal or //0x0080 DAC oversamppling
AIC3204_rset( 14, 0x80 ); // Lo_Byte(DOSR) for DOSR = 128 decimal or 0x0080
AIC3204_rset( 20, 0x80 ); // AOSR for AOSR = 128 decimal or 0x0080 for decimation filters 1 to 6
AIC3204_rset( 11, 0x84 ); // Power up NDAC and set NDAC value to 4
AIC3204_rset( 12, 0x82 ); // Power up MDAC and set MDAC value to 2
AIC3204_rset( 18, 0x84 ); // Power up NADC and set NADC value to 4
AIC3204_rset( 19, 0x82 ); // Power up MADC and set MADC value to 2
// DAC ROUTING and Power Up
AIC3204_rset( 0, 0x01 ); // Select page 1
AIC3204_rset( 12, 0x08 ); // LDAC AFIR routed to HPL