เหตุใดการรั่วไหลของสเปกตรัมจึงเกิดขึ้นใน FFT


18

ฉันลอง googling และ wikipedia แล้ว แต่ฉันยังไม่ได้รับคำตอบนอกเหนือจาก 'เพราะความถี่ของสัญญาณอินพุตอยู่ระหว่างสองถังขยะ'

ฉันเข้าใจว่านี่คือเหตุผล แต่สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่การรั่วไหลดูเหมือนว่าจะขยายไปยังถังขยะติดกันหลายแห่งแทนที่จะเป็นถังขยะที่อยู่ติดกันเพียงถังเดียว

เพื่อแสดงสิ่งที่ฉันกำลังพูดถึงนี่คือข้อมูลจำลอง (รหัสที่ท้ายโพสต์): Freq_10

ด้านบนคือสเปกตรัม FFT (พล็อตในระดับบันทึก) ของคลื่นไซน์ของความถี่ 10 อัตราการสุ่มตัวอย่างคือหนึ่งและจำนวนตัวอย่างคือ 100 กราฟได้รับการเลื่อน FFT เห็นได้ชัดว่ามีเพียงจุดสูงสุดที่ bin 10 และส่วนที่เหลืออยู่ในลำดับของข้อผิดพลาดเชิงตัวเลขหรือที่นั่น

Freq_10_1

นี่คือสเปกตรัมความถี่ที่ความถี่ที่สร้างขึ้นที่ 10.1 เห็นได้ชัดว่ามี 'การรั่วไหล' ในถังขยะมากกว่าถังขยะที่อยู่ติดกันทันที

freq_10_5

นี่คือโครงเรื่องสำหรับความถี่ 10.5

คำถาม:ทำไมมีการรั่วไหลนี้และทำไมมันถึงขยายไปยังถังขยะอื่นทั้งหมดแทนที่จะเป็นถังขยะที่อยู่ติดกัน?


รหัสสำหรับทุกคนที่สนใจ (รหัสหลาม)

import numpy as np
import matplotlib.pyplot as plt

xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)

data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()

ฉันเปลี่ยนxFreqค่าจาก10.0เป็น10.5ฯลฯ


สัญญาณใด ๆ ที่ไม่พอดีกับความยาวหน้าต่างของ FFT จะสร้างความไม่ต่อเนื่องเมื่อคุณล้อมรอบ ความไม่ต่อเนื่องเช่นแรงกระตุ้นหรือฟังก์ชั่นขั้นตอนมีความถี่บางส่วน
endolith

คำตอบ:


12

FFT มีความยาว จำกัด จึงถือว่าเป็นหน้าต่างสี่เหลี่ยมเริ่มต้นบนสตรีมข้อมูล หน้าต่างในโดเมนเวลาส่งผลให้เกิดการแปลงในโดเมนความถี่ด้วยการแปลงของหน้าต่าง โปรดทราบว่าการแปลงของหน้าต่างสี่เหลี่ยมเป็นฟังก์ชัน Sinc (sin (x) / x) ซึ่งมีความกว้างไม่ จำกัด ไม่ใช่แค่ความกว้างเพียง 2 ถัง ดังนั้นระลอกของฟังก์ชั่น Sinc จะปรากฏขึ้นเป็น "การรั่วไหล" ไกลจากยอดสเปกตรัมใด ๆ ที่ไม่สมบูรณ์เป็นระยะในความยาวของ FFT

รูปภาพด้านล่างแสดงส่วนหนึ่งของการตอบสนองความถี่ของฟังก์ชั่น sinc เมื่อเสียงอยู่ตรงกลางของหนึ่งในถังขยะจุดอื่น ๆ ทั้งหมดจะเรียงกันเป็นโมฆะในการตอบสนองความถี่ หากไม่ได้อยู่กึ่งกลางบนถังขยะก็เหมือนกับการเลื่อนการตอบสนองความถี่ทั้งหมดซึ่งทำให้ถังขยะอื่น ๆ ตกอยู่ในส่วนที่ไม่เป็นศูนย์ของการตอบสนองความถี่

ป้อนคำอธิบายรูปภาพที่นี่

อีกวิธีในการดูคือ FFT เป็นเพียงแค่ตัวกรองธนาคารซึ่งชั้นหยุดวงดนตรีของตัวกรองแต่ละตัวมีระลอกคลื่นจำนวนมาก หน้าต่างบางบาน (von Hann และอื่น ๆ ) ที่ไม่ใช่รูปสี่เหลี่ยมผืนผ้าจะมีแถบหยุดที่ต่ำกว่าซึ่งเป็นเหตุผลหนึ่งที่ทำให้การใช้งานเป็นที่นิยม


