Ну, для меня это тоже не тривиально, но я так понимаю.Если я слишком упрощен, это просто для моей выгоды, я не хочу покровительствовать.
Обнуление результата, соответствующего частоте Найквиста:
IПредположим, что мы вычисляем прямое БПФ из 1024 входных выборок.На входе 44100 Гц это обычно верно в моем случае (но это не то, что делает AurioTouch, что я нахожу немного странным, но я не эксперт).Мне проще разобраться с конкретными значениями.
Учитывая 1024 (n) входных отсчетов, упорядоченных по мере необходимости (четные индексы «сначала, затем нечетные») {в [0], в [2], в [4]],…, В 1 , в [3], в [5],…}) (используйте vDSP_ctoz()
для упорядочения ввода)
Вывод FFT 1024 (n) входных отсчетов составляет 513 ((n / 2) +1) комплексных значений.т.е. 513 вещественных компонентов и 513 мнимых компонентов, всего 1026 значений.
Однако, мнимые [0] и мнимые [512] (n / 2) всегда, обязательно, ноль .Таким образом, поместив real [512] (действительный компонент частотного бина Найквиста) в мнимое [0] и забыв мнимое [512] - что всегданоль и может быть выведен, результаты упакованы в буфер длины 1024 (n).
Таким образом, чтобы возвращаемые результаты были действительными, вы должны по крайней мере установить мнимый [0] вернуться к нулю.Если вам требуются все 513 ((n / 2) +1) частотные бины, вам нужно добавить еще одно комплексное значение к результату и установить его таким образом ..
unpackedVal = imaginary[0]
real[512]=unpackedVal, imaginary[512]=0
imaginary[0] = 0
В AurioTouch iвсегда предполагал, что они просто не беспокоятся.С результатами n / 2, очевидно, удобнее работать, и по визуализатору вы вряд ли сможете сказать: - « О, смотрите, на частоте Найквиста отсутствует одна величина »
Используя документы Фурье-преобразования, объясняют упаковку
NB конкретные значения 1024, 513, 512 и т. Д. Являются примерами, а не фактическими значениями n, (n / 2) +1, n / 2 изAurioTouch.
Они уменьшают все на -128 дБ
Не совсем, диапазон выходных значений равен относительно количества входных выборок так что его нужно нормализовать.Масштаб равен 1,0 / (2 * inNumberFrames).
После масштабирования диапазон составляет -1,0 -> + 1,0 .Затем берется величина комплексного вектора (фаза игнорируется), давая скалярное значение для каждого частотного интервала между 0 и 1,0
Это значение затем интерпретируется как значение децибела между -128 и 0
Материал для рисования ... +80 / 64. ... * 120 ... ... я не уверен.Я могу быть совершенно неправ или это может быть ... художественная лицензия?