Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Z9411_Чурилов_ММ_ЛР2

.docx
Скачиваний:
0
Добавлен:
10.11.2024
Размер:
204.51 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 41

ЛАБОРАТОРНАЯ РАБОТА

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

РУКОВОДИТЕЛЬ

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

О. О. Жаринов

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

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

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

ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №2

Основы обработки аудиосигналов средствами MATLAB. Метод фильтрации в спектральном пространстве

по курсу: Мультимедиа технологии

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

СТУДЕНТ ГР. №

Z9411

А. С. Чурилов

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

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

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

2024

Цель работы

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

Вариант задания:

Вариант №19.

Подавить уровень сигнала в диапазоне 45…55 Гц в 100 раз.

Для большей наглядности изменил диапазон на 45…450 Гц.

Ход работы:

Напишем, отладим и запустим на выполнение MATLAB-программу, которая реализует метод Фурье-фильтрации для заданного по варианту типа фильтра. Код программы приведён в листинге 1.

Листинг 1 – Код для реализации Фурье-фильтрации

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

[input_signal,Fd] = audioread('lr2_sound.mp3'); % Звуковой файл

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));

% Преобразовать в дБ:

S_dB_input=20*log10(abs(Spectr_input(:,1)));

f=0:(Fd/N):Fd/2; % Перевести абсциссу графика в Гц

% Строим график амплитудного спектра входного сигнала

S_dB_input=S_dB_input(1:length(f));

% Зададим пределы для вывода по вертикали:

MaxS = 20*ceil(max(S_dB_input)/20);

MinS = MaxS - 120;

figure(2),

semilogx(f, S_dB_input); grid; axis([1 Fd/2 MinS MaxS])

xlabel('Частота (Гц)');

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

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

legend('Audio');

% Создаем пустой массив для последующей записи вых. сигнала:

output_signal_1 = zeros(N,2);

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

% небольшая константа добавляется, чтобы избежать lg(0)

eps = MaxS*(1.0e-9);

Spectr_output = zeros(size(Spectr_input))+ eps;

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

lower_frequency = 45;

upper_frequency = 450; % Увеличим значение верхней границы для наглядности

% переводим Герцы в целочисленные индексы массива: см. ф-лу (1)

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,:);

Spectr_output_HIGH = Spectr_input - Spectr_output_HIGH;

Spectr_output = Spectr_output_LOW + Spectr_output_HIGH;

Spectr_output = Spectr_output_HIGH - Spectr_output_LOW;

Spectr_output = (1/100)*Spectr_input + Spectr_output ;

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

% обратное БПФ от модифицированного спектра:

% раздельно для каждого канала

output_signal_1(:,1) =ifft(Spectr_output(:,1));

output_signal_1(:,2) =ifft(Spectr_output(:,2));

% полезно вычислить спектр выходного сигнала

% и построить его график:

Spectr_output_real(:,1)=fft(output_signal_1(:,1));

S_dB_output_real=20*log10(abs(Spectr_output_real(:,1))); %в дБ

f=0:(Fd/N):Fd/2; %Перевести Абсциссу в Гц

S_dB_output_real = S_dB_output_real(1:length(f));

figure(3), semilogx(f, S_dB_output_real);

grid; axis([1 Fd/2 MinS MaxS])

xlabel('Частота (Гц)'); ylabel('Уровень (дБ)');

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

legend('Audio');

% Строим график изменённого сигнала

figure(5)

plot(t./Fd,output_signal_1)

xlabel('Time'), ylabel('Audio Signal')

% Выводим графики исходного и изменённого звука от начала до конца

start=1; stop=N;

figure(4)

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

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

% Создаём новый аудиофайл:

audiowrite('lr2_output.wav', output_signal_1, Fd)

График исходного сигнала показан на рисунке 1.

Рисунок 1. График исходного сигнала

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

Рисунок 2. Амплитудный спектр исходного сигнала

График изменённого сигнала показан на рисунке 3.

Рисунок 3. График изменённого сигнала

Амплитудный спектр изменённого сигнала показан на рисунке 4.

Рисунок 4. Амплитудный спектр изменённого сигнала

Графики исходного и изменённого сигналов для удобства показаны вместе на рисунке 5.

Рисунок 5. Графики сигналов

Как видно из графиков, сигнал действительно изменился. Если прослушать изменённую аудиозапись, то можно услышать, что человеческий голос стал тише и человек как будто говорит «в нос», а вот звук гитары особо не изменился в отличии от исходной аудиозаписи.

ВЫВОД

В ходе выполнения данной лабораторной работы я ознакомился с основными основами обработки сигналов средствами MATLAB, а также ознакомился с методом фильтрации в спектральном пространстве

В данной работе был изменён аудиофайл, путём подавления уровня сигнала в диапазоне 45…55 Гц в 100 раз.

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

Данная работа позволила мне получить знания по обработке и анализу аудиосигналов, а также получить основы программирования на языке MATLAB.

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

  1. Обработка звука – фильтры. / Дмитрий Михайлов // URL: http://websound.ru/articles/theory/filter.htm

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

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

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

  5. Фильтрация сигнала в частотной области - Цифровая обработка сигналов. // URL: http://www.cyberforum.ru/digital-signalprocessing/thread1663620.html

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

  7. Zvukogram. База звуковых эффектов для монтажа. // URL: https://zvukogram.com/category/

  8. Помехи на радио (версия 4) https://zvukogram.com/index.php?r=site/download&id=29280

  9. Болгарка https://zvukogram.com/index.php?r=site/download&id=24763

  10. Звук цикла шума, производимого дизельнымhttps://zvukogram.com/index.php?r=site/download&id=36551