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

лаб4 / lab4

.docx
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
45.24 Кб
Скачать

ГУАП

КАФЕДРА 41

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

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

доцент, к.т.н. доцент

О.О. Жаринов

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

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

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

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

Применение формирующих фильтров для создания шумоподобных аудиосигналов

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

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

СТУДЕНТ гр. №

4016

М.О. Жовтяк

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

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

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

  1. Цель.

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

  1. Краткие теоретические сведения о задачах обработки мультимедиа аудиоконтента.

Использование фильтров в мультимедиа при обработке аудиосигналов не ограничивается только трансформацией свойств речевых, музыкальных и иных записей. Заметное место в мультимедиа отводится имитационному моделированию разнообразных шумовых эффектов (например, “звуки космического пространства”, и т.п.).

Одним из возможных подходов к созданию шумоподобных аудиосигналов с заданными акустическими свойствами является метод формирующего фильтра. Основная идея метода заключается в пропускании через фильтр сигнала от искусственного создаваемого источника белого шума. В зависимости от свойств применяемого фильтра выходной сигнал оказывается “спектрально окрашенным”, что порождает специфические слуховые ощущения. Например, если применить полосовой фильтр с узкой полосой, то выходной шум будет восприниматься как “звенящий”, если применить фильтр нижних частот (lowpass), то аудиосигнал на выходе представляет собой глухой шум, напоминающий, в зависимости от параметров фильтра, шум водопада, фонтана, шелест листвы, и т.д.

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

  1. Ход работы

Для создания аудиосигнала, который ближе похож на шум моря, можно использовать другой подход: сгенерировать белый шум и пропустить его через комбинацию фильтров или применить специальную обработку, чтобы полученный сигнал больше напоминал звучание морских волн [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].

Вывод

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

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

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

  1. Жаринов О.О. Учебно-методические материалы к выполнению лабораторной работы №4 по дисциплине “Мультимедиа-технологии” гр.4016, 4017. ГУАП, 2024. – 7 с. // URL: https://pro.guap.ru/inside/student/tasks/780cf7cb04fd7cd2fa475aecc5f70fc0/download

  2. Sound Speed in Sea Water // URL: https://www.mathworks.com/matlabcentral/fileexchange/4940-sound-speed-in-sea-water

  3. Яндекс диск. Звук моря. // URL: https://disk.yandex.ru/d/ZDFooggaq1ibPA

  4. A Note on Time–Frequency Analysis of Finger Tapping // URL: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2670435/

  5. Яндекс диск. Звук стука пальцев. // URL: https://disk.yandex.ru/d/Y-BTlg8-DHWDrQ

  6. Speech and Audio Processing: A MATLAB®-based approach // URL: https://www.researchgate.net/publication/325954235_Speech_and_Audio_Processing_A_MATLABR-based_approach

  7. Яндекс диск. Звук марша солдат. // URL: https://disk.yandex.ru/d/gxINlp8K87CApQ

Соседние файлы в папке лаб4