Основы обработки аудиосигналов средствами MATLAB
Автор: Andrey Rodikov • Январь 22, 2023 • Лабораторная работа • 638 Слов (3 Страниц) • 348 Просмотры
Лабораторная работа №1.
Основы обработки аудиосигналов средствами MATLAB
Вариант 6
Содержание
Цель работы. 3
Задание на работу 3
Выполнение работы 3
Выводы. 10
Цель работы.
Получить навыки формирования аудиосигналов средствами MATLAB. Изучить основы обработки аудиосигналов на примере методов фильтрации сигналов в спектральном пространстве.
Задание на работу
Задание на лабораторную работу предполагает реализацию метода Фурье-фильтрации аудиофайла. Сначала следует создать модельный аудиосигнал, на котором нужно будет протестировать программу фильтрации. Затем следует осуществить фильтрацию реальной аудиозаписи. Аудиозапись каждый обучающийся выбирает самостоятельно.
Выполнение работы
- Согласовать с преподавателем вариант задания во время занятия по расписанию, удостовериться в правильном понимании задания и критериев его оценки.
Исходные данные варианта:
Тип фильтра: режекторный фильтр
Граничные частоты полосы пропускания фильтра fниж = 150 Гц, fверхн = 500 Гц,
- Смоделировать модельный аудиофайл, позволяющий осуществить тестирование программы фильтрации. Частоты компонентов модельного сигнала следует задать так, чтобы можно было сделать корректный вывод о правильности работы программы.
Для тестирования режекторного фильтра зададим частоты компонентов как в полосе фильтра, так и снизу и сверху полосы.
Листинг программы
clc; clear all; close all;
Fd = 44100; % задаем стандартную частоту дискретизации в Гц
Td = 1./Fd; % период дискретизации – обратный частоте
Ts = 5; % задаем длительность формируемого сигнала в секундах
N = Fd*Ts; %количество дискретных отсчетов
f1=80; f2=400; f3=5000; % частоты компонентов
A1=30; A2=30; A3=30; % амплитуды компонентов в процентах от максимума
A1=(A1/100)*32768; A2=(A2/100)*32768; A3=(A3/100)*32768;
y=zeros(N,2);
for n=1:N
nt = 2*pi*n*Td;
if (n<N/3) y(n,1) = A1*sin(f1*nt); end
if ((n>=N/3) && (n<2*N/3)) y(n,1) = A2*sin(f2*nt); end
if (n>=2*N/3) y(n,1) = A3*sin(f3*nt); end
y(n,2) = y(n,1); % формируем второй "стерео" канал звука
end
output_signal = int16(y); %задание разрядности данных
sound(y,Fd); %проигрываем смоделированный cигнал
% записываем новый аудиофайл:
audiowrite('D:/Temp/Audio_Lab1.wav', output_signal, Fd)
Результат работы – звуковой файл из трех сигналов
- Написать MATLAB-программу, которая реализует метод Фурье фильтрации. Протестировать полученную программу на модельном аудиофайле, сформированных в первой части лабораторной работы. Убедиться к корректности решения.
Листинг программы
clc, clear, close all %очистка памяти
[input_signal,Fd] = audioread('D:/Temp/Audio_Lab1.wav');%звуковой файл
sound(input_signal,Fd); % проигрываем файл
N = length(input_signal);%Получить длину данных аудиофайла
t = 1:1:N;
plot(t./Fd,input_signal) % строим график сигнала
title('График сигнала');legend('Audio');
xlabel('Time'), ylabel('Audio Signal')
Spectr_input=fft(input_signal); %вычисляем спектр сигнала
y=20*log(abs(Spectr_input))/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=zeros(N,2); % создаем пустой массив для последующей записи вых. сигнала
...