Я пытался выработать логику для этой задачи и планирую использовать исходный пакет 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, есть ли преимущество в использовании небольшого размера окна, т.е. это обеспечит лучший график? Я предполагаю, что большой размер окна уменьшает количество БПФ, которые должны быть выполнены, является ли это единственным преимуществом использования большого размера окна?
Заранее благодарим вас за любые советы, которые вы можете предоставить.
источник