ЛР1 / МТ ЛР1
.pdfГУАП
КАФЕДРА №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