vagrantnotes
@vagrantnotes
Embedded-разработчик

Как правильно настроить FFT-преобразование на STM32F4?

Даже как-то неудобно задавать такие вопросы, но мне не помешает помощь людей, которые сталкивались с цифровой обработкой сигналов.

Итак, передо мной стоит тривиальная задача - обработать аудиосигнал с АЦП. Есть оцифрованный сигнал АЦП - по сути, массив из 800 точек (сигнал длительностью 100 мс, снятый с частотой дискретизации 8 кГц). Есть функция БПФ из библиотеки arm_math, которая обеспечивает высокую скорость обработки этого массива. Проблема в том, что мне не нравится то, что я получаю на выходе этого преобразования. Код:
/* Непосредственно комплексное БПФ-преобразование на 1024 точки */
	arm_cfft_f32(&arm_cfft_sR_f32_len1024, FFT_data, inversal_transform_flag, bit_reversr_flag);

	/* Рассчитываем амплитуду каждого спектра */
	arm_cmplx_mag_f32(FFT_data, freqs_magnitudes, FFT_SAMPLES_COUNT);


Полученный спектр амплитуд:
be7762c2378149efb64f453242418e81.png

Пока я не понимаю:
- в каком диапазоне частот находится полученный результат и чем это определяется?
- есть ли возможность настроить более узкий коридор и шаг частоты для преобразования?

Буду благодарен за помощь, совет и указание на направление поиска информации.
  • Вопрос задан
  • 3503 просмотра
Решения вопроса 1
gbg
@gbg
Любые ответы на любые вопросы
Какая-то фигня. Если вы сделали FFT 800 действительных значений, у вас должены получиться 800 комплексных значений, из которых нужно взять модуль (если вас интересуют амплитуды частот).

После взятия модуля вы должны получить картинку, симметричную относительно середины.

Итого, FFT дает вам частоты от 0 до половины частоты дискретизации. (Да, это вариация на тему аудиофильской теоремы Котельникова-Найквиста).

Чтобы сузить частотные полосы, нужно поднимать частоту дискретизации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы