У меня нет вашего frase.wav
файла, поэтому я сделал себе один с двумя частотами, 5 кГц и 15 кГц с частотой дискретизации 44100 Гц. Я считаю, что 15 kHs - это "уродливый", которого я хочу удалить.
Я думаю, вы перепутали частоты, которые хотите удалить, с индексами этих частот.
Вот предлагаемое исправление, используя find
для поиска индексов частоты, которую я хочу удалить.
[frase, fs] = audioread('frase.wav');
soundsc(frase, fs);
S_fft= fft(frase);
N = length(frase);
F = (0:(N-1))/N*fs;
subplot(2, 1, 1); plot(F, abs(S_fft)); title('Before');
%% Identify Ugly Frequency
Fu = 15000;
%% Remove the Ugly Frequency
tol = 10; % Tolerance around the ugly frequency
indexes_p = find(F>Fu-tol & F<Fu+tol); % Find indexes of ugly frequency
indexes_n = find(F>(fs-Fu)-tol & F<(fs-Fu));
indexes = [indexes_p indexes_n];
S_fft(indexes) = 0;
subplot(2, 1, 2); plot(F, abs(S_fft)); title('After');
Результат
