ГУАП
КАФЕДРА 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доцент, к.т.н. доцент |
|
|
|
О.О. Жаринов |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4 |
Применение формирующих фильтров для создания шумоподобных аудиосигналов |
по курсу: МУЛЬТИМЕДИА ТЕХНОЛОГИИ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4016 |
|
|
|
М.О. Жовтяк |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель.
Изучить методологию создания шумоподобных сигналов на основе формирующих фильтров.
Краткие теоретические сведения о задачах обработки мультимедиа аудиоконтента.
Использование фильтров в мультимедиа при обработке аудиосигналов не ограничивается только трансформацией свойств речевых, музыкальных и иных записей. Заметное место в мультимедиа отводится имитационному моделированию разнообразных шумовых эффектов (например, “звуки космического пространства”, и т.п.).
Одним из возможных подходов к созданию шумоподобных аудиосигналов с заданными акустическими свойствами является метод формирующего фильтра. Основная идея метода заключается в пропускании через фильтр сигнала от искусственного создаваемого источника белого шума. В зависимости от свойств применяемого фильтра выходной сигнал оказывается “спектрально окрашенным”, что порождает специфические слуховые ощущения. Например, если применить полосовой фильтр с узкой полосой, то выходной шум будет восприниматься как “звенящий”, если применить фильтр нижних частот (lowpass), то аудиосигнал на выходе представляет собой глухой шум, напоминающий, в зависимости от параметров фильтра, шум водопада, фонтана, шелест листвы, и т.д.
Смешивание нескольких шумов в разных пропорциях, а также динамическое изменение интенсивности одного или нескольких процессов позволяет получать разнообразные звуковые эффекты.
Ход работы
Для создания аудиосигнала, который ближе похож на шум моря, можно использовать другой подход: сгенерировать белый шум и пропустить его через комбинацию фильтров или применить специальную обработку, чтобы полученный сигнал больше напоминал звучание морских волн [2].
Во-первых, изменим подход и добавим больше изменчивости в динамику звука, используя фильтр низких частот для основной массы звука и немного высокочастотных компонентов для имитации скрипа чаек или шороха песка. Также, мы можем создать иллюзию прибоя, модулировав амплитуду сигнала так, чтобы создавался эффект "волн". Код, представленный в Листинге 1 создает более сложный и интересный звук моря, используя комбинацию ФНЧ и ФВЧ для создания богатого на тембры аудиосигнала. Мы имитируем прибой, модулируя амплитуду сигнала с помощью простой синусоидальной функции, что добавляет изменчивость в интенсивность звука, подобно приходящим волнам.
Листинг 1 – Код для создания сигнала моря
clc; clear; close all;
Fd = 44100; % Частота дискретизации в Гц
Td = 1 / Fd; % Период дискретизации
Ts = 60; % Длительность сигнала в секундах
N = Fd * Ts; % Количество отсчетов
% Генерация белого шума
x = randn(N, 1);
% Параметры фильтра
fc_low = 400; % Граница ФНЧ (для имитации основного тон звука моря)
fc_high = 12000; % Граница ФВЧ (для добавления шороха)
% Создаем ФНЧ
[b_low, a_low] = butter(6, fc_low / (Fd / 2), 'low');
% Создаем ФВЧ
[b_high, a_high] = butter(6, fc_high / (Fd / 2), 'high');
% Применяем фильтры
y = filter(b_low, a_low, x) + 0.05 * filter(b_high, a_high, x);
% Имитация эффекта прибоя путем модуляции амплитуды
for i = 1:N
y(i) = y(i) * (1 + 0.3 * sin(2 * pi * (1/5) * i * Td))^2;
end
% Нормализация сигнала
y = 0.99 * y / max(abs(y));
% Перевод в int16
output_signal = int16(y * 32767);
% Запись аудиофайла
audiowrite('simulated_sea.wav', output_signal, Fd);
Обработанную запись можно прослушать по ссылке: https://disk.yandex.ru/d/ZDFooggaq1ibPA [3].
Чтобы смоделировать звук стука пальцами в MATLAB, начнем с создания исходного сигнала, который можно было бы считать аналогом начального импульса стука, и затем применим к нему серию фильтров для формирования конечного звучания. Звук стука характерен коротким, но довольно широкополосным звуковым импульсом. Для примера создадим сигнал, который в начале содержит высокоамплитудный импульс, а затем резко затухает. Мы можем применить ФВЧ (фильтр высоких частот), чтобы подчеркнуть характер импульса, поскольку стук создает звук с более высокой частотой [4].
Код, представленный в Листинге 2 генерирует серию стуков пальцами с интервалом в одну секунду между каждым щелчком в течение общей длительности в 10 секунд. Для этого сначала создается массив `x_series`, который затем заполняется щелчками с заданными интервалами. Весь сигнал фильтруется с использованием ФВЧ, чтобы придать звуку стука необходимый характер.
Листинг 2 – Код для создания сигнала стука пальцев
clc; clear; close all;
Fd = 44100; % частота дискретизации в Гц
Td = 1./Fd; % период дискретизации
Ts = 0.1; % длительность одного щелчка в секундах
N = Fd*Ts; % количество дискретных отсчетов для одного щелчка
% Создаем исходный импульсный сигнал для одного щелчка
x_single = zeros(N,1);
x_single(1:50) = linspace(0, 1, 50); % импульсный сигнал, быстро затухающий
x_single(51:100) = linspace(1, 0, 50); % обратная часть для создания щелчка
% Создадим серию щелчков с интервалами
total_duration = 10; % общая длительность сигнала в секундах
x_series = zeros(Fd*total_duration, 1); % инициализация массива для серии щелчков
% Вставляем щелчки с интервалами в одну секунду
for i = 0:total_duration-1
x_series(i*Fd+1 : i*Fd+N) = x_single;
end
% Применяем ФВЧ ко всему сигналу
Fc = 1000; % граничная частота фильтра в Гц
[b, a] = butter(2, Fc/(Fd/2), 'high'); % ФВЧ 2-го порядка
y_series = filter(b, a, x_series);
% Нормировка по амплитуде
Am = 8192; % максимум громкости
y_series = y_series./max(abs(y_series)) * Am;
output_signal = int16(y_series);
% Визуализация звукового сигнала
t = (0:length(y_series)-1) / Fd; % создаем вектор времени для визуализации
figure;
plot(t, y_series);
xlabel('Время (с)');
ylabel('Амплитуда');
title('Визуализация серии щелчков пальцами');
grid on;
% Записываем новый аудиофайл
audiowrite('finger_snap_series.wav', output_signal, Fd);
Обработанную запись можно прослушать по ссылке: https://disk.yandex.ru/d/Y-BTlg8-DHWDrQ [5].
Для создания звука марша мы можем использовать комбинацию низкочастотного шума с некоторыми добавлениями в более широком диапазоне частот. Мы сосредоточимся на использовании фильтра нижних частот (ФНЧ), чтобы пропустить низкочастотные компоненты, имитируя большой шум от шагов. В этом подходе мы используем ФНЧ для имитации общего фона шума, а также добавляем повторяющиеся "биения" с низкой частотой, чтобы имитировать множественный звук шага. Этот подход поможет создать более погружающий и реалистичный звук, похожий на то, как если бы мимо нас проходил марш солдат [6]. Код представлен в Листинге 3.
Листинг 3 – Код для создания сигнала марша
clc; clear; close all;
Fd = 44100; % Частота дискретизации
Ts = 60; % Продолжительность сигнала в секундах
N = Fd * Ts; % Количество отсчетов
% Генерация белого шума
x = randn(N, 1);
% Частоты для фильтра нижних частот
lowFreq = 20; % Нижняя граница
highFreq = 300; % Верхняя граница
% Применяем ФНЧ к шуму
y = lowpass(x, highFreq, Fd);
% Добавляем эффект "биения" для имитации повторяющихся звуковых сигнатур
for k = 1:N
y(k) = y(k) * (1 + 0.25 * sin(2 * pi * 2 * k / Fd)); % 2 Гц для имитации биения
end
% Нормализация
y = y / max(abs(y));
% Преобразуем в INT16
Am = 8192; % Максимальная амплитуда
y = int16(y * Am);
% Запись в аудиофайл
audiowrite(march.wav', y, Fd);
Обработанную запись можно прослушать по ссылке: https://disk.yandex.ru/d/gxINlp8K87CApQ [7].
Вывод
В ходе данной лабораторной работы мы углубили навыки обработки аудиосигналов на примере методов фильтрации сигналов во временной области с использованием рекурсивных цифровых фильтров, а также с помощью фурье-фильтрации.
Это было отработано с помощью создания трёх шумоподобных сигналов: звука моря, звука стука пальцев и звука марша солдат. Итого, с помощью применения различных фильтраций сигналов получилось создать подобие реалистичных аудиосигналов.
Список используемой литературы
Жаринов О.О. Учебно-методические материалы к выполнению лабораторной работы №4 по дисциплине “Мультимедиа-технологии” гр.4016, 4017. ГУАП, 2024. – 7 с. // URL: https://pro.guap.ru/inside/student/tasks/780cf7cb04fd7cd2fa475aecc5f70fc0/download
Sound Speed in Sea Water // URL: https://www.mathworks.com/matlabcentral/fileexchange/4940-sound-speed-in-sea-water
Яндекс диск. Звук моря. // URL: https://disk.yandex.ru/d/ZDFooggaq1ibPA
A Note on Time–Frequency Analysis of Finger Tapping // URL: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2670435/
Яндекс диск. Звук стука пальцев. // URL: https://disk.yandex.ru/d/Y-BTlg8-DHWDrQ
Speech and Audio Processing: A MATLAB®-based approach // URL: https://www.researchgate.net/publication/325954235_Speech_and_Audio_Processing_A_MATLABR-based_approach
Яндекс диск. Звук марша солдат. // URL: https://disk.yandex.ru/d/gxINlp8K87CApQ