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