
Добавил:
KaFaka
t.me
Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:LR2 / LR2
.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);
f = Fs*(0:(length(signal)/2))/length(signal); % Частотный массив для графика
% Определение граничной частоты для ФВЧ
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, abs(Spectrum(1:length(f))));
title('Спектр исходного сигнала');
xlabel('Частота (Гц)');
ylabel('|S(f)|');
subplot(2,2,3);
plot(t, filtered_signal);
title('Отфильтрованный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,4);
plot(f, abs(FilteredSpectrum(1:length(f))));
title('Спектр отфильтрованного сигнала');
xlabel('Частота (Гц)');
ylabel('|S(f)|');
% Воспроизведение исходного и отфильтрованного сигналов для оценки на слух
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);
f = Fs*(0:(length(signal)/2))/length(signal); % Частотный массив для графика
% Определение граничной частоты для ФВЧ
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, abs(Spectrum(1:length(f))));
title('Спектр исходного сигнала');
xlabel('Частота (Гц)');
ylabel('|S(f)|');
subplot(2,2,3);
plot(t, filtered_signal);
title('Отфильтрованный сигнал');
xlabel('Время (с)');
ylabel('Амплитуда');
subplot(2,2,4);
plot(f, abs(FilteredSpectrum(1:length(f))));
title('Спектр отфильтрованного сигнала');
xlabel('Частота (Гц)');
ylabel('|S(f)|');
% Воспроизведение исходного и отфильтрованного сигналов для оценки на слух
disp('Воспроизведение исходного сигнала...');
sound(signal, Fs);
pause(length(signal)/Fs + 1); % Пауза для окончания воспроизведения
disp('Воспроизведение отфильтрованного сигнала...');
sound(filtered_signal, Fs);
Соседние файлы в папке LR2