Вывод БПФ показывает неожиданную симметрию
Я бегу CFFT по сигналу. Вывод, кажется, показывает симметрию. Я знаю, что БПФ является симметричным, но код
arm_cfft_f32(&arm_cfft_sR_f32_len512, &FFTBuf[0], 0, 1);
arm_cmplx_mag_f32(&FFTBuf[0], &FFTMagBuf[0], FFT_LEN);
учитывает это, так как FFTMagBuf равен половине длины входного массива. Вывод, тем не менее, по-прежнему демонстрирует симметрию
стрелки указывают на мой свисток, который показывает красиво, в окружении большого шума. средний, вероятно, гармонический (мой свист - дерьмо). но левая и правая симметрия заметны.
Я использую диско-плату stm32f4, и сэмплы взяты из встроенного мем-микрофона, и каждый блок сэмплов (в данном случае 1024, чтобы получить фтф длиной 512) пропускается через окно Hann.
Я использую модифицированную версию spectrogramui.py Тони Диколы для визуализации.
1 ответ
Согласно документации arm_cmplx_mag_f32 вычисляет величину сложного сигнала. Вот почему FFTMagBuf должен быть в два раза меньше FFTBuf: оба массива содержат действительные числа, но сложные выборки состоят из двух вещественных чисел. Это не связано с симметрией БПФ.
Таким образом, выходной сигнал имеет ровно столько же отсчетов, сколько и входной.
То есть вы вычисляете комплексное БПФ реального сигнала, который имеет некоторую симметрию (вам также необходимо учитывать комплексное сопряжение), и вы берете величину, которая является симметричной. Конечно, сюжет тогда тоже симметричен.