Bagaimana Rata-Rata Respons Kompleks (dan Justifikasi)?


11

Saya mengembangkan perangkat lunak yang menghitung respons suatu sistem dengan membandingkan FFT sinyal input dan output. Sinyal input dan output dibagi menjadi windows dan, untuk setiap jendela, sinyal median dikurangi dan dikalikan dengan fungsi Hann. Respons instrumen untuk jendela itu adalah rasio FFT dari data yang diproses.

Saya percaya di atas adalah prosedur standar, meskipun saya mungkin menggambarkannya dengan buruk. Masalah saya ada pada bagaimana menggabungkan tanggapan dari banyak windows.

Sejauh yang saya bisa lihat, pendekatan yang benar adalah dengan rata-rata nilai kompleks, di semua jendela. Amplitudo dan respons fasa kemudian merupakan amplitudo dan fase dari nilai rata-rata dan kompleks pada setiap frekuensi:

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

dengan loop implisit di tempat frekuensi.

Tetapi saya telah diminta untuk mengubah ini untuk menghitung amplitudo dan fase di setiap jendela terlebih dahulu , dan kemudian rata-rata amplitudo dan fase di semua jendela:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

Saya berpendapat bahwa ini tidak benar karena sudut rata-rata adalah "salah" - rata-rata 0 dan 360 derajat adalah 180, misalnya, tetapi orang-orang yang bekerja sama dengan saya menjawab dengan mengatakan "OK, kami hanya akan menampilkan amplitudo".

Jadi pertanyaan saya adalah:

  • Apakah saya benar dalam berpikir bahwa pendekatan kedua umumnya tidak benar untuk amplitudo juga?
  • Jika demikian, apakah ada pengecualian yang mungkin relevan, dan yang dapat menjelaskan mengapa orang yang bekerja dengan saya lebih suka metode kedua? Sebagai contoh, sepertinya kedua pendekatan akan setuju karena kebisingan menjadi kecil, jadi mungkin ini merupakan perkiraan yang diterima untuk kebisingan rendah?
  • Jika pendekatan kedua tidak benar, apakah ada referensi meyakinkan dan otoritatif yang dapat saya gunakan untuk menunjukkan ini?
  • Jika pendekatan kedua tidak benar, apakah ada contoh yang bagus dan mudah dipahami yang menunjukkan ini untuk amplitudo (seperti rata-rata 0 dan 360 derajat untuk fase)?
  • Atau, jika saya salah, buku apa yang bagus untuk saya mendidik diri sendiri dengan lebih baik?

Saya telah mencoba untuk berpendapat bahwa rata-rata -1 1 1 -1 1 -1 -1 harus nol daripada 1, tetapi itu tidak meyakinkan. Dan sementara saya pikir saya bisa, dengan waktu, membangun argumen berdasarkan estimasi kemungkinan maksimum yang diberikan model kebisingan tertentu, itu bukan jenis alasan bahwa orang yang bekerja dengan saya akan mendengarkan. Jadi, jika saya tidak salah, saya perlu argumen yang kuat dari otoritas atau demonstrasi yang "jelas".

[Saya mencoba menambahkan lebih banyak tag, tetapi tidak dapat menemukan yang relevan dan tidak dapat mendefinisikan yang baru sebagai pengguna baru - maaf]


Alasan apa yang mereka berikan karena tidak menyukai metode Anda?
nibot

responsnya terlihat lebih halus ketika diplot dengan metode kedua. saya pikir ini karena, untuk kasus-kasus yang dilihat, tidak ada sinyal yang signifikan (pada f yang lebih tinggi), sedangkan pendekatan kedua memaksa sinyal "muncul" dari kebisingan. juga, berbagai masalah politik / komunikasi seperti yang Anda duga.
andrew cooke

1
Sudahkah Anda mencoba memberikan beberapa test case? Ambil data acak dan filter melalui beberapa filter dengan respons frekuensi yang diketahui. Verifikasi bahwa estimasi fungsi transfer konvergen ke fungsi transfer yang diketahui.
nibot

tidak. saya belum. itu saran yang bagus. Terima kasih. jika disajikan dengan baik, saya bisa melihatnya meyakinkan.
andrew cooke

Jawaban:


13

Estimasi fungsi transfer biasanya diterapkan sedikit berbeda dari metode yang Anda gambarkan.

Metode Anda menghitung

F[y]F[x]

di mana angle brackets mewakili rata-rata yang diambil alih segmen data, dan fungsi windowing diterapkan ke setiap segmen data sebelum mengambil transformasi Fourier ( ).F

Implementasi yang lebih tipikal akan menghitung kerapatan spektral silang x dan y dibagi dengan kerapatan spektral daya x:

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

Di mana mewakili produk pointwise, dan konjugat kompleks.

Saya percaya ini untuk mengurangi efek segmen data di mana terlalu kecil.F[x]

Estimasi tidak koheren

Majikan Anda telah menyarankan agar Anda memperkirakan fungsi transfer menggunakan

|F[y]||F[x]|

