Apakah pengambilan sampel sebelum korelasi silang tidak berguna?

12

Pertimbangkan kasus sederhana di mana dua sinyal dari dua sensor berbeda berkorelasi silang, dan waktu tunda kedatangan dihitung dari absissa puncak fungsi korelasi silang mereka.

Sekarang mari kita asumsikan lebih lanjut bahwa karena batasan dimensionalitas dari kedua antena dan batasan pada laju pengambilan sampel maksimum yang mungkin, penundaan maksimum yang dimungkinkan adalah D , yang sesuai dengan 10 sampel.

Masalah:

Karena kendala-kendala itu, penundaan perhitungan Anda dapat bervariasi dari nilai integer mana pun antara 0 dan 10 sampel, yaitu: 0D10 . Ini bermasalah karena apa yang saya inginkan adalah diskriminasi fraksional-keterlambatan dari penundaan antara dua sinyal yang menimpa antena saya, dan mengubah dimensi atau laju pengambilan sampel bukanlah suatu pilihan.

Beberapa pemikiran:

  • Secara alami, hal pertama yang saya pikirkan untuk kasus ini adalah meningkatkan sinyal sebelum melakukan korelasi silang. Namun saya pikir ini 'curang', karena saya tidak benar-benar menambahkan informasi baru ke dalam sistem.

  • Saya tidak mengerti bagaimana upsampling tidak 'menipu' dalam arti tertentu. Ya, kami merekonstruksi sinyal kami berdasarkan informasi frekuensi yang saat ini diamati, tetapi bagaimana ini memberi satu pengetahuan tentang di mana sinyal benar-benar dimulai antara, katakanlah, D=7 dan D=8 ? Di mana informasi ini terkandung dalam sinyal asli yang menentukan bahwa awal awal fraksional dari sinyal sebenarnya pada D=7.751 ?

Pertanyaan-pertanyaan):

  • Apakah ini benar-benar 'curang'?

    • Jika tidak, lalu dari mana 'informasi' baru ini datang?
    • Jika ya, lalu opsi lain apa yang tersedia untuk memperkirakan waktu penundaan fraksional?
  • Saya sadar akan mengacaukan hasil korelasi silang, dalam upaya mengumpulkan jawaban sub-sampel atas keterlambatan tersebut, tetapi apakah ini juga bukan bentuk 'kecurangan'? Mengapa berbeda dengan upsampling sebelum korelasi silang?

Jika memang itu masalahnya bahwa upampling tidak 'curang', lalu mengapa kita perlu meningkatkan laju sampling kita? (Bukankah memiliki laju pengambilan sampel yang lebih tinggi selalu lebih baik daripada menginterpolasi sinyal sampel rendah?)

Kelihatannya kemudian kita hanya dapat sampel pada tingkat yang sangat rendah dan interpolasi sebanyak yang kita inginkan. Apakah ini kemudian tidak membuat peningkatan laju sampel 'tidak berguna' dalam terang hanya interpolasi sinyal ke keinginan hati kita? Saya menyadari bahwa interpolasi membutuhkan waktu komputasi dan hanya memulai dengan laju sampel yang lebih tinggi tidak akan, tetapi apakah itu satu-satunya alasan?

Terima kasih.

Spacey
sumber
3
Saya ragu ada perbedaan dalam keakuratannya, karena jumlah informasinya sama, tetapi tentu saja lebih murah untuk melakukan interpolasi setelah korelasi silang hanya di wilayah yang diminati daripada meng-upgrade segalanya terlebih dahulu dan kemudian melakukan semua penggandaan ekstra itu.
Endolith
@endolith Poin bagus. Saya sekarang lebih jelas mengapa / bagaimana ini bekerja, dan ya, meningkatkan hasilnya akan menjadi cara untuk pergi dalam kasus ini.
Spacey

Jawaban:

12

Itu tidak curang, dan juga tidak menambahkan informasi baru. Apa yang Anda lakukan adalah hal yang sama seperti yang dilakukan LPF upampling mana pun - menambahkan nol dan kemudian merekonstruksi bentuk gelombang dengan informasi frekuensi yang sudah diketahui. Dengan demikian, tidak ada informasi baru, tetapi masih ada resolusi waktu yang lebih baik.

Upsampling hasilnya serupa- tidak ada informasi baru tetapi resolusi waktu yang lebih baik. Anda dapat melakukan sesuatu yang sangat mirip melalui interpolasi kuadratik .

Semua metode-upampling dan interpolasi polinomial-mendapatkan informasi mereka di mana puncak fraksional adalah dari kedua puncak itu sendiri dan tetangganya. Contoh gambar cepat. Puncak Seimbang

