Çapraz korelasyondan önce yukarı örnekleme işe yaramaz mı?


12

İki farklı sensörden gelen iki sinyalin çapraz korelasyonlu olduğu ve varış zamanının gecikme süresinin çapraz korelasyon fonksiyonlarının zirvesinin ekseninden hesaplandığı basit bir durumu düşünün.

Şimdi, her iki antenin boyutsallık kısıtlamaları ve mümkün olan maksimum örnekleme oranı üzerindeki kısıtlamalar nedeniyle , 10 örneğe karşılık gelen mümkün olan maksimum gecikmenin olduğunu varsayalım D.

Sorun:

Bu kısıtlamalar nedeniyle, hesaplanan gecikmeniz 0 ile 10 örnek arasındaki herhangi bir tam sayı değerinden farklı olabilir , yani: 0D10 . Bu sorunlu, çünkü gerçekten istediğim, antenlerime çarpan iki sinyal arasındaki gecikmenin kesirli-gecikmeli ayrımı ve boyutları veya örnekleme oranını değiştirmek bir seçenek değil.

Bazı düşünceler:

  • Doğal olarak, bu durum için düşündüğüm ilk şey, çapraz korelasyon gerçekleştirmeden önce sinyalleri örneklemek. Ancak bunun bir şekilde 'aldattığını' düşünüyorum, çünkü sisteme gerçekten yeni bir bilgi eklemiyorum.

  • Yukarı örneklemenin bir anlamda nasıl 'aldatma' olmadığını anlamıyorum. Evet, sinyalimizi şu anda gözlemlenen frekans bilgilerine dayanarak yeniden yapılandırıyoruz, ancak bu, bir sinyalin gerçekten nerede başladığını, örneğin D=7 ve nasıl bir bilgi verir D=8? Bu bilgi, sinyalin gerçek kesirli-gecikmeli başlangıcının aslında D = 7.751 olduğunu belirleyen orijinal sinyalde neredeydi ?D=7,751

Sorular):

  • Bu gerçekten 'aldatıyor' mu?

    • Değilse, bu yeni 'bilgi' nereden geliyor?
    • Evetse, kesirli gecikme sürelerini tahmin etmek için başka hangi seçenekler mevcuttur?
  • Gecikme için alt-örnek cevaplar toplamak amacıyla çapraz korelasyonun sonucunu örneklemenin farkındayım , ama bu da bir 'hile' biçimi değil mi? Çapraz korelasyondan önce neden örneklemeden farklıdır?

Gerçekten de örneklemenin 'hile' olmaması durumunda, neden örnekleme oranımızı arttırmamız gerekir? (Daha yüksek bir örnekleme oranına sahip olmak, bir örnekte düşük örneklenmiş bir sinyali enterpole etmekten daha iyi değil midir?)

O zaman çok düşük bir oranda örnek alabilir ve istediğimiz kadar enterpolasyon yapabiliriz. Bu durumda, örnekleme oranını arttırmak, sadece kalbimizin arzusuna bir sinyal vermek ışığında 'işe yaramaz' olmaz mı? İnterpolasyonun hesaplama zamanını aldığını ve sadece daha yüksek bir örnekleme oranıyla başlamanın olmayacağını anlıyorum, ama o zaman tek sebep bu mu?

Teşekkürler.


3
Doğrulukta herhangi bir fark olduğundan şüpheliyim, çünkü bilgi miktarı her iki şekilde de aynıdır, ancak çapraz korelasyondan sonra sadece ilgilenilen bölgede enterpolasyon yapmak her şeyi önce örneklemek ve sonra tüm bu ekstra çarpımları yapmaktan daha ucuzdur .
endolit

@endolith İyi puan. Şimdi bunun neden / nasıl çalıştığı konusunda daha netim ve evet, sonucu örneklemek bu durumda gitmenin yolu olacaktır.
Spacey

Yanıtlar:


12

Hile yapmıyor ve yeni bilgi de eklemiyor. Yaptığınız şey, herhangi bir örnekleme LPF'siyle aynıdır - sıfır ekleme ve daha sonra bilinen frekans bilgileriyle dalga formunu yeniden oluşturma. Bu nedenle, yeni bir bilgi yoktur, ancak yine de daha ince bir zaman çözünürlüğü vardır.

Sonuçta örnekleme benzerdir - yeni bilgi yoktur ancak daha ince zaman çözünürlüğüdür. İkinci dereceden enterpolasyon ile çok benzer bir şey yapabilirsiniz .

Tüm bu yöntemler - örnekleme ve polinom enterpolasyonu - fraksiyonel zirvenin hem zirvenin kendisinden hem de komşularından nerede olduğu hakkında bilgi alırlar. Hızlı bir resimsel örnek. Dengeli Tepe