Ini akan berhasil , tetapi memiliki dua kelemahan besar:

  1. Anda tidak mendapatkan informasi fase apa pun.
  2. Jika pengukuran Anda pada input dan output memiliki noise tambahan, maka estimasi fungsi transfer tidak akan benar.yxy

Metode Anda dan metode yang saya jelaskan mengelak dari masalah ini dengan menggunakan rata-rata yang koheren .

Referensi

Gagasan umum untuk menggunakan segmen yang tumpang tindih dan rata-rata untuk menghitung kepadatan spektral daya dikenal sebagai metode Welch . Saya percaya ekstensi untuk menggunakan ini untuk memperkirakan fungsi transfer juga sering dikenal sebagai metode Welch, meskipun saya tidak yakin apakah itu disebutkan dalam makalah Welch. Mencari kertas Welch mungkin merupakan sumber daya yang berharga. Sebuah monograf yang berguna pada subjek adalah buku Bendat dan Piersol, Data Acak: Prosedur Analisis dan Pengukuran .

Validasi

Untuk memvalidasi perangkat lunak Anda, saya sarankan menerapkan beberapa kasus uji, di mana Anda menghasilkan white noise Gaussian dan memasukkannya melalui filter digital dengan fungsi transfer yang diketahui. Masukkan input dan output ke dalam rutinitas estimasi fungsi transfer Anda dan verifikasi bahwa estimasi tersebut konvergen dengan nilai yang diketahui dari fungsi transfer.


ah! Terima kasih. saya akan menyelidiki / mencoba ini.
andrew cooke

@nibot Apa, tepatnya, panjang FFT yang digunakan di sini?
Spacey

Anda bisa menggunakan panjang apa saja. Panjang menentukan resolusi, dan, secara implisit (diberi jumlah data yang tetap untuk dikerjakan), jumlah rata-rata. Fft lagi = resolusi lebih baik tetapi juga kesalahan lebih besar karena memiliki rata-rata lebih sedikit.
nibot

ok, perbedaan lainnya adalah Anda memiliki <F (y) F * (x)> / <F (x) F * (x)> sedangkan Phonon memiliki <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
andrew cooke

Tidak ada gunanya menghitung <F (y)> <F * (x)> / (<F (x)> <F * (x)>), karena <F * (x)> akan segera dibatalkan. Saya pikir itu benar karena saya sudah menulisnya.
nibot

12

Selamat Datang di Pemrosesan Sinyal!

Anda benar sekali. Anda tidak bisa hanya mengukur besaran dan fase DFT secara terpisah, terutama fase. Berikut ini adalah demonstrasi sederhana:

z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

zz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

Pada kasus ini,

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

Juga,

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

|z|z

Sekarang, untuk melakukan apa yang Anda coba lakukan, saya sarankan yang berikut ini. Secara teoritis, Anda dapat menemukan respons impuls suatu sistem dengan membagi DFT dari output dengan DFT dari input. Namun, di tengah kebisingan Anda akan mendapatkan hasil yang sangat aneh. Cara yang sedikit lebih baik untuk melakukannya adalah dengan menggunakan estimasi respons impuls FFT dual-channel, yang berbunyi sebagai berikut (derivasi tidak disediakan di sini, tetapi Anda dapat menemukannya online).

Gi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NGH^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

()


2
Terima kasih; saya tidak yakin apakah akan memilih yang satu ini atau nibot sebagai jawaban terbaik - saya pikir mereka menganjurkan proses yang sama, jadi lanjutkan dengan rekomendasi buku, tetapi jika saya memiliki dua suara akan termasuk ini juga ...
andrew cooke

1
@ andrewcooke Ya, mereka berdua menganjurkan hal yang persis sama. Saya harap ini menjelaskan semuanya untuk Anda dan kolega Anda.
Telepon

ini sangat membantu saya (terima kasih lagi). pada hari Senin saya akan menyarankan bahwa saya (1) menerapkan metode yang disarankan dan (2) melakukan perbandingan dengan data (sintetis) yang diketahui untuk ketiganya. maka semoga pendekatan terbaik akan menang: o)
andrew cooke

@Phonon Berapa panjang FFT yang kita gunakan untuk menghitung FFT di sini? length_of_signal + max_length_of_channel + 1?
Spacey

@Mohammad Itu harus setidaknya dua kali panjang penundaan yang Anda harapkan. Ini disebabkan oleh simetri sirkular DFT, sehingga Anda akan mendapatkan nilai keterlambatan kausal dan non-kausal dalam hasil Anda.
Telepon

3

Ini adalah perbedaan antara rata-rata spektrum FFT yang koheren dan tidak koheren. Rata-rata koheren lebih mungkin untuk menolak kebisingan acak dalam analisis. Incoherent lebih cenderung menonjolkan besaran noise acak. Manakah dari ini yang lebih penting untuk laporan hasil Anda?


jika mereka memberikan hasil yang berbeda saya kira saya ingin perkiraan yang tidak bias. apakah tidak bias?
andrew cooke
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.