Garis biru pada gambar di atas adalah data korelasi silang yang saya simulasikan (meskipun bisa berupa hasil apa pun, bukan hanya korelasi silang). Ini adalah apa yang saya sebut puncak "seimbang" karena para tetangga simetris. Seperti yang Anda harapkan, interpolasi kuadratik yang dihasilkan (garis merah) menunjukkan bahwa puncak sebenarnya adalah nol.

Gambar di bawah ini, di sisi lain, menunjukkan puncak yang tidak seimbang. Harap dicatat bahwa tidak ada yang berubah dalam hasil kecuali untuk nilai dari dua tetangga terdekat. Ini menyebabkan interpolator, untuk menggeser estimasi puncak fraksinya. masukkan deskripsi gambar di sini

Manfaat samping yang bagus dari metode ini (interpolasi polinomial dan upsampling) adalah bahwa metode ini juga memberi Anda perkiraan nilai puncak yang sebenarnya, meskipun kami biasanya lebih tertarik pada lokasi.

Jika memang itu masalahnya bahwa upampling tidak 'curang', lalu mengapa kita perlu meningkatkan laju sampling kita?

Untuk memenuhi kriteria Nyquist.

Bukankah memiliki laju pengambilan sampel yang lebih tinggi selalu lebih baik daripada menginterpolasi sinyal sampel rendah?

Tidak. Dari sudut pandang teoretis, selama kriteria Nyquist dipenuhi, tidak masalah berapa tingkat sampelnya. Dari sudut pandang praktis, Anda biasanya menggunakan tingkat sampel serendah mungkin untuk mengurangi persyaratan penyimpanan dan beban komputasi, yang pada gilirannya mengurangi sumber daya yang diperlukan dan konsumsi daya.

Jim Clay
sumber
1
Fs
1
@Mohammad Ya dan tidak. Derau - baik dari hasil sendiri atau derau kuantisasi - pada akhirnya akan membuat peningkatan resolusi waktu menjadi tidak berarti. Namun, sampai saat itu, ya, peningkatan lebih banyak harus meningkatkan akurasi estimasi.
Jim Clay
1
catatan dan kode contoh untuk interpolasi kuadratik / parabola: gist.github.com/255291#file_parabolic.md dan beberapa metode interpolasi alternatif: dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
endolith
2
@JimClay Punya kesempatan untuk tidur di situ. Jelas sekarang - informasi itu selalu ada - hanya dikodekan dalam hubungan antara sampel sehingga untuk berbicara. Dan inilah yang sebenarnya digunakan poly-fitting dalam interpolasi. Dan karena sinyal terbatas-band, (yaitu, hanya dapat berubah begitu cepat dalam rentang waktu), hanya ada begitu banyak cara di mana ia dapat ada di antara sampel.
Spacey
8

Setiap sinyal bandlimited dapat diinterpolasi. Informasi tambahan "antara sampel" terkandung dalam sampel yang berdekatan ditambah fakta bahwa sinyal tidak terbatas sebelum pengambilan sampel (yang cenderung menyebarkan informasi di antara sampel yang berdekatan). Jika dua sinyal terbatas, maka korelasi-silangnya, maka korelasi silang juga dapat diinterpolasi. Upsampling hanyalah bentuk interpolasi, bentuk interpolasi yang sangat akurat untuk sinyal bandlimited; tetapi Anda bisa menggunakan interpolasi Sinc juga (keduanya bisa lebih akurat daripada interpolasi kuadratik atau parabola).

Interpolasi dapat menunjukkan puncak antar sampel. Jadi mungkin tidak sia-sia.

Jika Anda memiliki sinyal yang mengandung spektrum yang lebih luas, maka dapat berisi lebih banyak informasi. Pengambilan sampel dengan laju yang lebih tinggi akan memberikan lebih banyak informasi, tetapi hanya hingga di bawah setengah dari frekuensi batas pita baru, dan hanya jika sinyal tersebut mengandung konten frekuensi spektral yang sebenarnya berguna di atas batas pita lama, dan jika sekarang Anda dapat memperoleh tambahan ini spektrum dengan menggunakan proses band-limiting band baru yang lebih lebar atau filter, bukan yang lama lebih lossy. Pengambilan sampel data pada frekuensi yang jauh lebih tinggi dari sinyal yang sudah dibatasi untuk frekuensi yang jauh lebih rendah di bawah Fs / 2 hanya akan membeli Anda interpolasi, bukan konten informasi lagi.

