Если вам нужно проверить только одну частоту, вы можете просто вычислить соответствующую точку DFT . Алгоритм DFT - это O (N ^ 2), но алгоритм FFT использует промежуточные результаты для достижения O (NlogN) для вычисления DFT. Однако, если вам нужна только одна частотная выборка, вы можете просто рассчитать одну выходную выборку ДПФ и достичь производительности O (N).
Это можно сделать, посмотрев уравнение для ДПФ на странице википедии (я даже не буду пытаться набрать его здесь) и просто вычислить Xk для одного k, соответствующего Частота интереса. k - это просто индексирование на выходе ДПФ.
Отображение k (индексы выхода DFT) в реальные частоты (Гц) зависит от двух вещей:
- Частота дискретизации (например, 44100 Гц для CD Audio)
- Размер БПФ
Реальные частоты отображаются на k следующим образом:
F = k*Fs/N for k = 0 ... N/2-1 ((N-1)/2 for odd N)
или
k = F*N/Fs for F = 0Hz ... Fs/2-Fs/N
, где F
- частота в Гц, N
- размер БПФ, а Fs
- частота дискретизации (Гц). Некоторые вещи, на которые стоит обратить внимание:
- k является целым числом, поэтому не все частоты будут отображаться в целое число k. Найдите ближайший к
- Если вам нужно большее разрешение по частоте, увеличьте N.
- Сигналы, отобранные в Fs, способны точно представлять частоты вплоть до, но не включая Fs / 2 ( частота Найквиста ). Вот почему я показал, что отображение от k до Гц подходит только для половины выходных выборок. Я не буду вдаваться в то, что представляет вторая половина (на самом деле это будет зеркальное отображение первой половины для реального входного сигнала)
- Вывод DFT / FFT сложный. Скорее всего, вы хотите принять величину этого.
- Если вам нужно вычислить даже несколько выходных сигналов DFT, может быть лучше просто использовать доступную функцию FFT и получить все выходные выборки, а не вычислять только те выходные сигналы, которые вам нужны, с использованием DFT. Причина в том, что большинство алгоритмов FFT сильно оптимизированы, поэтому, даже если теоретически вы выполняете меньше работы, это может занять больше времени, чем FFT. Вы, вероятно, просто должны сравнить это, чтобы увидеть, какой подход лучше.
Я упустил немало других деталей для простоты, которые не должны иметь значения для вашего приложения