Я пишу некоторый код MATLAB, который читает в звуковом файле wav, а затем выполняет преобразование Фурье полученного сигнала. Я пытаюсь найти частоты в звуке (которые должны быть около 1000-4000 Гц) для 1-секундных сегментов звука, но мой файл возвращает мне частоты ближе к 500 Гц и ниже.
Мой код разбивает сигнал на секунды, а затем принимает преобразование Фурье каждую секунду. (в моем звуковом файле около 15 секунд).
Fs - частота дискретизации.
L - длина образца
[signal, Fs, bits] = wavread ('sound.wav');
L=length(signal);
f=Fs*linspace(0,1,L/2+1);
one_sec_sample=zeros(Fs,15);
Y_code = zeros(Fs,15);
for i=1:15
one_sec_sample(:,i) = signal(((i-1)*Fs+1):(i*Fs));
Y_code(:,i) = fft(one_sec_sample(:,i));
end
figure (1);
%plotting 1 second of the transform. Fs is 16000 for my sound.
plot(f(1:16000),abs(Y_code(1:16000)));
Когда я строю любую секунду файла, частоты не так велики, как должны. Я думаю, что мое индексирование может быть неправильным, но я не могу найти, где я пропустил.