Karmaşık Yanıtlar (ve Gerekçelendirme) Ortalama Nasıl?


11

Giriş ve çıkış sinyallerinin FFT'sini karşılaştırarak bir sistemin yanıtını hesaplayan bir yazılım geliştiriyorum. Giriş ve çıkış sinyalleri pencerelere bölünür ve her pencere için sinyaller medyandan çıkarılır ve bir Hann işlevi ile çarpılır. Bu pencere için cihaz yanıtı işlenen verilerin FFT'lerinin oranıdır.

Yukarıdakilerin standart prosedür olduğuna inanıyorum, ancak kötü bir şekilde tarif ediyor olabilirim. Benim sorunum birden çok pencereden yanıtları birleştirmek geliyor.

Görebildiğim kadarıyla, doğru yaklaşım tüm pencerelerde karmaşık değerleri ortalamaktır. Genlik ve faz tepkisi daha sonra her bir frekanstaki ortalama karmaşık değerin genliği ve fazıdır:

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))

frekans bölmeleri üzerinde örtülü döngüler.

Ama hesapla genlik ve her pencerede faza bunu değiştirmek istendi ilk ve tüm pencereleri genelinde sonra ortalama genlik ve fazlarda:

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

Bunun yanlış olduğunu savundum çünkü ortalama açılar "sadece yanlış" - ortalama 0 ve 360 ​​derecelik ortalama 180, ancak birlikte çalıştığım insanlar "Tamam, sadece genlik göstereceğiz" diyerek yanıt verdi.

Yani sorularım:

  • İkinci yaklaşımın genlikler için de genellikle yanlış olduğunu düşünüyor muyum?
  • Öyleyse, alakalı olabilecek ve birlikte çalıştığım insanların neden ikinci yöntemi tercih ettiğini açıklayabilecek herhangi bir istisna var mı? Örneğin, iki yaklaşım gürültü küçüldükçe kabul edecek gibi görünüyor, bu yüzden belki de bu düşük gürültü için kabul edilen bir yaklaşımdır?
  • İkinci yaklaşım yanlışsa, bunu göstermek için kullanabileceğim ikna edici, yetkili referanslar var mı?
  • İkinci yaklaşım yanlışsa, bunu genlik için gösteren iyi, anlaşılması kolay örnekler var mı (faz için ortalama 0 ve 360 ​​derecenin yaptığı gibi)?
  • Alternatif olarak, ben yanlış duyuyorum ne beni daha iyi kendimi eğitmek için iyi bir kitap olurdu?

-1 1 1 -1 1 -1 -1 ortalamasının 1 yerine sıfır olması gerektiğini savunmaya çalıştım, ancak bu ikna edici değildi. Ve zamanla, belirli bir gürültü modeli göz önüne alındığında maksimum olasılık tahminine dayanan bir argüman oluşturabileceğimi düşünürken, birlikte çalıştığım insanların dinleyeceği türden bir mantık değil. Yani, yanılmıyorsam, otoriteden güçlü bir tartışmaya ya da "açık" bir gösteriye ihtiyacım var.

[Daha fazla etiket eklemeye çalıştım, ancak alakalı olanları bulamıyorum ve yenilerini yeni bir kullanıcı olarak tanımlayamıyorum - özür dilerim]


Yönteminizi beğenmemek için hangi nedeni veriyorlar?
nibot