Yukarıdaki resimdeki mavi çizgi, simüle edilmiş çapraz korelasyon verilerimdir (ancak bir çapraz korelasyon değil, herhangi bir sonuç olabilir). Ben buna "dengeli" zirve diyorum çünkü komşular simetrik. Tahmin edebileceğiniz gibi, sonuçta meydana gelen ikinci dereceden enterpolasyon (kırmızı çizgi) gerçek zirvenin sıfırda olduğunu gösterir.

Aşağıdaki görüntü ise dengesiz bir zirve göstermektedir. En yakın iki komşunun değerleri dışında sonuçta hiçbir şeyin değişmediğini lütfen unutmayın. Bu, enterpolatörün, kesirli zirve tahminini değiştirmesine neden olur. resim açıklamasını buraya girin

Bu yöntemlerin (polinom enterpolasyonu ve örnekleme) şık bir yararı, aynı zamanda size gerçek tepe değerinin bir tahminini vermesidir, ancak genellikle konumla daha fazla ilgileniyoruz.

Gerçekten de örneklemenin 'hile' olmaması durumunda, neden örnekleme oranımızı arttırmamız gerekir?

Nyquist kriterlerini karşılamak.

Daha yüksek bir örnekleme oranına sahip olmak, bir anlamda düşük örneklenmiş bir sinyali enterpole etmekten daha iyi değil midir?

Hayır. Teorik açıdan, Nyquist kriteri karşılandığı sürece, örnekleme oranının ne olduğu önemli değildir. Pratik bir bakış açısıyla, depolama gereksinimlerini ve hesaplama yükünü azaltmak için kaçabileceğiniz kadar düşük bir örnekleme oranına sahip olursunuz, bu da ihtiyaç duyulan kaynakları ve güç tüketimini azaltır.


1
Fs

1
@Mohammad Evet ve hayır. Sonuçların kendisinden veya nicemleme gürültüsünden gelen gürültü, zaman çözünürlüğünü arttırmayı anlamsız hale getirecektir. Bu noktaya kadar, evet, daha fazla örnekleme, tahminin doğruluğunu artırmalıdır.
Jim Clay

1
: kuadratik / parabolik enterpolasyon için notlar ve örnek kod gist.github.com/255291#file_parabolic.md : ve bazı alternatif enterpolasyon yöntemlerinin dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
Endolit

2
@JimClay Üzerinde uyumak için bir şansınız var. Şimdi açıktır - bilgi her zaman oradadır - sadece örnekler arasındaki ilişkide kodlanmıştır. Ve poli-fitting aslında enterpolasyonunda bunu kullanır. Ve sinyal bant sınırlı olduğu için (yani, sadece bir zaman aralığı içinde çok hızlı bir şekilde değişebilir), örnekler arasında var olabileceği çok fazla yol vardır.
Spacey

8

Herhangi bir sınırsız sinyal enterpole edilebilir. "Örnekler arasında" ek bilgi, bitişik numunelerde ve sinyalin örneklemeden önce band sınırında olması gerçeğidir (bitişik numuneler arasında bilgi yayma eğilimindedir). İki sinyal bant sınırındaysa, çapraz korelasyon olacaktır, bu nedenle çapraz korelasyon da enterpolasyonlu olabilir. Üst örnekleme, başka bir enterpolasyon biçimidir, sınırsız sinyaller için çok doğru bir enterpolasyon biçimidir; ancak Sinc enterpolasyonunu da kullanabilirsiniz (her ikisi de kuadratik veya parabolik enterpolasyondan daha doğru olabilir).

İnterpolasyon, numuneler arasında bir tepe noktası gösterebilir. Bu yüzden belki işe yaramaz.

Daha geniş spektrum içeren bir sinyalin varsa, daha fazla bilgi içerebilir. Böylece daha yüksek bir hızda örnekleme daha fazla bilgi sağlayacaktır, ancak yeni bant sınır frekansının sadece yarısından azına kadar ve sadece sinyal eski bant sınırının üzerinde gerçek faydalı spektral frekans içeriği içeriyorsa ve şimdi bu eki elde edebiliyorsanız yeni daha geniş bantlı bir bant sınırlama işlemi ya da filtre kullanarak, eski daha kayıplı olanı değil. Fs / 2'nin altında çok daha düşük bir frekansla sınırsız olan bir sinyalin çok daha yüksek bir frekansındaki örnekleme verileri, daha fazla bilgi içeriği değil, sadece enterpolasyon satın alır.