Jika pengambilan sampel dikuantisasi, maka pengambilan sampel dengan laju yang lebih tinggi mungkin memberi Anda sebagian kecil dari LSB informasi lebih lanjut, karena dithering atau noise noise dari kesalahan kuantisasi. Tetapi ini tergantung pada rasio S / N dan akurasi sampler dan proses kuantisasi yang tepat yang digunakan dalam pengambilan sampel.

Jika dua sinyal tidak dibatasi secara tepat sebelum pengambilan sampel dan korelasi silang, maka tidak hanya upampling atau interpolasi yang dapat membeli hasil sampah, tetapi mungkin juga merupakan korelasi silang non-interpolasi asli.

hotpaw2
sumber
1
Terima kasih hotpaw2. Jadi apakah benar untuk mengatakan bahwa tidak masalah jika Anda meng-upample kedua sinyal dan kemudian berkorelasi, atau berkorelasi dan kemudian meng-upample hasilnya? Karena pembatasan-pita, kedua metode harus memberi Anda hasil yang sama?
Spacey
@Mohammad: Saya pikir itu mengandung informasi yang sama, tetapi karena interpolasi tidak sempurna, hasilnya akan sedikit berbeda tergantung pada implementasinya.
endolith
3

Saya pikir jawaban terbaik yang bisa saya berikan kepada Anda adalah: Anda memiliki semua sarana untuk mencari tahu sendiri. Buat contoh "mundur". Dengan menggunakan Matlab, mulailah dengan dua sinyal sampel dengan periode pengambilan sampel yang sangat kecil (sehingga mereka hampir merupakan sinyal waktu kontinu). Hitung korelasi silang, dan temukan puncaknya (jika itu yang Anda inginkan), yang dapat Anda lakukan dengan presisi tinggi. Kemudian, kurangi sampel kedua sinyal dan ulangi prosesnya. Bandingkan lokasi dan ketinggian puncak kedua dengan yang pertama. Saya yakin yang kedua akan lebih buruk. Peningkatan dari yang kedua ke yang pertama adalah apa yang Anda peroleh, jika Anda mencoba sebelum melakukan korelasi silang.

Untuk mengimbangi dengan cara yang benar, kedua sinyal harus dibatasi pita, dan Anda perlu mengetahui bandwidth tersebut. Informasi "baru" yang Anda sebutkan dalam pertanyaan Anda berasal dari sampel yang berdekatan, dan fakta bahwa sinyalnya terbatas.

Telaclavo
sumber
Terima kasih Telaclavo. Satu hal yang benar - benar tidak jelas bagi saya adalah, terminologi menjadi 'band-terbatas'. Saya tahu apa artinya, tetapi saya tidak mengerti mengapa itu disebutkan di sini. Sistem APA SAJA, kecuali mungkin suara 'terbatas-band' jadi mengapa itu disebut berulang-ulang dalam pengertian ini?
Spacey
3

Untuk menambahkan sedikit ke jawaban sebelumnya, Anda bisa mendapatkan yang setara dengan korelasi silang terbatas-band upampled dengan membuat variabel korelasi Anda menjadi non-integer.

τ

τ=argmaxτn=0N1f(n)g(n+τ)

Artinya, ia menemukan maksimum korelasi silang.

Variabel input adan bjelaskan dan untuk dan keduanya dianggap terbatas pita dan periodik dengan periode (pergeseran ini diterapkan dalam domain Fourier diskrit). dalam kisaran .f(n)g(n)n={0,1,...,N1}Nτ[N+1,N1]

Tujuannya adalah untuk menunjukkan bagaimana korelasi silang dapat dilakukan untuk non-integer , yang ditentukan oleh penutupan . Ini menggunakan array, yang menggambarkan rotasi fasor kompleks pada setiap frekuensi diskrit yang sesuai dengan pergeseran waktu . kemudian skala ini untuk setiap shift. Seharusnya jelas bahwa untuk mempertahankan sinyal waktu nyata, rotasi frekuensi negatif hanya kali rotasi frekuensi positif (untuk pasangan frekuensi yang sesuai).τcorrelate_pointomegaτ=1τ1

Satu seluk-beluk adalah bagaimana Anda memperlakukan sampel (frekuensi nyquist), karena ini dibagi antara band positif dan negatif. Solusi yang digunakan di sini adalah untuk interpolasi antara fasor rotasi positif dan fasor rotasi negatif (yang merupakan refleksi pada sumbu nyata), yang merupakan proyek baik satuan rotasi fasor ke sumbu nyata, yang merupakan fungsi cos (yang karena itu adalah nilai yang sesuai dengan frekuensi nyquist). Jelas nilai ini harus nyata untuk mempertahankan sinyal domain waktu nyata.N2piomega

