У меня есть БПФ результат. Они хранятся в двух double
массивах: массив реальной части и массив воображаемой части. Как определить частоты, которые соответствуют каждому элементу в этих массивах?
Другими словами, я хотел бы создать массив, в котором будут храниться частоты для каждого действительного и мнимого компонента моего БПФ.
c#
signal-processing
fft
Ранго
источник
источник
Ответы:
Первый двоичный элемент в БПФ - это постоянный ток (0 Гц), второй двоичный элемент - это
Fs / N
гдеFs
частота дискретизации иN
размер БПФ. Следующая корзина есть2 * Fs / N
. Чтобы выразить это в общих чертах, n-й бин естьn * Fs / N
.Таким образом, если ваша частота дискретизации,
Fs
скажем, 44,1 кГц, а размер вашего БПФN
равен 1024, то выходные лотки БПФ имеют вид:Обратите внимание, что для реального входного сигнала (все мнимые части равны нулю) вторая половина БПФ (ячейки от
N / 2 + 1
доN - 1
) не содержат полезной дополнительной информации (они имеют комплексную сопряженную симметрию с первымиN / 2 - 1
ячейками). Последняя полезная ячейка (для практического применения) имеет значение atN / 2 - 1
, которое соответствует 22006,9 Гц в приведенном выше примере. Контейнер atN / 2
представляет энергию на частоте Найквиста, т.е.Fs / 2
(= 22050 Гц в этом примере), но это, как правило, не имеет никакого практического применения, поскольку фильтры сглаживания обычно ослабляют любые сигналы при и вышеFs / 2
.источник
Посмотрите на мой ответ здесь .
Ответ на комментарий:
БПФ фактически вычисляет взаимную корреляцию входного сигнала с функциями синуса и косинуса (базисные функции) в диапазоне частот, расположенных на равных расстояниях. Для данного выхода БПФ существует соответствующая частота (F), как указано в ответе, который я разместил. Действительная часть выходной выборки - это взаимная корреляция входного сигнала с,
cos(2*pi*F*t)
а мнимая часть - это взаимная корреляция входного сигнала сsin(2*pi*F*t)
. Причина входного сигнал коррелирует сsin
иcos
функциями является для учета разности фаз между входным сигналом и базисными функциями.Взяв величину комплексного выхода БПФ, вы получите меру того, насколько хорошо входной сигнал коррелирует с синусоидами на наборе частот независимо от фазы входного сигнала. Если вы просто анализируете частотную составляющую сигнала, вы почти всегда берете величину или квадрат величины комплексного выхода БПФ.
источник
Я использовал следующее:
Входы:
i
: Корзина для доступаsamples
: Частота дискретизации в герцах (т.е. 8000 Гц, 44100 Гц и т. Д.)nFFT
: Размер вектора БПФисточник
samples
илиnFFT
. Поэтому, пожалуйста, сделайте это более объяснительным.i * samples / nFFT
. Почему лишнее2
есть? Я что-то упускаю?Выходные коэффициенты БПФ (для комплексного ввода размера N) имеют значения от 0 до N - 1, сгруппированные по частоте [НИЗКИЙ, MID, HI, HI, MID, LOW].
Я считаю, что элемент в k имеет ту же частоту, что и элемент в Nk, поскольку для реальных данных FFT [Nk] = комплексное сопряжение FFT [k].
Порядок сканирования от низкой до высокой частоты
Имеется [N / 2] +1 групп частот от индекса i = 0 до [N / 2], каждая из которых имеет
frequency = i * SamplingFrequency / N
Таким образом, частота в бункере FFT [k] равна:
источник
Частота вашего k- го FFT-результата равна 2 * pi * k / N.
источник