Memperkirakan waktu mulai nada meledak dalam kebisingan?

14

Teknik apa yang mungkin digunakan seseorang untuk memperkirakan waktu onset nada sinusoidal yang meledak dalam sinyal bising?

Asumsikan nada pecah memiliki frekuensi tetap yang diketahui (tetapi fase tidak diketahui) dan waktu naik sangat tajam, dan tujuannya adalah untuk memperkirakan waktu onset dalam lebih dari setengah waktu naik, dan / atau satu periode frekuensi nada , jika memungkinkan. Bagaimana teknik estimasi dapat berubah jika rasio S / N sangat rendah (jauh lebih sedikit dari 1)?

Ditambahkan: Asumsikan nada pecah memiliki panjang yang tidak diketahui, tetapi lebih panjang dari kelipatan kecil dari waktu naik dan periode frekuensi.

Ditambahkan: DFT / FFT menunjukkan kemungkinan adanya nada. Masalahnya adalah mencari tahu persis di mana di jendela FFT nada (atau mungkin beberapa nada meledak dari frekuensi yang sama) mungkin telah dimulai dalam jendela FFT, atau menentukan apakah nada saat ini mulai di luar jendela DFT, asalkan saya memiliki semua itu data domain waktu tambahan.

Akurasi deteksi pulsa radar lebih dekat dengan resolusi yang saya butuhkan, kecuali saya hanya memiliki keunggulan, karena nada memiliki panjang yang tidak diketahui, dan, selain waktu naik yang diketahui, tidak dimodifikasi. Filter pass band sempit mendistorsi waktu naik, dan dengan demikian membunuh resolusi estimasi kedatangan tepi.

hotpaw2
sumber
1
Bisakah kita berasumsi tentang kebisingan? Apakah itu diam? Apakah ini mengikuti segala jenis distribusi?
Phonon
2
Apakah alarm palsu dari detektor Anda tidak diinginkan? Apakah Anda memiliki spesifikasi tentang kemungkinan mendeteksi setiap pulsa dengan benar? Ini sangat mirip dengan (versi yang disederhanakan) pemrosesan sinyal radar front-end; Menemukan (mungkin dimodulasi) pulsa tertanam dalam kebisingan dan memperkirakan parameter mereka.
Jason R
1
Apakah Anda perlu melakukan ini secara real time, atau analisis offline?
nibot
2
@ hotpaw2: Apa yang tidak Anda sukai dari algoritma Goertzel sesuai jawaban SO ini ?
Peter K.
1
Algoritma Goertzel digunakan untuk deteksi nada, yang tampaknya seperti yang Anda cari. Output dari filter adalah perkiraan "kekuatan" dari sinyal pada frekuensi yang disetel. Pilih ambang batas. Jika output filter di atas ini, Anda telah mendeteksi nada. Tetapkan ambang Anda dengan tepat, dan Anda dapat mendeteksi awal nada lebih awal (dan juga lebih rentan terhadap alarm palsu).
Peter K.

Jawaban:

6

Seperti yang telah kita bahas di komentar, algoritma Goertzel adalah cara biasa untuk mendeteksi nada dalam noise. Setelah diskusi, saya tidak yakin apa yang Anda cari (Anda ingin waktu onset ), tetapi tampaknya ada kebingungan tentang bagaimana algoritma Goertzel dapat diterapkan untuk masalah Anda, jadi saya pikir saya akan menuliskannya sini.

Algoritma Goertzel

The Goertzel algoritma yang baik untuk digunakan jika Anda tahu frekuensi nada yang Anda cari (menyebutnya ), dan jika Anda memiliki ide yang masuk akal dari tingkat kebisingan sehingga Anda dapat memilih ambang deteksi yang tepat.fg

Algoritma Goertzel dapat dianggap sebagai selalu menghitung output dari SATU bin FFT:

y(n)=eȷ2πfgnk=0nx(n)e-ȷ2πfgk

di mana adalah frekuensi yang Anda cari.fg

Halaman Wikipedia memiliki cara yang lebih baik untuk menghitung ini.

Berikut ini adalah upaya (lemah) Scilab dalam mengimplementasikannya:

function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);

d1 = 0;
d2 = 0;

for n = 0:length(x)-1,
    y(n+1) = x(n+1) + realW*d1 - d2;
    d2 = d1;
    d1 = y(n+1);
    resultr(n+1) = 0.5*realW*d1 - d2;
    resulti(n+1) = imagW*d1;
end
endfunction

Pertimbangkan sinyal dengan dan ϕ = 4,4318752 :f=0,0239074ϕ=4.4318752

x=dosa(2πfn+ϕ)+ϵ(n)

ϵ(n)

Dalam contoh ini, nada mulai sepertiga dari jalan ke sinyal di indeks 1001.

fg=f-0,001

fg=f

Keempat jejak tersebut adalah:

  • xyfg=0,0229074
  • reskamultr2+reskamultsaya2
  • xyfg=0,0239074
  • reskamultr2+reskamultsaya2

Seperti yang dapat Anda lihat, kasus di mana nada yang kami minati berada di puncak sekitar 250. Jika kami menetapkan ambang deteksi sekitar setengah dari nilai ini (125), maka deteksi terjadi (nilai akar-kuadrat lebih besar dari 125 ) pada sekitar indeks 1450 --- 450 sampel setelah nada dimulai.

Ambang ini (125) tidak akan menyebabkan deteksi dalam kasus lain (untuk menjalankan ini, toh), tetapi nilai maksimum dari keluaran itu adalah 115,24, kami kami tidak dapat mengurangi ambang terlalu banyak tanpa mendapatkan deteksi yang salah.

Mengurangi ambang batas ke 116 akan menyebabkan deteksi dalam kasus yang sebenarnya (untuk menjalankan ini) di indeks 1401 ... tetapi kami menjalankan risiko lebih banyak alarm palsu.

masukkan deskripsi gambar di sini

Peter K.
sumber
Filter Goertzel yang berjalan lebih cocok jika seseorang hanya mencari perkiraan keberadaan dalam jendela panjang tetap. Goertzel yang berjalan tanpa jangka waktu kerugian / kerusakan mengubah bandwith-nya melebihi panjangnya, dan bandwidth yang lebih sempit nantinya memberikan perkiraan waktu kedatangan yang lebih buruk, lebih sensitif terhadap noise dan ambang kesalahan.
hotpaw2
@ hotpaw2: Benar. Anda dapat memperkenalkan "faktor lupa" agar Goertzel tetap berjalan, tetapi jika tidak, ia mengingat semuanya.
Peter K.
Ingat semuanya? Ini adalah FIR yang dapat diimplementasikan dalam bentuk rekursif. Apa yang saya lewatkan di sini?
Oliver Charlesworth
y(n)