Anda dapat menggunakan ini untuk menghitung korelasi silang untuk setiap nilai tepat yang sembarang dari . Hanya memanggil penutupan (yang dapat dikembalikan sebagai callable) dengan nilai apa pun dari yang Anda suka.ττ

import numpy
from numpy import fft
from scipy import optimize

def arg_max_corr(a, b):

    if len(a.shape) > 1:
        raise ValueError('Needs a 1-dimensional array.')

    length = len(a)
    if not length % 2 == 0:
        raise ValueError('Needs an even length array.')

    if not a.shape == b.shape:
        raise ValueError('The 2 arrays need to be the same shape')

    # Start by finding the coarse discretised arg_max
    coarse_max = numpy.argmax(numpy.correlate(a, b, mode='full')) - length+1

    omega = numpy.zeros(length)
    omega[0:length/2] = (2*numpy.pi*numpy.arange(length/2))/length
    omega[length/2+1:] = (2*numpy.pi*
            (numpy.arange(length/2+1, length)-length))/length

    fft_a = fft.fft(a)

    def correlate_point(tau):
        rotate_vec = numpy.exp(1j*tau*omega)
        rotate_vec[length/2] = numpy.cos(numpy.pi*tau)

        return numpy.sum((fft.ifft(fft_a*rotate_vec)).real*b)

    start_arg, end_arg = (float(coarse_max)-1, float(coarse_max)+1)

    max_arg = optimize.fminbound(lambda tau: -correlate_point(tau), 
            start_arg, end_arg)

    return max_arg
Henry Gomersall
sumber
1
Saya perlu memikirkan apakah pertanyaan Anda benar (dan saya tidak punya waktu sekarang). Cara saya memikirkannya adalah bahwa Anda menggeser kelompok penundaan sinyal Anda, yang dapat Anda lakukan dengan jumlah yang Anda suka. Ini persis sama dengan konvolusi melingkar dengan fungsi sinc dalam domain waktu, dengan sinc diimbangi dengan (tetapi masih disampel di lokasi yang sama dengan sinyal asli). Perlu dicatat bahwa dengan bilangan bulat , semua penyilangan nol garis sejajar dengan waktu sampel kecuali pada (di mana itu ), itulah sebabnya sinyal digeser secara sepele. τττ1
Henry Gomersall
Oh, pertanyaan Anda hilang! Tetap saja, saya akan meninggalkan jawabannya di sana.
Henry Gomersall
Terima kasih Henry - (Maaf karena menghapus pertanyaan saya, saya mencoba membuatnya lebih jelas! :-)). (Saya sedikit lambat pada serapan python tetapi bekerja di dalamnya). Ngomong-ngomong, ya, saya pikir saya mengerti metode Anda - dan saya pikir intinya terletak pada interpolasi dari fase-respons dari hasil korelasi silang diambil, dan nilai sesuai diuraikan dari sana. Mungkin saya perlu lebih banyak waktu untuk mencernanya, tetapi tetap menarik. Di mana / Mengapa Anda menggunakannya alih-alih waktu-domain interpolasi? Konteksnya mungkin membantu. Terima kasih! tau
Spacey
Itu adalah pengejaran yang naif terhadap kecepatan, meskipun saya senang diberi tahu bahwa ada algoritma interpolasi domain waktu yang lebih cepat. Dasar pemikiran saya adalah untuk melakukan pergeseran waktu non-integer dalam domain waktu, Anda akan memerlukan perkalian untuk melakukan konvolusi, versus menggunakan metode Fourier (atau sekitar itu ). Korelasi kemudian diambil dalam domain waktu dalam kedua kasus. Jika Anda mencoba melakukan resample, itu menurut saya adalah hal yang sangat lambat untuk dilakukan (dan saya akan melakukannya di domain Fourier juga!). N2N(logN+1)
Henry Gomersall
Juga, saya menemukan pemikiran dalam domain Fourier sebenarnya jauh lebih sederhana. Tapi mungkin itu tidak normal!
Henry Gomersall
2

Ada bukti intuitif bahwa peningkatan sebelum lintas-korelasi sama dengan melakukannya sesudahnya:

Korelasi silang adalah konvolusi dengan sinyal lainnya yang dibalik waktu. Pembalikan waktu tidak mempengaruhi bandwidth. Konvolusi adalah perkalian dalam domain frekuensi, yang juga tidak meningkatkan bandwidth. Jika sinyal asli dibatasi dengan benar, hingga setengah dari frekuensi sampling, maka akan terjadi pula hasil korelasi silang. Tidak ada aliasing yang diperkenalkan untuk merusak hasilnya. Interpolasi kemudian menghemat pekerjaan.

Olli Niemitalo
sumber