Хорошо, здесь есть множество вопросов, и много материала для чтения на google, но я почему-то не могу это понять. Я хочу получить основную частоту сегмента речи. Основные шаги должны быть:Как выполнить кепструм для определения высоты тона
- взять БПФ оконного сигнала
- преобразование FFT от прямоугольного до полярных координат (так что вы можете получить величину)
- отбрасывать информацию о фазе
- взять квадрат, то натуральный логарифм каждого бина величины
- взять другой FFT (или некоторые источники говорят, взять обратный FFT?)
Вот как я реализовал это в AS3:
var signal:Vector.<Number> = my1024PointSignal; // an audio signal 1024 samples long
var imx:Vector.<Number> = new Vector.<Number>(signal.length); // 1024 point vector to hold imaginary part of fft
hammingWindow(signal); // window it
zeroFill(imx); // fill imx with zeros
FFT(signal, imx); // convert signal into real and imaginary components of fft
toPolar(signal, imx); // convert fft to polar coordinates
// square each bin, and take the log of each bin, discard phase
for (var i:int = 0, l:int = signal.length; i < l; i++) {
signal[i] = Math.log(Math.pow(signal[i], 2));
imx[i] = 0;
}
FFT(signal, imx); // or maybe inverseFFT(signal, imx), i don't know
Теперь, когда я делаю это и конец, принимая FFT, когда я сюжет его бины, как представляется, в обратном порядке? Я также вижу больший пик на второй гармонике, чем на фундаментальной. Когда я делаю это и беру обратный БПФ, я получаю звуковой сигнал, который выглядит отраженным вокруг N/2, и снова пики кажутся обратными. Все это тоже довольно шумно. Что я делаю не так?
Вы знаете, в чем разница между окончание с IFFT и заканчивая БПФ? –
Извините за длинный пробел, раньше не видел вашего комментария. Посмотрите в редактировании. – ederwander