Tampaknya Anda menghitung spektrum dengan rata-rata 10 jendela (non-tumpang tindih?) Untuk mendapatkan besarnya kuadrat pada frekuensi 8192 atau 8193 (dari 0 hingga Nyquist, tetapi beberapa algoritma mungkin menjatuhkan frekuensi Nyquist di bin 8192).
Hal pertama yang perlu diperiksa adalah bahwa puncaknya berada di tempat sampah yang tepat. Anda tidak mengatakan berapa laju samplingnya, tetapi bin 743 akan menjadi 743/16384 kali laju sampling. Jika sinyal benar-benar di 800 Hz, yang menempatkan Fs di sekitar 17640 sampel / detik. Sepertinya itu salah. Sinyal uji Anda mungkin berada pada tingkat standar seperti 8000, 16000, 22050, 32000, 44100, atau 48000. Untuk Fs = 22050, puncaknya akan tajam di tempat sampah 800/22050 * 16384 = 594.
Kriteria lain yang perlu diperiksa adalah bahwa energi total dalam sinyal kira-kira sama di domain waktu dan frekuensi. Berikut ini contoh dalam 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
Sinyal input x, yang terdiri dari dua sinusoid sampel pada Fs = 22050 sampel / detik, disegmentasi menjadi 10 jendela non-tumpang tindih ukuran NFFT = 2048 sampel. Panggilan ke psd (kerapatan spektral daya) menghitung spektrum y sebagai rata-rata besarnya kuadrat dari sepuluh DFT 16384-titik (sebenarnya itu 8193 poin karena x bernilai nyata).
Energi domain frekuensi yang dikomputasi memiliki faktor penskalaan N / 16384 karena fungsi psd menskalakan y ke ukuran DFT alih-alih total panjang sinyal. Apakah ini masalah atau tidak tergantung pada bagaimana sistem Anda menangani normalisasi PSD. Normalisasi opsional lain adalah penskalaan dengan 1 / Fs. Ini cocok dengan energi dengan sinyal analog asli. Normalisasi standar harus didokumentasikan dengan baik di perpustakaan.