Я пытался выработать логику для этой задачи и планирую использовать исходный пакет KissFFT для выполнения быстрого преобразования Фурье. Пожалуйста, дайте мне знать, если это выглядит правильно:
- Выделить структуру БПФ, т.е.
kiss_fft_alloc(N,0,NULL,NULL)
ГдеN
размер окна я использую. Входной буфер будет массивомN
элементов типаkiss_fft_scalar
. Выходной буфер будет массивомN/2 + 1
элементов типаkiss_fft_cpx
. - Декодировать
N
(размер окна) количество образцов PCM. - Для каждой выборки PCM усредните амплитуду каждого канала (выборки без знака) и масштабируйте от 0 до 2 (разделите на 65536,0), сохраняя результат во входном буфере.
- Выполните управление окнами (т. Е. Hanning) для входного буфера.
- Выполните быстрое преобразование Фурье для входного буфера, сохраняя в выходной буфер. Поскольку я использую реальные значения в качестве входных данных, я могу использовать
kiss_fftr()
. - Для
N/2
выходных значений получите квадратичную величину преобразованных данных и преобразуйте значения в шкалу дБ по следующей формуле:10 * log10 (re * re + im * im)
- Нанесите
N/2
значения с шага 6. - Откажитесь от первой половины входного буфера, декодируйте следующие (размер окна / 2) выборки PCM и выполните масштабирование и управление окнами для данных. Это должно эффективно сдвинуть окно ввода и избежать необходимости повторной математической обработки обработанных образцов PCM.
- Перейдите к шагу 5, повторяя эти шаги, пока все образцы не будут обработаны.
- Освободите использованную память от
kiss_fft_alloc()
.
Было предложено вычесть значение из окна ввода перед выполнением БПФ, чтобы полученное значение постоянного тока имело нулевую величину. Должен ли я вычитать среднее или среднее значение из входных данных?
Кроме того, что я должен учитывать при выборе размера окна? Помимо того, что это должно быть четное число согласно инструкциям KissFFT, есть ли преимущество в использовании небольшого размера окна, т.е. это обеспечит лучший график? Я предполагаю, что большой размер окна уменьшает количество БПФ, которые должны быть выполнены, является ли это единственным преимуществом использования большого размера окна?
Заранее благодарим вас за любые советы, которые вы можете предоставить.