ikinci yöntemle çizildiğinde yanıt daha yumuşak görünür. sanırım bunun nedeni, bakılan vakalar için (daha yüksek f'de) önemli bir sinyal yokken, ikinci yaklaşım bir sinyali gürültüden "görünmeye" zorlar. Ayrıca, tahmin edebileceğiniz gibi çeşitli politik / iletişim sorunları.
andrew cooke

1
Bazı test örnekleri sunmayı denediniz mi? Rastgele veri alın ve bilinen frekans cevabına sahip bazı filtreler aracılığıyla filtreleyin. Transfer fonksiyonu tahmininin bilinen transfer fonksiyonuna yakınsadığını doğrulayın.
nibot

Hayır. yapmadım. bu iyi bir öneri. Teşekkürler. eğer iyi sunulursa, ikna edici olduğunu görebiliyordum.
andrew cooke

Yanıtlar:


13

Aktarım işlevi tahmini genellikle tanımladığınız yöntemden biraz farklı uygulanır.

Yönteminiz hesaplar

F[y]F[x]

F

Daha tipik bir uygulama x ve y'nin çapraz spektral yoğunluğunun x'in güç spektral yoğunluğuna bölünmesini hesaplayacaktır :

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

F[x]

Tutarsız tahmin

İşvereniniz, transfer fonksiyonunu kullanarak tahmin etmenizi önerdi:

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

Bu işe yarayacak , ancak iki büyük dezavantajı var:

  1. Herhangi bir faz bilgisi almazsınız.
  2. xy

Sizin yönteminiz ve tarif ettiğim yöntem, tutarlı ortalamalar kullanarak bu sorunları atlatmaktadır .

Referanslar

Güç spektral yoğunluklarını hesaplamak için üst üste binen, ortalama segmentleri kullanma fikri genel olarak Welch'in yöntemi olarak bilinir . Transfer fonksiyonlarını tahmin etmek için bunu kullanma uzantısının Welch'in yöntemi olarak da bilinmesine rağmen, Welch'in makalesinde bahsedilip belirtilmediğinden emin değilim. Welch'in makalesine bakmak değerli bir kaynak olabilir. Konuyla ilgili yararlı bir monograf Bendat ve Piersol'ün Rastgele Veri: Analiz ve Ölçüm Prosedürleri adlı kitabıdır .

onaylama

Yazılımınızı doğrulamak için, Gauss beyaz gürültüsü oluşturduğunuz ve bilinen bir aktarım işlevine sahip bir dijital filtreden geçirdiğiniz birkaç test vakası uygulamanızı öneririm. Girdileri ve çıktıları aktarım işlevi tahmin rutininize besleyin ve tahminin aktarım işlevinin bilinen değerine yakınsadığını doğrulayın.


Ah! teşekkür ederim. Bunu araştıracağım / deneyeceğim.
andrew cooke

@nibot Burada ne, kesin, FFT uzunlukları kullanılıyor?
Spacey

Herhangi bir uzunluğu kullanabilirsiniz. Uzunluk, çözünürlüğü ve dolaylı olarak (çalışmak için sabit miktarda veri verildiğinde) ortalama sayısını belirler. Daha uzun fft = daha iyi çözünürlük ancak daha az ortalamaya sahip olması nedeniyle daha büyük hatalar.
nibot

tamam, başka bir fark, Phonon'da <F (y)> <F * (x)> / (<bulunurken <F (y) F * (x)> / <F (x) F * (x)> F (x)> <F * (x)>) afaict: o (
andrew cooke

<F * (x)> 'leri hemen iptal edeceğinden, <F (y)> <F * (x)> / (<F (x)> <F * (x)>)' yı hesaplamanın bir anlamı yoktur. Ben yazarken doğru olduğunu düşünüyorum.
nibot

12

Sinyal İşleme hoş geldiniz!

Kesinlikle haklısın. DFT büyüklüklerini ve fazlarını, özellikle de fazları ayrı ayrı ortalayamazsınız. İşte basit bir gösteri:

z=a+bi|z|zz

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

zz1z2

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

Bu durumda,

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

Ayrıca,

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

|z|z

Şimdi, yapmaya çalıştığınız şeyi yapmak için aşağıdakileri öneriyorum. Teorik olarak, çıktının DFT'sini girdinin DFT'sine bölerek bir sistemin dürtü tepkisini bulabilirsiniz. Ancak, gürültü durumunda çok garip sonuçlar elde edersiniz. Bunu yapmanın biraz daha iyi bir yolu, aşağıdaki gibi devam eden çift kanallı FFT dürtü yanıtı tahminini kullanmak olacaktır (türev burada sağlanmamıştır, ancak çevrimiçi bulabilirsiniz).

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
Teşekkürler; Bu ya da nibot en iyi cevap olarak oy vermek emin değildi - ben aynı süreci savunan düşünüyorum, bu yüzden kitap önerisi ile gitti, ama ben iki oy olsaydı da bu olurdu ...
andrew cooke

1
@andrewcooke Evet, ikisi de aynı şeyi savunuyor. Umarım bu siz ve meslektaşlarınız için işleri temizler.
Phonon

bu benim için çok yardımcı oldu (tekrar teşekkürler). pazartesi günü i (1) önerilen yöntemi uygulamayı ve (2) üçü için bilinen (sentetik) verilerle karşılaştırmalar yapmasını önereceğim. umarım en iyi yaklaşım kazanır: o)
andrew cooke

@Phonon Burada FFT'leri hesaplamak için hangi FFT uzunluklarını kullanıyoruz? kanal_uzunluğu + max_length_of_chanel + 1?
Spacey

@Mohammad Bulmayı beklediğiniz gecikmenin uzunluğunun en az iki katı olmalıdır. Bunun nedeni DFT'nin dairesel simetrisidir, bu nedenle sonuçlarınızda hem nedensel hem de nedensel olmayan gecikme değerleri elde edersiniz.
Phonon

3

Bu, FFT spektrumlarının tutarlı ve tutarsız ortalaması arasındaki bir farktır. Tutarlı ortalamalamanın analizdeki rastgele gürültüyü reddetme olasılığı daha yüksektir. Tutarsız, rastgele gürültü büyüklüklerini vurgulama olasılığı daha yüksektir. Bunlardan hangileri sonuç raporunuz için daha önemlidir?


eğer farklı sonuçlar verirlerse sanırım tarafsız bir tahmin istiyorum. ya tarafsız mı?
andrew cooke
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.