我正在执行fft操作,以从声音文件中删除特定频率。
问题是,也许我是盲人,或者是什么,但是以某种方式我设法只从一侧消除了频率,而即使我将其归零,另一侧也没有消失。有人可以告诉我我的索引是否被错误使用?
这是我的代码:
[frase, fs] = audioread('frase.wav');
soundsc(frase, fs);
S_fft = fft(frase);
N = length(frase);
F = (0:(N-1))/N*fs;
figure, plot(F, abs(S_fft));
% Remove the ugly frequency
S = S_fft;
zero = zeros(size(S));
S(200:400) = zero(200:400);
S(end-2*310:end-310) = zero(end-2*310:end-310);
figure, plot(F, abs(S));
这里是得到的光谱:
答案 0 :(得分:1)
我没有您的 frase.wav
文件,因此我以44100 Hz的采样率使自己成为两个频率分别为5 kHz和15 kHz的文件。我认为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');
结果是