
Добавил:
KaFaka
t.me
Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:LR2 / LR2_1
.m % MATLAB-программа для Фурье-фильтрации с ФВЧ
clc; clear; close all;
% Загрузка аудиосигнала
[file, path] = uigetfile({'*.wav;*.mp3'}, 'Выберите аудиофайл для обработки');
[signal, Fs] = audioread([path file]); % Fs - частота дискретизации
if size(signal, 2) > 1
signal = mean(signal, 2); % Конвертация в моно, если необходимо
end
% Временной массив для графика
t = (0:length(signal)-1)/Fs;
% Вычисление спектра сигнала
Spectrum = fft(signal);
N = length(signal); % Общая длина сигнала
f = Fs*(0:(N/2))/N; % Частотный массив для графика
% Определение граничной частоты для ФВЧ
f_cutoff = 800; % Граничная частота в Гц
n_cutoff = round(f_cutoff/(Fs/length(signal))); % Индекс в массиве спектра
% Создание массива фильтра
H = ones(length(Spectrum), 1); % Инициализация фильтра единицами
H(1:n_cutoff) = 0; % Подавление низких частот
H(end-n_cutoff+1:end) = 0; % Зеркальное подавление для отрицательных частот
% Применение фильтра
FilteredSpectrum = Spectrum .* H;
% Обратное преобразование Фурье для получения отфильтрованного сигнала
filtered_signal = real(ifft(FilteredSpectrum));
% Построение графиков
figure;
subplot(2,2,1);
plot(t, signal);
title('Исходный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,2);
plot(f, 20*log10(abs(Spectrum(1:length(f)+1))));
title('Спектр исходного сигнала в дБ');
xlabel('Частота (Гц)');
ylabel('Амплитуда (дБ)');
subplot(2,2,3);
plot(t, filtered_signal);
title('Отфильтрованный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,4);
plot(f, 20*log10(abs(FilteredSpectrum(1:length(f)+1))));
title('Спектр отфильтрованного сигнала в дБ');
xlabel('Частота (Гц)');
ylabel('Амплитуда (дБ)');
% Воспроизведение исходного и отфильтрованного сигналов для оценки на слух
disp('Воспроизведение исходного сигнала...');
sound(signal, Fs);
pause(length(signal)/Fs + 1); % Пауза для окончания воспроизведения
disp('Воспроизведение отфильтрованного сигнала...');
sound(filtered_signal, Fs);
clc; clear; close all;
% Загрузка аудиосигнала
[file, path] = uigetfile({'*.wav;*.mp3'}, 'Выберите аудиофайл для обработки');
[signal, Fs] = audioread([path file]); % Fs - частота дискретизации
if size(signal, 2) > 1
signal = mean(signal, 2); % Конвертация в моно, если необходимо
end
% Временной массив для графика
t = (0:length(signal)-1)/Fs;
% Вычисление спектра сигнала
Spectrum = fft(signal);
N = length(signal); % Общая длина сигнала
f = Fs*(0:(N/2))/N; % Частотный массив для графика
% Определение граничной частоты для ФВЧ
f_cutoff = 800; % Граничная частота в Гц
n_cutoff = round(f_cutoff/(Fs/length(signal))); % Индекс в массиве спектра
% Создание массива фильтра
H = ones(length(Spectrum), 1); % Инициализация фильтра единицами
H(1:n_cutoff) = 0; % Подавление низких частот
H(end-n_cutoff+1:end) = 0; % Зеркальное подавление для отрицательных частот
% Применение фильтра
FilteredSpectrum = Spectrum .* H;
% Обратное преобразование Фурье для получения отфильтрованного сигнала
filtered_signal = real(ifft(FilteredSpectrum));
% Построение графиков
figure;
subplot(2,2,1);
plot(t, signal);
title('Исходный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,2);
plot(f, 20*log10(abs(Spectrum(1:length(f)+1))));
title('Спектр исходного сигнала в дБ');
xlabel('Частота (Гц)');
ylabel('Амплитуда (дБ)');
subplot(2,2,3);
plot(t, filtered_signal);
title('Отфильтрованный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,4);
plot(f, 20*log10(abs(FilteredSpectrum(1:length(f)+1))));
title('Спектр отфильтрованного сигнала в дБ');
xlabel('Частота (Гц)');
ylabel('Амплитуда (дБ)');
% Воспроизведение исходного и отфильтрованного сигналов для оценки на слух
disp('Воспроизведение исходного сигнала...');
sound(signal, Fs);
pause(length(signal)/Fs + 1); % Пауза для окончания воспроизведения
disp('Воспроизведение отфильтрованного сигнала...');
sound(filtered_signal, Fs);
Соседние файлы в папке LR2