Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР1 / МТ ЛР1

.pdf
Скачиваний:
18
Добавлен:
25.06.2023
Размер:
445.89 Кб
Скачать

ГУАП

КАФЕДРА №41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

доц., канд. техн. наук

 

 

 

О.О. Жаринов

 

 

 

 

 

 

 

 

 

должность, уч. степень, звание

 

подпись, дата

 

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1

ОСНОВЫ ОБРАБОТКИ АУДИОСИГНАЛОВ СРЕДСТВАМИ

MATLAB

по курсу: МУЛЬТИМЕДИА ТЕХНОЛОГИИ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

 

инициалы, фамилия

Санкт-Петербург 2023

Цель работы

Получить навыки формирования аудиосигналов средствами MATLAB. Изучить основы обработки аудиосигналов на примере методов фильтрации сигналов в спектральном пространстве.

Краткие сведения о задачах обработки аудио сигналов

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

Одна из распространенных задач обработки аудио сигналов связана с фильтрацией исходного аудио файла. Для этого часто применяют метод Быстрых Преобразований Фурье (БПФ). Отфильтровав выбранный диапазон частот, можно наложить его на исходный файл с целью усиления выбранного диапазона частот.

Индивидуальный вариант

Индивидуальный вариант в соответствии с таблицей 1.

Таблица 1 – Индивидуальный вариант задания

№ варианта

Описание задания

 

 

 

9

Подавить уровень сигнала в диапазоне 2...5 кГц в 30 раз

 

 

 

Ход работы

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

Таблица 2 – Список переменных моделирования тестового аудио сигнала

Название

Описание

Fd

Частота дискретизации

Td

Период дискретизации

Ts

Длительность формируемого согнала в секундах

N

Кол-во дискретных отсчетов

f

Частота компонентов формируемого сигнала

A

Амплитуды компонентов в процентах от максимума

step

Длительность компонентов сигнала

y

Массив значений моделируемого сигнала

n

Итератор для цикла генерации сигнала

output_signal

Массив значений сгенерированного сигнала

2

Код программы в соответствии с листингом 1.

Листинг 1 – Программа для моделирования тестового аудиосигнала

clc, clear, close all %очистка памяти

Fd = 44100; % задаем стандартную частоту дискретизации в Гц Td = 1./Fd; % период дискретизации – обратный частоте

Ts = 5; % задаем длительность формируемого сигнала в секундах N = Fd*Ts; % количество дискретных отсчетов

f

= [1000

2500

4000 5500 7000];

% частоты компонентов

A

= (zeros(1,5) + 30)/100 * 32768;

% амплитуды компонентов в

процентах

от максимума

 

step = int32(N

/ length(f));

 

y=zeros(N,2);

for n=1:N-1

nt = 2*pi*n*Td;

y(n, 1) = A(idivide(n, step) + 1) * sin(f(idivide(n, step) +

1) * nt);

 

y(n,2) = y(n,1);

% формируем второй "стерео" канал

звука

 

end

 

output_signal = int16(y);

%задание разрядности данных

sound(y,Fd);

%проигрываем смоделированный cигнал

% записываем новый аудиофайл:

audiowrite('out_audio.wav',

output_signal, Fd)

Пример результата выполнения программы в соответствии с рисунком 1.

Рисунок 1 – Созданный файл

3

2.Программа для подавления аудио сигнала в диапазоне от 2 до 5 кГц в 30 раз.

Список переменных в соответствии с таблицей 3.

 

Таблица 3 – Список переменных программы изменения файла

 

 

Название

Описание

input_signal

Массив значений входного сигнала

Fd

Частота дискретизации

Spectr_input

Массив значений спектра аудио файла

lower_frequency

Нижняя граница выделяемой части спектра

upper_frequency

Верхняя граница выделяемой части спектра

Spectr_find

Выделенная часть спектра

Код программы в соответствии с листингом 2.

Листинг 2 – Код программы изменения аудио файла

clc, clear, close all %очистка памяти

[input_signal,Fd] = audioread('out_audio.wav');%звуковой файл %[input_signal,Fd] = audioread('real_test_in.wav');%звуковой файл

sound(input_signal,Fd); % проигрываем файл

N = length(input_signal);%Получить длину данных аудиофайла t = 1:1:N;

plot(t./Fd,input_signal) % строим график сигнала xlabel('Time'), ylabel('Audio Signal')

%вычисляем спектр сигнала:

Spectr_input(:,1)=fft(input_signal(:,1));

Spectr_input(:,2)=fft(input_signal(:,2)); y=20*log(abs(Spectr_input(:,1)))/log(10); %Преобразовать в дБ f=(0:(Fd/N):Fd/2); %Перевести абсциссу графика в Гц

%строим график амплитудного спектра входного сигнала y=y(1:length(f));

figure(2),

semilogx(f,y); grid; axis([1 Fd/2 -100 100]) xlabel('Частота (Гц)');

ylabel('Уровень (дБ)');

title('Амплитудный спектр исходного аудиосигнала'); legend('Audio');

