Mengapa kebocoran spektral muncul dalam FFT?

18

Saya sudah mencoba googling dan wikipedia-ing itu, tapi saya belum mendapatkan jawaban di luar 'itu karena frekuensi sinyal input berada di antara dua nampan'.

Saya mengerti bahwa inilah alasannya, tetapi apa yang tidak dapat saya pahami adalah mengapa kebocoran ini tampaknya meluas ke beberapa nampan yang berdekatan daripada hanya satu nampan yang berdekatan.

Untuk mengilustrasikan apa yang saya bicarakan, inilah beberapa data yang disimulasikan (kode di akhir posting): Frekuensi_10

Di atas adalah spektrum FFT (diplot pada skala log) dari gelombang sinus frekuensi 10. Laju sampling adalah satu, dan jumlah sampel adalah 100. Grafik telah bergeser FFT. Jelas hanya ada puncak di bin 10, dan sisanya ada di urutan kesalahan numerik, atau ada sekitar.

Freq_10_1

Ini adalah spektrum frekuensi pada frekuensi 10,1 yang dihasilkan. Jelas ada 'kebocoran' ke lebih banyak tempat sampah daripada sekadar tempat sampah yang berdekatan.

freq_10_5

Ini adalah plot untuk frekuensi 10.5.

Pertanyaan: Mengapa ada kebocoran ini, dan mengapa itu menyebar ke semua tempat sampah lainnya, daripada ke tempat sampah yang berdekatan?


Kode, untuk siapa saja yang tertarik (kode Python)

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()

Saya mengubah xFreqnilainya dari 10.0menjadi 10.5, dll.

Kitchi
sumber
Setiap sinyal yang tidak pas dengan panjang jendela FFT menghasilkan diskontinuitas ketika Anda membungkusnya. Diskontinuitas, seperti fungsi impuls atau langkah, mengandung beberapa frekuensi.
endolith

Jawaban:

12

FFT memiliki panjang yang terbatas, dan karenanya merupakan jendela persegi panjang default pada aliran data. Jendela dalam domain waktu menghasilkan lilitan dalam domain frekuensi dengan transformasi jendela. Perhatikan bahwa transformasi jendela persegi panjang adalah fungsi Sinc (sin (x) / x), yang memiliki lebar tak hingga. Ini bukan hanya lebar 2 sampah. Jadi riak fungsi Sinc akan muncul sebagai "kebocoran" jauh dari puncak spektral yang tidak sempurna secara periodik dalam panjang FFT.

Gambar di bawah ini menunjukkan sebagian respons frekuensi dari fungsi sinc. Ketika nada dipusatkan pada salah satu nampan, semua titik lainnya berbaris dengan nol dalam respons frekuensi. Jika tidak dipusatkan pada nampan maka itu seperti mengubah seluruh respons frekuensi, yang menyebabkan nampan lain jatuh pada bagian non-nol dari frekuensi respoonse.

masukkan deskripsi gambar di sini

Cara lain untuk melihatnya adalah bahwa FFT hanyalah sebuah bank filter, di mana setiap lantai stop-band filter memiliki banyak riak, dan tentu saja tidak terbatas dalam pelemahan lebih dari 1 bin dari frekuensi pusat. Beberapa jendela (von Hann, dll.) Selain persegi panjang memiliki band stop yang lebih rendah, yang merupakan salah satu alasan penggunaannya yang populer.

hotpaw2
sumber
1
Perhatikan bahwa apa yang disebut spektral "kebocoran" tidak muncul di FFT dari input periodik terpusat bin persis karena fungsi Sinc persis nol (antara perubahan tanda) di semua frekuensi pusat bin lainnya (sepenuhnya ortogonal dengan kernel filter dan Vektor basis FFT).
hotpaw2
Saya harap Anda tidak keberatan hasil edit. Jangan ragu untuk melemparkannya jika Anda tidak menyukainya.
Jim Clay
@ Jim Clay: Terima kasih untuk grafik yang ditambahkan. Saya tidak tahu bagaimana cara mengirimkannya dari iPhone saya.
hotpaw2
1
Terima kasih terima kasih terima kasih. Terima kasih karena TIDAK menjelaskan kebocoran dengan mengatakan, "FFT mengasumsikan bahwa urutan inputnya adalah berkala." Gagasan konyol tentang 'asumsi periodisitas', sayangnya, terulang terlalu sering dalam literatur DSP. [-Rick-]
Kadang-kadang, asumsi periodisitas input berguna, ketika melakukan sampling sinkron poros rotasi dengan panjang bingkai FFT (atau membuat contoh sintetis kelas), misalnya. Tetapi dengan audio (dll.), Bagian dan bingkai data jendela tidak terkait dengan panjang periodisitas lebih umum, membuat asumsi biasanya salah untuk bekerja di daerah tersebut.
hotpaw2
0

hotpaw2Jawabannya bagus tapi saya ingin sedikit menguraikan user5133komentar:

Terima kasih karena TIDAK menjelaskan kebocoran dengan mengatakan, "FFT mengasumsikan bahwa urutan inputnya adalah berkala." Gagasan konyol tentang 'asumsi periodisitas', sayangnya, terulang terlalu sering dalam literatur DSP

dan pada saat yang sama menjawab pertanyaan itu juga. Perhatikan bahwa saya mencatat ahli dalam bidang ini --- jangan ragu untuk berkomentar, memperbaiki atau mengkonfirmasi.

Z{1,2,...,N}

X(ω)=n=-x[n]e-sayaωn.

NNZ

Xk =def n=0N-1xne-2πsayakn/N,kZ
X(2πk/N)n{1,2,...,N}x[n]w[n]wn{1,...,N}

Tetapi transformasi Fourier dari suatu produk adalah konvolusi dari transformasi Fourier:

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

tulus

-w(f)e-jωtdt=-ττe-jωtdt=2τtulus(ωτ)

tulus

dan dipahami
sumber
sepertinya @ user5133 tidak berkeliaran lagi. tetapi rasa terima kasih Rick salah tempat: "Terima kasih karena TIDAK menjelaskan kebocoran dengan mengatakan, 'FFT mengasumsikan bahwa urutan inputnya berkala.' Gagasan konyol tentang 'asumsi periodisitas', sayangnya, terulang terlalu sering dalam literatur DSP. " Dia salah. DFT tentu saja secara berkala memperluas data panjang-terbatas yang diteruskan ke sana. DFT memang menganggap data yang diteruskan ke itu adalah satu periode dari urutan periodik.
robert bristow-johnson