Apa fungsi jendela FFT yang bagus untuk menolak DC?

9

Saya menggunakan FFT untuk menganalisis apa yang pada dasarnya adalah amplop daya dari sinyal (lihat di sini untuk info tentang proyek yang mengandung), dan, karena angka daya selalu positif, untuk menghilangkan komponen DC saya ingin menggunakan jendela fungsi yang 50/50 positif dan negatif, vs fungsi semua-positif yang biasa.

Saya telah mengambil fungsi " flat top ", menghilangkan a0bias dan mengubahnya dari cosinus ke sinus, tetapi saya tidak yakin itu optimal (atau bahkan bermakna).

Ada saran?

Daniel R Hicks
sumber
9
kurangi saja rata-rata sebelum windowing?
endolith

Jawaban:

1

Turunan pertama dari fungsi jendela kontinu yang paling umum (von Hann, dll.) Akan menolak DC, namun masih akan memiliki respons frekuensi magnitudo yang serupa dengan fungsi jendela asli; jadi Anda masih bisa menggunakan kriteria "kebaikan" asli Anda untuk pemilihan jendela, jika tidak terkait dengan fase.

hotpaw2
sumber
2
Meskipun tanggapan ini sebagian besar benar, itu lebih merupakan komentar, jadi memperluasnya akan sangat berguna.
Telepon
Namun, ini memang menjawab pertanyaan saya.
Daniel R Hicks
1
Apakah ada alasan untuk melakukan ini daripada hanya mengurangi mean sebelum windowing?
nibot
Jika jawaban JasonR benar, maka gagasan menolak DC melalui fungsi jendela (dan masih mendapatkan estimasi spektral yang baik) tidak akan berfungsi.
nibot
@nibot: Kemungkinan alasannya adalah bahwa jumlah plus pengurangan tidak dimungkinkan (misalnya, tidak tersedia di beberapa pipa atau latensi perangkat keras tetap).
hotpaw2
7

Jika Anda khawatir melakukan analisis spektral pada sinyal dengan komponen DC besar, dan Anda ingin menekan puncak DC itu, maka fungsi jendela bukanlah yang Anda inginkan. Seperti beberapa jawaban lain yang dicatat, filter jalan pintas (atau, dilihat secara berbeda, filter takik dengan takik pada frekuensi nol) adalah solusi yang tepat.

Untuk memahami alasannya, Anda perlu memikirkan apa yang menerapkan fungsi jendela terhadap respons frekuensi setiap output DFT. DFT didefinisikan sebagai:

X[k]=n=0N-1x[n]e-j2πnkN

Salah satu interpretasi tentang bagaimana DFT bekerja adalah sebagai bank filter di frekuensi sama-spasi antara - f sN danfs-fs2 . Susun ulang jumlah di atas sebagai berikut:fs2

X[k]=n=0N-1xk[n]

dimana:

xk[n]=x[n]e-j2πnkN

Jadi, output DFT -th dihasilkan dengan terlebih dahulu mengambil sinyal input x [ n ] dan mengalikannya dengan eksponensial kompleks pada frekuensi - 2 π kkx[n] untuk menghasilkan sinyal yang dikonversi kurangxk[n]. Sinyal yang dihasilkan kemudian dijumlahkan melaluijendela sampel-Nuntuk menghasilkan output DFTX[k]. Ini secara efektif merupakan filter rata-rata bergerak (kadang-kadang disebut filter gerbong), yang respons impulsnya dapat digambarkan sebagai:-2πkNxk[n]NX[k]

b[n]={1, x=0,1,...,N-10, jika tidak

Respons magnitudo dari filter gerbong dapat ditemukan dengan mengambil transformasi Fourier diskrit-waktu (DTFT) dari respons impuls tersebut:

|H(f)|=|dosa(Nπffs)dosa(πffs)|

f

x[n]

X[k]=n=0N-1w[n]x[n]e-j2πnkN=n=0N-1w[n]xk[n]

xk[n]

|H(f)|=|W(f)|

W(f)w[n]x[n]

Jadi, jika Anda benar-benar hanya ingin membatalkan komponen DC sinyal, menghapusnya melalui beberapa jenis pra-pemrosesan, bukan jendela waktu-domain, adalah cara yang harus dilakukan. Anda dapat menggunakan filter lintasan linier tinggi dengan frekuensi cutoff yang sangat rendah atau kurangi perkiraan rata-rata dari sinyal terlebih dahulu, misalnya. Memilih antara metode-metode ini harus didasarkan pada apa kendala lain yang dimiliki sistem Anda.

Jason R
sumber
3

Saya tidak berpikir menggunakan fungsi jendela adalah cara yang baik untuk menghapus DC. Seperti yang disebutkan oleh endolith, metode yang umum adalah hanya mengurangi mean sebelum windowing. Pilihan lain adalah menerapkan filter high-pass ke sinyal Anda sebelum analisis, katakanlah, dengan frekuensi cutoff sekitar 10 Hz.

schnarf
sumber
Menerapkan filter high-pass bukanlah pilihan jika sinyal tidak ada dalam bentuk analog. Tapi saya percaya Anda (& endolith) benar bahwa mengurangi mean harus bekerja, terutama jika jendela juga digunakan yang menarik titik akhir ke nol. (Dan filter lulus tinggi akan membutuhkan cutoff yang lebih rendah, mengingat bahwa saya menganalisis sinyal ke mungkin 0,01 Hz.)
Daniel R Hicks
2
Menurut Anda mengapa Anda membutuhkan sinyal analog untuk menerapkan filter jalan pintas? Tentunya mungkin untuk membuat HPF digital.
Jason R
@JasonR - Saya akan mengakui bahwa saya cukup bodoh dalam hal-hal seperti itu (kursus sinyal saya 40 tahun yang lalu, hampir sebelum FFT, dkk), tetapi bagi saya tampaknya membuat filter digital high-pass I pertama-tama saya harus menghasilkan transformasi Fourier dari sinyal.
Daniel R Hicks
1
Sama sekali bukan itu masalahnya; Anda dapat menghasilkan filter highpass sama seperti lowpass, bandpass, dll. Bahkan, ada teknik untuk mengambil prototipe filter lowpass dan mengubahnya menjadi filter highpass yang memiliki respons analog. Sebagian besar perangkat lunak untuk desain filter (misalnya MATLAB) dapat digunakan untuk membuat semua jenis filter.
Jason R
1
Saya tidak yakin dari mana Anda mendapat kesan bahwa menerapkan filter jalan pintas memerlukan diferensiasi. Diferensiasi adalah operasi highpass, tetapi bukan implementasi yang cocok untuk filter highpass (karena respons frekuensinya adalah ramp, membuatnya memperbesar frekuensi yang lebih tinggi di mana noise sering muncul). The artikel Wikipedia pada filter highpass akan menjadi awal yang baik.
Jason R