Mengapa kita menggunakan jendela dalam domain waktu daripada FFT memodifikasi spektrum dan daripada FFT terbalik

16

Saya berpikir bahwa DSP akan dilakukan dengan menggunakan FFT bagian dari sinyal, memodifikasi sampel yang dihasilkan dari FFT (karena mereka mewakili spektrum sinyal kami + noise) dan menghapus sinyal yang tidak diinginkan dan daripada melakukan FFT terbalik untuk mendapatkan waktu representasi domain dari sinyal yang difilter (noise telah dihapus sekarang). Namun ini tidak dilakukan, sebaliknya kami melakukan semua pekerjaan dalam domain waktu menggunakan fungsi jendela. Mengapa?

Jika kita melipatgandakan fungsi jendela dalam domain waktu daripada kita menggabungkan respons frekuensi fungsi jendela dengan spektrum sinyal kita dalam domain frekuensi, bagaimana cara kerjanya? Maksud saya jika kita hanya melakukan semua pekerjaan di domain frekuensi dengan mengalikan sinyal kita dengan respon frekuensi filter, itu seperti menyaring kan? Namun di sini kita melakukan semua hal dalam domain waktu alih-alih menggunakan jendela.

-> Mari kita lihat dari mana kebingungan saya berasal. Untuk filter analog, mis. Low pass filter, kami memiliki respons frekuensi seperti pulsa ini. Ketika kita memfilter sinyal, kita secara efektif mengalikan spektrum sinyal kita dengan respons frekuensi seperti pulsa dari filter. Ini akan mengurangi semua frekuensi dalam sinyal kami di atas batas ke 0. Inilah cara kerja filter low pass pada dasarnya. Mengapa tidak melakukan hal yang sama dengan filter digital juga?

quantum231
sumber

Jawaban:

7

Windowing mengurangi kebocoran spektral.

Katakanlah Anda mulai dengan . Periode ini jelas 2 π / ω 0dosa(y)=cos(ω0t)2π/ω0 .

Tetapi jika tidak ada yang memberi tahu Anda bahwa periode adalah dan Anda secara membabi buta memilih rentang [ 0 , 1.8 π / ω 0 ] dan mengambil FFT dari gelombang terpotong ini, Anda akan mengamati komponen frekuensi di frekuensi lain yang semuanya palsu karena lompatan yang dibuat dengan menyalin-paste bentuk gelombang terpotong untuk periodisitas tidak benar-benar hadir dalam sinyal asli - itu adalah artefak dari pemotongan yang tidak beruntung yang tidak menangkap transisi antara periode dengan lancar. Idealnya hanya ada satu komponen spektral di ω = ω 02π/ω[0,1.8π/ω0]ω=ω0 .

Tujuan windowing dalam domain waktu adalah untuk mengurangi semua komponen spektral fiktif ini.

Joe
sumber
12

Windowing digunakan karena perhitungan DFT beroperasi pada ekstensi periodik tak terbatas dari sinyal input. Karena banyak sinyal aktual tidak periodik sama sekali, atau disampel pada interval yang berbeda dari periode aktualnya, ini dapat menghasilkan komponen frekuensi palsu pada 'tepi' buatan antara interval berulang, yang disebut kebocoran . Dengan terlebih dahulu mengalikan sinyal waktu-domain dengan fungsi windowing yang menjadi nol di kedua ujungnya, Anda membuat transisi yang mulus antara interval berulang dalam ekstensi periodik tak terbatas, sehingga mengurangi penciptaan komponen frekuensi buatan ini ketika kami mengambil DFT.

Makalah ini memberikan pandangan yang lebih mendalam pada fenomena ini, serta beberapa wawasan tentang efek fungsi windowing yang berbeda.

Sam Maloney
sumber
11

Saya pikir Anda membingungkan dua operasi yang berbeda.

