Có vẻ như bạn đang tính toán phổ bằng cách lấy trung bình 10 cửa sổ (không chồng lấp?) Để có độ lớn bình phương ở tần số 8192 hoặc 8193 (từ 0 đến Nyquist, nhưng một số thuật toán có thể giảm tần số Nyquist ở bin 8192).
Điều đầu tiên để kiểm tra là đỉnh nằm trong thùng bên phải. Bạn không nói tỷ lệ lấy mẫu là bao nhiêu, nhưng bin 743 sẽ gấp 743/16384 lần tốc độ lấy mẫu. Nếu tín hiệu thực sự ở mức 800 Hz, điều đó đặt F ở mức xấp xỉ 17640 mẫu / giây. Điều đó có vẻ sai. Tín hiệu kiểm tra của bạn có thể sẽ ở mức tiêu chuẩn, chẳng hạn như 8000, 16000, 22050, 32000, 44100 hoặc 48000. Đối với Fs = 22050, cực đại sẽ mạnh ở bin 800/25050 * 16384 = 594.
Một tiêu chí khác để kiểm tra là tổng năng lượng trong tín hiệu xấp xỉ như nhau ở cả hai miền thời gian và tần số. Đây là một ví dụ trong 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
Tín hiệu đầu vào x, bao gồm hai hình sin được lấy mẫu ở Fs = 22050 mẫu / giây, được phân thành 10 cửa sổ không chồng chéo có kích thước NFFT = 2048 mẫu. Lệnh gọi psd (mật độ phổ công suất) tính toán phổ y là trung bình của độ lớn bình phương của mười DFT 16384 điểm (thực tế là 8193 điểm vì x là giá trị thực).
Năng lượng miền tần số được tính toán có hệ số tỷ lệ là N / 16384 do hàm psd chia tỷ lệ y thành kích thước DFT thay vì tổng chiều dài tín hiệu. Đây có phải là vấn đề hay không phụ thuộc vào cách hệ thống của bạn xử lý bình thường hóa PSD. Một chuẩn hóa tùy chọn khác là chia tỷ lệ 1 / Fs. Điều này phù hợp với năng lượng với tín hiệu tương tự ban đầu. Các chuẩn hóa mặc định nên được ghi lại trong thư viện.