Örnekleme nicelendiyse, daha yüksek bir hızda örnekleme, nicemleme hatasının titremesi veya gürültü şekillendirilmesi nedeniyle size bir LSB daha fazla bilgi satın alabilir. Ancak bu, örnekleyicinin S / N oranına ve doğruluğuna ve örneklemede kullanılan tam niceleme işlemine bağlıdır.

İki sinyal örnekleme ve çapraz korelasyondan önce uygun şekilde sınırlanamazsa, hem örnekleme hem de enterpolasyon size bir çöp sonucu almakla kalmaz, aynı zamanda orijinal enterpole edilmemiş çapraz korelasyon da olabilir.


1
Teşekkürler hotpaw2. Bu nedenle, her iki sinyali de örneklendirip sonra ilişkilendirdiğiniz veya ilişkilendirdiğiniz ve daha sonra sonucu örneklendirmenin gerçekten önemli olmadığını söylemek doğru mu? Bant sınırlaması nedeniyle, iki yöntem size aynı sonuçları vermelidir?
Spacey

@Mohammad: Her iki şekilde de aynı bilgileri içerdiğini düşünürdüm, ancak enterpolasyon mükemmel olmadığından, uygulamaya bağlı olarak sonuçlar biraz farklı olacaktır.
endolit

3

Sanırım size verebileceğim en iyi cevap: kendiniz bulmak için tüm araçlara sahipsiniz. "Geriye doğru" bir örnek oluşturun. Matlab kullanarak, çok küçük örnekleme periyotlarıyla örneklenmiş iki sinyal ile başlayın (böylece neredeyse sürekli zaman sinyalleri olurlar). Çapraz korelasyonu hesaplayın ve yüksek hassasiyetle yapabileceğiniz zirveyi (eğer istediğiniz buysa) bulun. Ardından, her iki sinyali de aşağı doğru örnekleyin ve işlemi tekrarlayın. İkinci zirvenin yerini ve yüksekliğini birincisiyle karşılaştırın. Eminim ikincisi daha kötü olacak. Çapraz korelasyondan önce örnek alırsanız, ikinciden birinciye olan iyileşme kazanırsınız.

Doğru şekilde örneklemek için her iki sinyalin bant sınırlı olması ve bu bant genişliklerini bilmeniz gerekir. Sorunuzda bahsettiğiniz "yeni" bilgiler, bitişik örneklerden ve sinyallerin bantla sınırlı olmasından kaynaklanmaktadır.


Teşekkürler Telaclavo. Benim için gerçekten açık olmayan bir şey, 'bant sınırlı' terminolojisidir. Ne anlama geldiğini biliyorum, ama burada neden bahsedildiğini anlamıyorum. HERHANGİ bir sistem, muhtemelen gürültü hariç 'bant sınırlıdır', bu yüzden neden bu anlamda tekrar tekrar bahsediliyor?
Spacey

3

Önceki yanıtlara biraz eklemek için, korelasyon değişkeninizi tamsayı olmayan bir hale getirerek, örneklenmiş bant sınırlı çapraz korelasyona eşdeğer olabilirsiniz.

τ

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

Yani, çapraz korelasyonun maksimumunu bulur.

abf(n)g(n)n={0,1,...,N1}Nτ[N+1,N1]

τcorrelate_pointomegaτ=1τ1

Bir incelik, nasıl tedavi ettiğinizdeN2piomega

ττ

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

1
τττ1

Oh, sorunuz kayboldu! Yine de cevabı orada bırakacağım.
Henry Gomersall

tbiru

Daha hızlı bir zaman dilimi enterpolasyon algoritması olduğu söylenmekten memnuniyet duymakla birlikte, saf bir hız arayışıydı. Benim mantık o zaman etki alanında olmayan tamsayı zaman kayması yapmaktır, ihtiyacınız karşı, konvolüsyonunu gerçekleştirmek için çarpma NN-2N-(günlükN-+1)

Ayrıca, Fourier alanında düşünmeyi çok daha basit buluyorum. Ama belki bu normal değildir!
Henry Gomersall

2

Çapraz korelasyondan önce örneklemenin daha sonra bunu yapmaya eşdeğer olduğuna dair sezgisel bir kanıt vardır:

Çapraz korelasyon, zaman tersine çevrilmiş diğer sinyal ile evrişimdir. Zaman tersine çevirme bant genişliğini etkilemez. Konvolüsyon, aynı zamanda bant genişliğini arttırmayan frekans alanındaki çarpmadır. Orijinal sinyaller uygun şekilde bantla sınırlıysa, örnekleme frekansının yarısına kadar, çapraz korelasyon sonucu da olur. Sonucu mahvetmek için hiçbir yumuşatma yapılmamıştır. İnterpolasyon daha sonra işi kurtarır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.