ดูเหมือนว่าคุณกำลังคำนวณสเปกตรัมโดยเฉลี่ย 10 หน้าต่าง (ไม่ทับซ้อนกัน) เพื่อให้ได้ขนาดที่ 8192 หรือ 8193 ความถี่ (จาก 0 ถึง Nyquist แต่อัลกอริทึมบางตัวอาจลดความถี่ Nyquist ที่ bin 8192)
สิ่งแรกที่ต้องตรวจสอบคือยอดเขาอยู่ในถังขยะด้านขวา คุณไม่ได้บอกว่าอัตราการสุ่มตัวอย่างคืออะไร แต่ bin 743 จะเป็น 743/16384 คูณอัตราการสุ่มตัวอย่าง หากสัญญาณอยู่ที่ 800 Hz นั่นจะทำให้ Fs อยู่ที่ประมาณ 17640 ตัวอย่าง / วินาที ดูเหมือนว่าผิด สัญญาณทดสอบของคุณอาจอยู่ในอัตรามาตรฐานเช่น 8000, 16000, 22050, 32000, 44100 หรือ 48000 สำหรับ Fs = 22050 ยอดสูงสุดจะอยู่ที่ bin 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 เป็นค่าเฉลี่ยของขนาดกำลังสองของ DFT 16384 จุดสิบจุด (อันที่จริงแล้วคือ 8193 จุดเนื่องจาก x เป็นค่าจริง)
พลังงานโดเมนความถี่ที่คำนวณได้มีปัจจัยการปรับขนาดของ N / 16384 เนื่องจากฟังก์ชัน psd ปรับขนาด y เป็นขนาด DFT แทนที่จะเป็นความยาวสัญญาณทั้งหมด ปัญหานี้ขึ้นอยู่กับว่าระบบของคุณจัดการกับการปรับสภาพ PSD ให้เป็นปกติหรือไม่ การปรับมาตรฐานที่เป็นทางเลือกอื่นคือการปรับขนาด 1 / Fs สิ่งนี้จับคู่พลังงานกับสัญญาณอะนาล็อกดั้งเดิม ค่ามาตรฐานเริ่มต้นควรมีการบันทึกไว้อย่างดีในห้องสมุด