FFT dari gelombang sinus tidak datang seperti yang diharapkan yaitu titik tunggal

14

Plot sian adalah spektrum 50 Hz, dan magenta adalah gelombang sinus 50,1 Hz (memiliki amplitudo 0,7). Keduanya dijadikan sampel pada 1024 sampel / s. Saya melakukan FFT 1024 poin untuk mendapatkan spektrum ini.

Mengapa spektrum 50Hz hanya nilai tunggal? Mengapa sinus 50.1 Hz terdiri dari frekuensi lain selain dari 50.1 Hz; dari mana frekuensi baru ini berasal?

Saya tidak melakukan pemrosesan non-linear pada sinyal 50,1 Hz! Juga 50,1 Hz tampaknya memiliki amplitudo maksimum yang lebih kecil, yaitu bukan 0,7, padahal sebenarnya gelombang sinus yang saya hasilkan memiliki amplitudo 0,7.

Kenapa ini?

Dua spektrum, masing-masing untuk 50Hz dan 50.1Hz Diperoleh oleh perintah MATALB fft ();

gpuguy
sumber
Bisakah Anda memposting kode yang Anda gunakan untuk menghasilkan plot ini? Tebakan terbaik saya, adalah karena sinyal Anda sangat berdekatan, fft tidak dapat menyelesaikannya dengan baik. Itu, atau pengolesan spektral karena sampel tidak sesuai dengan frekuensi.
Tom Kealy
4
Jawaban di bawah ini benar. Istilah untuk apa yang Anda amati disebut kebocoran spektral , dan diamati ketika Anda menganalisis sinusoid yang frekuensinya tidak terletak tepat di tengah salah satu nampan keluaran DFT Anda.
Jason R
tolong bisa saya tahu apa yang Anda rencanakan terhadap apa yang Anda bisa dapatkan lonjakan Anda pada tanda 50Hz
Nazario_Jnr
Lihat jawaban ini untuk deskripsi terperinci tentang apa masalahnya dan bagaimana cara memperbaikinya.
Dilip Sarwate

Jawaban:

14

Sebenarnya jawaban Matt sudah memberikan satu pandangan tentang masalah di sini: DFT secara periodik tersirat dalam domain waktu dan frekuensi (lihat pertanyaan ini ). Dari parameter Anda, kami dapat menghitung bahwa periode pengamatan Anda adalah 1 detik. Itu berarti Anda mengamati 50 periode nada 50 Hz. Memperpanjang interval pengamatan secara berkala akan selalu menghasilkan gelombang sinus yang tak terlihat. Jika Anda menggunakan nada 50.1 Hz, Anda mengubah periode osilasi 50.1. Memperpanjang sinyal itu secara berkala akan menghasilkan fase melompat yang menyebabkan anak sungai spektral tambahan.

fs/NDFT=1024Hz/1024=1Hz

Kedua efek yang dijelaskan di atas berkontribusi pada spektrum yang Anda amati.

Deve
sumber
1
Itu masuk akal. Namun untuk lebih jelasnya kebocoran spektral yang Anda gambarkan adalah masalah dengan alat (FFT) untuk mengamati spektrum. Ini bukan cacat dalam sinyal. Berarti Jika saya 'mendengar' sinyal audio 50,1 Hz, itu akan muncul di telinga saya sebagai nada tunggal, dan bukan semacam 'suara'. Apakah saya benar?
gpuguy
1
Anda benar sekali. Ini menunjukkan betapa pentingnya untuk memahami apa yang sebenarnya dilakukan DFT agar dapat menafsirkannya dengan benar. Sebagai sidenote: apa yang ingin Anda "dengar" dalam implementasi aktual juga tergantung pada bagaimana Anda mengubah diskrit menjadi sinyal analog.
Deve
11

Ini adalah efek memotong atau membunyikan sinyal sinus. Anda harus memotong sedemikian rupa sehingga jika Anda menambahkan sinyal bergeser ke yang terpotong, itu akan tetap menjadi gelombang sinus asli.

Matt L.
sumber
6

Anda hanya akan mendapatkan satu titik FFT hasil tunggal untuk frekuensi sinusoid murni yang tidak dimodifikasi yang persis bilangan bulat periodik dalam aperture atau lebar FFT. Frekuensi lain dari sinusoid akan tampak berbelit-belit dengan transformasi (Sinc berkala) dari jendela default (persegi panjang).

50.1 Hz tidak persis periodik di jendela 1 detik FFT Anda.

Bin hasil FFT "kebocoran" lainnya atau frekuensi diperlukan untuk mewakili diskontinuitas yang dihasilkan antara batas jendela dengan sinyal apa pun yang tidak persis bilangan bulat periodik dalam lebar FFT. Ini karena semua vektor basis DFT persis bilangan bulat periodik dalam lebar DFT, dan dengan demikian tidak memiliki diskontinuitas tajam antara akhir dan awal vektor basis. Jadi setiap sinyal yang tidak memiliki karakteristik tersebut tidak dapat diwakili oleh hanya satu vektor basis DFT (dan konjugat kompleksnya), sehingga informasi tentang sisa sinyal harus pergi ke suatu tempat.

Karena energi total disimpan oleh transformasi FFT (teorema Parseval'a), energi dalam tempat sampah "kebocoran" mengambil dari tempat sampah puncak. Dengan demikian besarnya bin puncak harus lebih rendah.

hotpaw2
sumber
5

Saya yakin gelombang sinus Anda nol pada sampel pertama dan terakhir? Seharusnya tidak. Harus berbaris sehingga sampel berikutnya setelah sampel terakhir adalah nol, sehingga Anda dapat menyalin dan menempelkan salinan sinyal satu per satu dan mereka akan terlihat terus menerus, tanpa sampel duplikat. Mungkin menganggapnya seperti wallpaper desktop ubin, di mana satu sisi harus memenuhi tepi berlawanan saat ubin. :)

Lihat https://gist.github.com/endolith/236567 untuk contoh python:

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

Lihat bagaimana dua salinan sinyal cocok secara end-to-end untuk membuat gelombang kontinu:

masukkan deskripsi gambar di sini

Ketika ini terjadi, energi FFT terkandung seluruhnya dalam satu bin:

masukkan deskripsi gambar di sini

endolit
sumber
1
Saya memiliki masalah yang sama dengan OP. Itu dipecahkan berkat pengaturan titik akhir = Bendera salah. Saya pikir linespace adalah (tertutup, terbuka) secara default tetapi ternyata (ditutup, ditutup). Saya menemukan bug ini berkat kode Anda.
Trismegistos
-1

Ini terjadi karena Kebocoran Spektral dan Windowing. Respon ideal yaitu fungsi impuls adalah untuk gelombang sinus waktu kontinu. Ketika Anda mengambil DFT dari gelombang sinus diskrit di komputer digital, Anda pada dasarnya mengambil Fourier Transform dari jendela dan sampel sinus dan kemudian mengambil sampel dalam domain frekuensi. Ini menyebabkan kebocoran spektral. Rujuk: http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

Akshat
sumber