Что вы на самом деле делаете, когда используете ДПФ (или любое преобразование Фурье), так это измеряете, какая часть вашего сигнала «пересекается» с синусоидами определенных частот. Это делается путем суммирования произведения вашего сигнала с комплексным сопряжением волны любой частоты. Технически это называется внутренним продуктом, который представляет собой обобщение скалярного произведения и измеряет, насколько «близок» сигнал к другому. Поэтому, если вас интересует только одна частота, не берите все ДПФ, просто посмотрите на ту, которая вам нужна.
Я не уверен, какие у вас единицы измерения, поэтому я предполагаю, что вам нужен пик на частоте f0 = -0,08 Гц (если ваши единицы измерения другие, например, нормализованные по частоте дискретизации, вам нужно будет это учитывать) . Это соответствует комплексной экспоненте exp(2*pi*j*f0*t)
. Поскольку вы производите семплирование, ваше t является дискретным, поэтому t = n/fs
, где fs — частота дискретизации (в Гц).
# assuming you're using numpy arrays
w = exp(-2*pi*1j*f0*arange(len(signal))/fs)
peak = abs(sum(signal*w))
Существуют разные определения ДПФ; Я почти уверен, что numpy соответствует тому, что у меня есть выше. Дополнительный минус в экспоненте потому, что это комплексное сопряжение.
Обратите внимание, маловероятно, что w на самом деле является периодическим. Если количество выборок достаточно велико, это не имеет большого значения. Хорошая эвристика — не менее 10 периодов.
person
jpkotta
schedule
15.03.2016