Menghitung turunan sinyal yang dihaluskan dengan menggunakan perbedaan dengan langkah yang lebih besar = berputar dengan jendela persegi panjang

9

Saya memiliki sampel sinyal di mana i = 0..n-1. Saya ingin mencari turunan pertama dari sinyal: f '(t).Δt:fi(ti=iΔt)

Pikiran pertama saya adalah memperkirakan ini dengan perbedaan utama:

f(ti)=f(ti+1)f(ti1)2Δt

Namun sinyal mungkin memiliki banyak noise frekuensi tinggi yang dapat menyebabkan fluktuasi cepat pada f '. Saya kira hal yang tepat mungkin untuk memperlancar sinyal dengan berbelit-belit dengan fungsi jendela misalnya, Hann dan kemudian menemukan turunan dari perbedaan.

Seorang kolega menyarankan cara yang lebih cepat untuk menemukan estimasi turunan yang lancar: gunakan perbedaan sentral atas sampel 2n, di mana n >> 1:

f(ti)=f(ti+n)f(tin)2nΔt

Ini tentu saja akan lebih cepat komputasi daripada pertama kali berkutat dengan fungsi jendela tetapi apakah ini solusi yang baik?

Jika kita membentuk jumlah:

S=2Δt[f(tin+1)+f(tin+2)+..+f(ti+n1)]

dan perluas setiap turunan berdasarkan perbedaan pusat dengan langkah :Δt

S=f(tin+2)f(tin)+f(tin+3)f(tin+2)+..+f(ti+n)f(ti+n2)

semua persyaratan kecuali dua pembatalan:

S=f(ti+n)f(tin)=2nΔtf(ti)

Karena itu:

f(ti)=1n[f(tin+1)+f(tin+2)+..+f(ti+n1)]

Jadi mengambil perbedaan pusat atas sampel 2n setara dengan pertama yang berbelit-belit dengan jendela persegi panjang ukuran 2n - 2 dan kemudian mengambil perbedaan pusat atas sampel +/- 1.

Seberapa "buruk" itu dengan jendela persegi panjang?

Jika kita mengambil FFT, ini akan menyebabkan "dering", tetapi kita tidak perlu mengambil FFT.

Terima kasih sebelumnya atas jawaban apa pun!

Andy
sumber

Jawaban:

4

Ini adalah pertanyaan sulit untuk ditangani secara umum. Perataan dengan jendela persegi panjang digunakan sepanjang waktu (sering disebut "moving average"), jadi itu tidak selalu menjadi masalah. Saya tidak yakin apa dering yang Anda maksudkan, mungkin sidelobe respon frekuensi jendela persegi panjang.

Diferensiasi pada dasarnya merupakan operasi jalan pintas; pembeda waktu kontinu yang ideal memiliki fungsi transfer:

H(s)=s

Sehingga respon besarnya adalah:

|H(jω)|=ω

Karena itu, gain dari pembeda meningkat secara monoton dengan frekuensi. Jika sinyal Anda mengandung noise frekuensi tinggi, maka itu bisa diperkuat dengan menerapkan pembeda. Untuk mengatasi ini, dua pendekatan jelas:

  • Rancang filter pembeda yang lebih canggih yang memiliki respons besaran linier yang diinginkan di atas bagian pita yang menutupi sinyal yang Anda minati, kemudian dengan tajam mengurangi frekuensi yang lebih tinggi. Anda bisa mendesain filter seperti itu menggunakan metode kuadrat-terkecil atau metode sampling frekuensi, misalnya.

  • Gunakan pendekatan berjenjang di mana Anda pertama kali menekan semua noise frekuensi tinggi yang Anda dapat menggunakan filter lowpass, kemudian ikuti dengan pembeda. Cakupan frekuensi pembeda tidak harus sekencang karena filter lowpass akan menghilangkan noise out-of-band.

Metode-metode ini seharusnya setara jika Anda menggunakan filter linear; Anda bisa menganggap pendekatan filter tunggal pertama sebagai kaskade pembeda dan filter lowpass. Seperti yang Anda catat, pendekatan perbedaan pusat dapat dimodelkan dengan cara ini. Sulit bagi siapa pun untuk mengatakan bahwa itu "buruk" tanpa sepengetahuan aplikasi Anda. Pikiran utama saya adalah bahwa itu "buruk" jika operasi perataan secara nyata mengurangi sinyal minat Anda, sehingga estimasi turunannya tidak lagi berguna. Namun, jika parameter sinyal sedemikian rupa sehingga Anda dapat memuluskan kebisingan tanpa secara nyata mengubah sinyal (yaitu jika sinyal terlalu berlebih-lebihan), maka itu bisa menjadi kemenangan.

Jason R
sumber