1
โปรดทราบว่าสิ่งที่เรียกว่า "การรั่ว" ของสเปกตรัมไม่แสดงขึ้นใน FFT ของอินพุตที่มีช่องว่างตรงกลางเพราะฟังก์ชั่น Sinc นั้นเป็นศูนย์ (ระหว่างการเปลี่ยนแปลงเครื่องหมาย) ที่ความถี่ช่องเก็บอื่น ๆ ทั้งหมด เวกเตอร์พื้นฐาน FFT)
hotpaw2

ฉันหวังว่าคุณจะไม่สนใจการแก้ไข รู้สึกอิสระที่จะโยนมันถ้าคุณไม่ชอบมัน
Jim Clay

@Jim Clay: ขอบคุณสำหรับกราฟที่เพิ่มเข้าไป ฉันไม่ทราบวิธีการส่งจาก iPhone ของฉัน
hotpaw2

1
ขอบคุณขอบคุณขอบคุณ. ขอบคุณสำหรับการไม่อธิบายการรั่วไหลโดยการพูดว่า "FFT ถือว่าลำดับการป้อนข้อมูลเป็นระยะ" ความคิดโง่ ๆ ของ 'การสันนิษฐานว่าเป็นระยะเวลา' นั้นน่าเศร้าซ้ำไปซ้ำมาบ่อยครั้งมากในวรรณกรรมของ DSP [-Rick-]

ในบางครั้งสมมติฐานของการป้อนข้อมูลเป็นช่วงเวลาจะมีประโยชน์เมื่อทำการสุ่มตัวอย่างการหมุนเพลาแบบซิงโครนัสของความยาวเฟรม FFT (หรือสร้างตัวอย่างสังเคราะห์ในห้องเรียน) เป็นต้น แต่ด้วยเสียง (ฯลฯ ) การแบ่งส่วนและกรอบข้อมูลหน้าต่างที่ไม่เกี่ยวข้องกับความยาวของช่วงเวลาใดเป็นเรื่องปกติมากขึ้นทำให้สมมติฐานมักเป็นเท็จสำหรับการทำงานในพื้นที่เหล่านั้น
hotpaw2

0

hotpaw2คำตอบนั้นดี แต่ฉันต้องการอธิบายuser5133ความคิดเห็นเล็กน้อย:

ขอบคุณสำหรับการไม่อธิบายการรั่วไหลโดยการพูดว่า "FFT ถือว่าลำดับการป้อนข้อมูลเป็นระยะ" ความคิดโง่ ๆ ของ 'การสันนิษฐานว่าเป็นระยะเวลา' นั้นน่าเศร้าซ้ำไปซ้ำมาบ่อยครั้งมากในวรรณกรรมของ DSP

และในเวลาเดียวกันก็ตอบคำถามด้วย โปรดทราบว่าฉันทราบผู้เชี่ยวชาญในสาขานี้ --- โปรดแสดงความคิดเห็นแก้ไขหรือยืนยัน

Z{1,2,,N}

X(ω)=n=x[n]eiωn.

NNZ

Xk =def n=0N1xne2πikn/N,kZ
X(2πk/N)n{1,2,,N}x[n]w[n]wn{1,,N}

แต่การแปลงฟูริเยร์ของผลิตภัณฑ์คือการเปลี่ยนรูปฟูเรียร์:

F{fg}=F{f}F{g}

ดังนั้น DFT ของสัญญาณดั้งเดิมคือการแปลงของ DTFT ของมันเป็น "periodicized" กับการแปลงฟูริเยร์ของหน้าต่างสี่เหลี่ยม ... ซึ่งเป็นเพราะ (ในเฟรมต่อเนื่องและมีศูนย์กลางอยู่ที่ 0 ถึง ลดความซับซ้อน ... ):sinc

w(f)ejωtdt=ττejωtdt=2τsinc(ωτ)

การบิดด้วยจะสร้าง lobes ด้านที่สังเกต (ยกเว้นในบางกรณี)sinc


ดูเหมือน @ user5133 ไม่ได้แขวนอยู่อีกต่อไป แต่ความกตัญญูของริคนั้นถูกวางผิดที่: "ขอบคุณที่ไม่อธิบายการรั่วไหลโดยการพูดว่า 'FFT สมมติว่าลำดับการป้อนข้อมูลของมันเป็นระยะ' ความคิดที่โง่เขลาของ 'การสันนิษฐานว่าเป็นระยะเวลา' นั้นน่าเศร้าซ้ำไปซ้ำมาบ่อยครั้งในวรรณกรรมของ DSP " เขาเข้าใจผิด DFT แน่นอนที่สุดจะขยายข้อมูลที่มีความยาว จำกัด เป็นระยะ DFT จะถือว่าข้อมูลถูกส่งไปเป็นช่วงเวลาหนึ่งของลำดับตามช่วงเวลา
robert bristow-johnson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.