%создаем пустой массив для последующей записи вых. сигнала: output_signal_1 = zeros(N,2);

%создаем пустой массив для спектра вых. сигнала

%Spectr_output = zeros(size(Spectr_input))+0.00001;

% задаем граничные частоты полосы пропускания фильтра, в Герцах lower_frequency = 2000;

upper_frequency = 5000;

4

%переводим Герцы в целочисленные индексы массива n_lower_frequency = round(N.*lower_frequency/Fd); n_upper_frequency = round(N.*upper_frequency/Fd);

%модифицируем спектр в соответствии с характеристикой фильтра

%********************************************************

Spectr_output_LOW = zeros(size(Spectr_input))+0.00001; Spectr_output_HIGH = zeros(size(Spectr_input))+0.00001;

for n = 2:n_lower_frequency Spectr_output_LOW(n,:)=Spectr_input(n,:); Spectr_output_LOW(N+2-n,:)=Spectr_input(N+2-n,:);

end

for n = 2:n_upper_frequency Spectr_output_HIGH(n,:)=Spectr_input(n,:); Spectr_output_HIGH(N+2-n,:)=Spectr_input(N+2-n,:);

end

Spectr_output_LOW(1,:)=Spectr_input(1,:);

Spectr_output_HIGH(1,:)=Spectr_input(1,:);

%по сути созданы 2 спектра, в которых сохранены низкие частоты

%от 0 до lower_frequency и от 0 до upper_frequency

%вычитанием массивов создаем массив, в котором

%будут в наличии лишь компоненты

%с частотами от lower_frequency до upper_frequency

%т.е. будет получен именно полосовой фильтр:

Spectr_find = Spectr_output_HIGH - Spectr_output_LOW; Spectr_output = Spectr_input - 29/30*Spectr_find;

% ******************************************************

%посмотрим на график выходного спектра y=20*log(abs(Spectr_output))/log(10); %Преобразовать в дБ f=(0:(Fd/N):Fd/2); %Перевести Абсциссу в Гц y=y(1:length(f));

figure(3), semilogx(f,y); grid; axis([1 Fd/2 -100 100]) xlabel('Частота (Гц)'); ylabel('Уровень (дБ)'); title('Амплитудный спектр выходного сигнала аудиофайла');legend('Audio');

%обратное БПФ от модифицированного спектра: output_signal_1(:,1) =ifft(Spectr_output(:,1)); output_signal_1(:,2) =ifft(Spectr_output(:,2));

%можно прослушать результат фильтрации прямо в Matlab: sound(100*output_signal_1, Fd);

%выведем грфики исходного аудиосигнала и после фильтрации:

%сейчас выводится весь график.

%можно модифицировать значения переменных start и stop,

%чтобы рассмотреть детали аудиосигнала на любом фрагменте start=1; stop=N;

5

figure(4)

subplot(2,1,1); plot(input_signal(start:stop)); subplot(2,1,2); plot(output_signal_1(start:stop));

% записываем новый аудиофайл:

audiowrite('out_audio_new.wav', output_signal_1, Fd) %audiowrite('real_test_out.wav', output_signal_1, Fd)

3.Полученные графики.

Для тестового аудио файла в соответствии с рисунком 2.

Рисунок 2 – Графики для спектра тестового сигнала, исходный сверху, измененный снизу Для реального аудио файла в соответствии с рисунком 3.

Рисунок 3 – Графики для спектра реального сигнала, исходный сверху, измененный снизу

6

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

Вывод

В ходе данной лабораторной работы мы изучили методы формирования и изменения аудиосигналов с помощью средств MatLab.

Нами были разработаны программы для генерации и тестового сигнала и обработки аудио сигнала. Воспользовавшись полученными программами, получили изменённые сигналы и оценили изменения на слух и по графикам. Изменения были явно заметны.

7

Список использованной литературы

1.Введение в цифровую обработку речевых сигналов: учеб. Пособие / Х.М. Ахмад, В.Ф. Жирков; Владим. Гос. ун-т. - Владимир: Изд-во Владим. Гос. ун-та, 2007. 192 с. ISBN 5-89368-751-5

2.Разработка программы для анализа звуковых файлов пакете MATLAB. // URL: https://gigabaza.ru/doc/106583.html

3.Алгоритм цифровой фильтрации в частотной и временной областях. // URL: http://stu.sernam.ru/book_g_rts.php?id=137

4.Фильтрация сигнала в частотной области - Цифровая обработка сигналов. //

URL: http://www.cyberforum.ru/digital-signalprocessing/thread1663620.html

5.Дьяконов В. MATLAB 8.0 (R2012b): создание, обработка и фильтрация сигналов, Signal Processing Toolbox. // Компоненты и технологии, 2013. №11, с. 151-161.

6.Сизиков В.С., Лавров А.В. Устойчивые методы математико-компьютерной обработки изображений и спектров. Учебное пособие. СПб: Университет ИТМО. 2018. 70с.

7.Генерация сигналов в пакете Signal Processing. // URL: https://megapredmet.ru/1-71591.html

8

Соседние файлы в папке ЛР1