Убедитесь, что вы используете величину результата БПФ, а не только действительную или мнимую составляющую сложного результата.
Как правило, когда синусоида с более длинной постоянной амплитудой подается на серию более коротких БПФ (STFT с окнами), результат величины будет постоянным, только если период синусоиды является точно целым периодическим по длине БПФ. например,
f_tone modulo (f_sampling_rate / FFT_length) == 0
Если вас интересует только величина одной выбранной частоты тона, алгоритм Гертцеля будет служить более эффективным фильтром, чем полное БПФ. И, в зависимости от настроек и ограничений длины, требуемых выбранной вами библиотекой FFT, может быть проще изменить длину Goertzel в соответствии с требованиями для вашей целевой частоты тона, а также необходимого компромисса между временным и частотным разрешением.