Нахождение одной второй выборки преобразования Фурье в Matlab - PullRequest
0 голосов
/ 30 ноября 2011

Я пишу некоторый код 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)));

Когда я строю любую секунду файла, частоты не так велики, как должны. Я думаю, что мое индексирование может быть неправильным, но я не могу найти, где я пропустил.

1 Ответ

1 голос
/ 30 ноября 2011

Для БПФ с данными в 1 секунду результирующий диапазон частот составляет от 0 до FS / 2 для индексов от 0 до половины длины вашего БПФ. Другая половина, для реального ввода, является просто сопряженным симметричным отражением первой половины.

...