Mengapa transformasi Fourier dari siklus gelombang sinus tunggal bukan bilah tunggal?

12

Saya telah mencoba kode transformasi Fourier berbeda di luar sana pada gelombang sinus tunggal, dan semuanya menghasilkan spektrum terdistribusi dengan resonansi pada frekuensi sinyal ketika mereka secara teoritis harus menampilkan satu bar.

Frekuensi pengambilan sampel memiliki efek yang kecil (10kHz di sini), namun jumlah siklus tidak:

Satu siklus:

masukkan deskripsi gambar di sini

100 siklus:

masukkan deskripsi gambar di sini

100000 siklus:

masukkan deskripsi gambar di sini

Sepertinya transformasi fourier bertemu hanya untuk jumlah siklus yang tidak terbatas, mengapa begitu? Tidakkah seharusnya jendela waktu dari satu siklus menghasilkan hasil yang sama dengan siklus N?

Aplikasi: Ini karena penasaran dan juga karena saya ingin mendapatkan seberapa besar respons langkah sistem urutan pertama akan menggairahkan resonansi perakitan mekanis. Oleh karena itu saya memerlukan transformasi Fourier yang akurat dari tanggapan ... Yang saya tidak percaya lagi. Apa yang bisa saya lakukan untuk meningkatkan akurasi, berdasarkan pada kasus "gelombang sinus"?

masukkan deskripsi gambar di sini

PS: Tangkapan layar khusus ini didasarkan pada kode di sini .

Tuan Mystère
sumber
6
Selain jawaban yang diterima, perhatikan bahwa tidak ada alasan untuk percaya bahwa transformasi Fourier diskrit-waktu (yang Anda hitung menggunakan DFT) akan menjadi dorongan untuk sinyal input yang merupakan salah satu periode dari sinusoid. Transformasi Fourier sinusoid yang kontinu adalah impuls, ya, tetapi durasinya sinusoid tidak terbatas. Ketika Anda membatasi sinyal dalam waktu, itu sama dengan mengalikan dengan fungsi jendela persegi panjang. Hasil domain frekuensi adalah konvolusi impuls dan transformasi Fourier dari jendela, yang pada dasarnya adalah apa yang Anda amati.
Jason R
Terima kasih atas komentarnya. Jadi, bagaimana Anda menjelaskan bahwa jika saya mengubah nomor NFFT ke panjang vektor, hasilnya adalah satu bar?
Tuan Mystère
1
Pertanyaan bagus. Ini terjadi karena asumsi yang melekat dalam DFT. Sinyal panjang-terbatas yang diberikan pada input DFT diasumsikan memanjang secara berkala di kedua arah dengan durasi yang tak terbatas. Oleh karena itu, ketika Anda memiliki jumlah integer siklus di dalam "aperture" DFT, Anda berakhir dengan transformasi sinusoid durasi tak terbatas: satu impuls. Ini sesuai dengan kasus kebocoran spektral nol persis, dan jarang terjadi dalam praktek.
Jason R

Jawaban:

30

Ini adalah artefak windowing.

Kode yang ditautkan menghasilkan sinyal sampel 10.000 dengan nol sehingga panjangnya adalah kekuatan dua.

%% Author :- Embedded Laboratory

%%This Project shows how to apply FFT on a signal and its physical 
% significance.

fSampling = 10000;          %Sampling Frequency
tSampling = 1/fSampling;    %Sampling Time
L = 10000;                  %Length of Signal
t = (0:L-1)*tSampling;      %Time Vector
F = 100;                    %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
...

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
...

Perhatikan bahwa dalam kode di atas, FFT diambil dengan ukuran FFT NFFTyang merupakan kekuatan berikutnya 2 lebih besar dari panjang sinyal (dalam hal ini, 16.384.) Dari dokumentasi Mathworksfft() :

Y = fft(X,n)mengembalikan n-point DFT. fft(X)setara dengan di fft(X, n)mana nukuran Xdalam dimensi nonsingleton pertama. Jika panjang Xkurang dari n, Xdiisi dengan nol trailing ke panjang n. Jika panjang Xlebih besar dari n, urutan Xterpotong. Kapan Xmatriks, panjang kolom disesuaikan dengan cara yang sama.

Ini berarti bahwa Anda tidak benar-benar mengambil FFT dari 'gelombang sinus murni' - Anda mengambil FFT dari gelombang sinus dengan sinyal datar setelahnya.

Ini setara dengan mengambil FFT dari gelombang sinus dikalikan dengan fungsi jendela persegi. Spektrum FFT kemudian merupakan konvolusi dari spektrum frekuensi gelombang sinus (fungsi impuls) dengan spektrum frekuensi gelombang persegi (sinc (f).)

Jika Anda mengubah L = 16,384sehingga tidak ada bantalan nol sinyal, Anda akan mengamati perfectFFT.

Kata kunci pencarian lebih lanjut: "Kebocoran Spektral", "Fungsi Jendela", "Jendela Hamming".


Sunting: Saya membersihkan beberapa materi yang saya tulis tentang topik ini di universitas, yang secara substansial lebih detail. Saya telah mempostingnya di blog saya .

Li-aung Yip
sumber
Itu tepat di depan wajahku selama ini. Bagus, Pak, saya baru saja mengubah nomor NFFT menjadi panjang vektor dan itu berhasil.
Tuan Mystère
1
@ MisterMystère: Lihat sunting untuk tautan ke materi yang relevan yang saya tulis di universitas. Penjelasan yang jauh lebih menyeluruh, termasuk gambar.
Li-aung Yip
(Meskipun saya lupa mengetik ulang rumus matematika - diperbaiki sekarang.)
Li-aung Yip
Hanya pengingat bahwa ada sedikit keuntungan untuk melapisi nextpow2 menggunakan algoritma FFT matlab, yang saya percaya adalah fftw (transformasi fourier tercepat di barat)
Scott Seidman