Windowing di domain waktu dijelaskan oleh @sam, jadi saya tidak akan mengulanginya. Tetapi windowing tidak dilakukan untuk melakukan filtering. Penyaringan dengan mengalikan FFT sinyal dengan respons frekuensi filter sepenuhnya masuk akal dalam banyak situasi, dan memang dilakukan. Alternatif untuk penyaringan adalah konvolusi waktu-domain (yang berbeda dengan windowing). Ini memiliki kelebihannya sendiri, seperti beroperasi pada sinyal dalam 'waktu-nyata' karena diukur tanpa menunggu semuanya disimpan kemudian diubah.

Jadi untuk pertanyaan Anda, 'Mengapa tidak melakukan hal yang sama dengan filter digital?', Jawabannya adalah 'kami lakukan, ketika itu sesuai.'

lxop
sumber
Saya juga mendapat kesan, bahwa konvolusi dan windowing ikut campur dalam pertanyaan itu. Bagus, Anda menunjukkannya!
Deve
11

Ada beberapa jawaban bagus untuk pertanyaan ini. Namun, saya merasa bahwa satu poin penting belum sepenuhnya jelas. Salah satu bagian dari pertanyaan adalah mengapa kita tidak hanya menggandakan FFT dari sinyal dengan respons filter yang diinginkan. Misalnya, jika kita ingin memfilter sinyal kita, kita bisa saja nol semua komponen frekuensi lebih tinggi dari frekuensi cut-off yang diinginkan. Ini sebenarnya adalah aplikasi sederhana dari metode sampling frekuensi terkenal untuk merancang filter FIR. Masalahnya adalah kita hanya bisa nol komponen frekuensi diskrit yang dihitung oleh FFT. Kami tidak memiliki kendali atas apa yang terjadi di antara frekuensi-frekuensi diskrit ini. Ternyata versi penyaringan yang sederhana seperti itu hanya akan memberikan pelemahan stopband yang buruk (terlepas dari panjang FFT). Jika Anda memiliki akses ke matlab atau oktaf, itu

x=2*rand(1024,1)-1;
X=fft(x);
Y=X.*[ones(200,1);zeros(625,1);ones(199,1)]; % lowpass filter
y=real(ifft(Y)); % real() just to remove numerical errors
Y=fft(y,4096);
plot(20*log10(abs(Y(1:2048)))),axis([0,2048,-30,50])
Matt L.
sumber
6

Jika Anda tidak menggunakan jendela non-persegi panjang, maka hasil FFT sudah akan dililit dengan transformasi dari jendela persegi panjang default (Sinc berkala) sebelum melakukan penyaringan domain frekuensi. mis. Anda akan menerapkan dua filter, yang salah satunya mungkin tidak Anda inginkan.

Dengan windowing dalam domain waktu, sebelum FFT dan filtering frekuensi domain, Anda mengganti setiap filtering (disebut "kebocoran") yang dilakukan oleh windowing persegi panjang, dan dengan demikian tidak mendapatkan konvolusi filter tambahan yang tidak diinginkan.

Cara lain untuk melakukan ini adalah dengan menggunakan metode overlap-add atau overlap save pada windows yang berurutan, di mana efek dari satu jendela persegi dibatalkan oleh efek yang sama dari windows yang berdekatan.

hotpaw2
sumber
5

Jendela dalam domain waktu karena

  • kami dapat menjamin nol di tepi jendela
  • fungsi jendela memiliki ekspresi analitik yang bagus dalam domain spasial
  • banyak fungsi jendela memiliki spektrum berbentuk aneh yang sulit diperkirakan
  • hanya sejumlah sampel yang diperlukan (windowing dapat dilakukan saat sinyal masuk)

misal dari wikipedia

masukkan deskripsi gambar di sini

Memotong keras pergi ke nol fungsi windowing berarti dalam domain spektral mereka memiliki lobus samping yang pergi ke nol sangat lambat. Jika kita menghilangkan batasan ini, kita dapat memiliki fungsi yang kompak dalam domain spasial dan spektral, seperti filter Gaussian. Ini berarti Anda dapat memfilter melalui domain spektral tetapi itu membutuhkan seluruh sinyal untuk diketahui.

