Здається, ви обчислюєте спектр, усереднюючи 10 вікон (не перекриваючись?), Щоб отримати величину в квадраті на частотах 8192 або 8193 (від 0 до Nyquist, але деякі алгоритми можуть знизити частоту Nyquist у біні 8192).
Перше, що потрібно перевірити, це те, що вершина знаходиться у правій відро. Ви не сказали, що таке показник вибірки, але bin 743 буде в 743/16384 більше, ніж показник вибірки. Якщо сигнал дійсно знаходиться на частоті 800 Гц, це ставить Fs приблизно 17640 зразків / секунду. Це здається неправильним. Ваш тестовий сигнал, ймовірно, буде зі стандартною швидкістю, наприклад 8000, 16000, 22050, 32000, 44100 або 48000. Для Fs = 22050, пік буде різко у біні 800/22050 * 16384 = 594.
Іншим критерієм, який слід перевірити, є те, що загальна енергія в сигналі приблизно однакова і в часовій, і в частотній областях. Ось приклад в Python:
In [1]: NFFT = 2048; N = 10*NFFT; n = arange(N); Fs = 22050
In [2]: x = 0.4*cos(2*pi*400/Fs*n) + 0.6*cos(2*pi*800/Fs*n)
In [3]: y,freqs = psd(x, NFFT=NFFT, Fs=Fs, pad_to=16384) # PSD by Welch's Method
In [4]: sum(x**2)/Fs # time-domain energy
Out[4]: 0.24149869319296949
In [5]: sum(y) * N/16384 # frequency-domain energy
Out[5]: 0.24148752834391252
Вхідний сигнал x, який складається з двох синусоїд, відібраних при Fs = 22050 проб / секунду, сегментований на 10 вікон, що не перекриваються, розміром NFFT = 2048 зразків. Заклик до psd (спектральна щільність потужності) обчислює спектр y як середнє значення величини в квадраті десяти 16384-бальних DFT (насправді це 8193 бали, оскільки x є реальною величиною).
Обчислена енергія частотної області має коефіцієнт масштабування N / 16384, оскільки функція psd масштабується y до розміру DFT замість загальної довжини сигналу. Невже це питання чи ні, залежить від того, як ваша система поводиться з нормалізацією PSD. Інша необов'язкова нормалізація - масштабування на 1 / Fs. Це відповідає енергії вихідному аналоговому сигналу. Нормалізації за замовчуванням повинні бути добре задокументовані в бібліотеці.