Jika Anda memiliki seluruh sinyal maka alternatif lain adalah menggunakan wavelet

geometrikal
sumber
2

Saya punya pertanyaan yang sama.

Konvolusi adalah jumlah integral / kumulatif dari sinyal domain waktu dikalikan dengan jendela. Ini tidak harus bingung dengan sinyal domain waktu "berjendela".

Akhir artikel ini banyak membantu saya.

Pada dasarnya dikatakan bahwa sinyal nyata terbatas dan tiba-tiba memotong sinyal nyata menghasilkan banyak frekuensi / artefak yang tidak diinginkan dalam domain frekuensi.

Untuk menghindari / meminimalkan artefak ini, Anda dapat menggunakan fungsi jendela yang halus (mis. Berbentuk lonceng) sehingga sampel Anda dimulai dan diakhiri dengan nol, alih-alih berakhir dengan beberapa nilai skalar bukan nol.

Potong mulus

Sampel berjendela di atas akan memiliki lebih sedikit artefak dalam domain frekuensi daripada sampel mentah di bawah ini.

Tiba-tiba terputus

Chandran Goodchild
sumber
1

Ada dua kategori luas yang terkait dengan FFT dan mereka adalah 1) cara yang efisien untuk menerapkan filter FIR, dan 2) Analisis Spektral.

Untuk Pemfilteran FIR, orang tidak perlu khawatir tentang windows dan tidak menggunakannya, kecuali jika jendela itu sesuai dengan filter, tetapi itu bukan hal yang umum dilakukan. Kebocoran bukanlah masalah.

Analisis Spektral adalah tempat seseorang menggunakan windows. Di sinilah Anda melihat sensor yang terpasang pada mesin industri besar dan mencoba mencari tahu apakah jauh di dalam ususnya, bantalan mengalami kegagalan. Bantalan menjerit karena mereka gagal tetapi kebisingan mereka biasanya jauh lebih rendah daripada suara lain yang dibuat mesin. Di sinilah kebocoran dan rata-rata masuk. Dengan nada yang kuat, kebocoran akan menghilangkan sinyal lemah yang kami cari beberapa tempat sampah. Ini meningkatkan sensitivitas Analisis Spektral terhadap sinyal lemah di hadapan sinyal kuat. Ada efek serupa ketika suara latar belakang miring. Informasi yang kami cari ada di domain frekuensi. Ini adalah masalah yang sama di RADAR, dan SONAR, dan Geofisika. Melihat sinyal yang lemah adalah tujuan.


sumber
1

Windowing dalam domain waktu diperlukan untuk menghindari frekuensi tunggal yang tidak persis pada tempat frekuensi untuk menyebar ke seluruh spektrum. Mungkin halaman ini membantu: http://www.sm5bsz.com/slfft/slfft.htm Linrad (proyek 20 tahun saya) menggunakan FFT berjendela, kemudian menerapkan filter dalam domain frekuensi (membuat nol apa yang tidak kita inginkan.) Terapkan jendela - jangan pergi tiba-tiba dari weigtht 1 ke berat 0 pada tempat frekuensi. Kemudian terapkan FFT mundur - tetapi sekarang pada jumlah poin yang jauh lebih kecil. Tidak perlu memasukkan semua tempat sampah yang kita tahu nol !! Sebagai resulr, kami mendapatkan fungsi waktu dengan ukuran yang jauh lebih kecil - itu artinya dengan laju pengambilan sampel yang jauh lebih rendah. Prosedur ini melakukan penyaringan dan penipisan dalam satu langkah. Ini sangat efisien jika seseorang ingin menyaring beberapa saluran secara bersamaan. Halaman muka linrad ada di sini: http://www.sm5bsz.com/linuxdsp/linrad.htm

sm5bsz
sumber