Beberapa pertanyaan tentang Slepian dan jendela gaussian umum

10

Saya mencoba menambahkan dokumentasi untuk semua fungsi jendela di scipy.signal, dan saya terjebak di Slepian (sama dengan DPSS?) Dan jendela Generalized Gaussian , yang belum pernah saya dengar sebelumnya.

Ada dua variabel yang merupakan parameter bentuk beberapa jenis, pdi Gaussian umum, dan widthdi Slepian. ( sigtampaknya sigma, standar deviasi.)

2 pertanyaan:

  1. Daripada saya melakukan rekayasa balik dan menebak, adakah yang bisa menjelaskan apa yang disebut variabel-variabel ini dan apa yang mereka lakukan?

  2. Bisakah Anda menjelaskan untuk apa windows ini berguna atau di mana mereka digunakan?

 

def general_gaussian(M, p, sig, sym=True):
    """Return a window with a generalized Gaussian shape.

    The Gaussian shape is defined as ``exp(-0.5*(x/sig)**(2*p))``, the
    half-power point is at ``(2*log(2)))**(1/(2*p)) * sig``.

    """
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1
    n = np.arange(0, M) - (M - 1.0) / 2.0
    w = np.exp(-0.5 * (n / sig) ** (2 * p))
    if not sym and not odd:
        w = w[:-1]
    return w

def slepian(M, width, sym=True):
    """Return the M-point slepian window.

    """
    if (M * width > 27.38):
        raise ValueError("Cannot reliably obtain slepian sequences for"
              " M*width > 27.38.")
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1

    twoF = width / 2.0
    alpha = (M - 1) / 2.0
    m = np.arange(0, M) - alpha
    n = m[:, np.newaxis]
    k = m[np.newaxis, :]
    AF = twoF * special.sinc(twoF * (n - k))
    [lam, vec] = linalg.eig(AF)
    ind = np.argmax(abs(lam), axis=-1)
    w = np.abs(vec[:, ind])
    w = w / max(w)

    if not sym and not odd:
        w = w[:-1]
    return w

Kemungkinan kecocokan:

Fungsi dpss_windows nipy menggunakanNW , "setengah bandwidth standar sesuai dengan 2NW = BW * f0 = BW * N / dt tetapi dengan dt diambil sebagai 1"

Penggunaan dps Matlabtime_halfbandwidth Apakah ini jendela yang sama? Apakah time_halfbandwidthsama denganwidth ?

Definisi DPSS ini memiliki ωc "frekuensi cut-off main-lobe yang diinginkan dalam radian per detik".

Distribusi normal umum memiliki β (sama dengan dua kali p?) Yang hanya disebut parameter bentuk, dengan distribusi normal untuk β = 1 dan distribusi Laplace untuk β = 2.

endolit
sumber
FWIW Saya sepertinya ingat bahwa DPSS adalah sama (atau sangat mirip dengan) jendela Kaiser. Maaf hanya itu yang saya dapat. :-)
Spacey
@Mohammad: Jendela Kaiser adalah perkiraan DPSS, saya pikir karena DPSS yang sebenarnya mahal secara komputasi? en.wikipedia.org/wiki/Window_function#Kaiser_windows
endolith
2
DPSS adalah jendela yang dirancang dengan optimisasi terbatas, batasannya adalah lebar lobus utama yang dapat ditoleransi. Efeknya meminimalkan energi di luar lobus utama (sidelobes) relatif terhadap energi lobus utama tetap. Saya memiliki buku yang bagus di rumah (di luar kota untuk urusan bisnis), jadi saya dapat merumuskan jawaban yang lebih baik yang layak dikirim ketika saya mengulas tetapi itulah intinya.
Bryan

Jawaban:

4

Urutan Slepian adalah keluarga fungsi. Sebagian besar algoritma menghitung 2 * NW - 1 urutan sekaligus untuk NW yang diberikan. N adalah jumlah titik dalam sekuens dan W memutuskan setengah lebar mainlobe dalam domain frekuensi untuk transformasi Fourier dari sekuens Slepian yang diberikan. Biasanya Anda akan menggunakan NW 3 atau 4 untuk pemrosesan sinyal Anda.

NWNWN

Jika Anda memperkirakan spektrum daya dari rangkaian waktu stasioner, DPSS adalah kumpulan windows yang harus Anda gunakan.

Fungsi Gaussian yang digeneralisasi mengembalikan fungsi mirip Gaussian yang dinaikkan menjadi kekuatan yang lebih tinggi secara berurutan tergantung pada parameter p. Ketika p dinaikkan ke kekuatan yang lebih tinggi secara berurutan, Gaussian yang digeneralisasi menjadi lebih sempit dalam domain waktu. Properti bagus dari Gaussian adalah bahwa itu sendiri transformasi Fourier dan itu adalah fungsi yang mencapai batas mengenai prinsip ketidakpastian. Fungsi Gaussian mungkin berguna jika Anda ingin menghitung transformasi Fourier waktu pendek atau spektogram sebagai penduga untuk spektrum daya yang bervariasi waktu dari rangkaian waktu non-stasioner.

ncRubert
sumber
"Properti Gaussian yang bagus adalah itu milik Fourier transform sendiri." Tapi itu hanya berlaku untuk p = 1, kan?
endolith
-e-Sebuahx2halcHais(2πkx)dx
1

Contoh tunggal untuk menyangkal GG adalah transformasi sendiri. p = 0,5 memberikan eksponensial back-to-back biasa yang memiliki transformasi 2a / (s ^ 2 + a ^ 2).

Adapun blok DC, itu. dalam domain frekuensi Fdcx (w) = 1 - F (w). Ini akan menempatkan penolakan di sekitar DC dengan near-DC di w menjadi non-dioptimalkan di passband sekarang. Jadi saya hanya akan menggunakan Dolph untuk ini untuk membuat passband wideband menjadi riak yang sama.

Ini adalah impuls minus fungsi jendela asli kembali dalam domain waktu. Seberapa besar untuk impuls? harus memaksa jumlah urutan ke nol.

Peringatan, urutan panjang genap memaksa nol pada frekuensi Nyquist, jadi Anda harus menghindarinya.

Duncan Gray
sumber
-1

Transformasi Fourier GG juga merupakan Gaussian. Menggunakan teorema konvolusi, FT (Gaussian \ times Gaussian) = FT (Gaussian) \ conv FT (Gaussian) = Gaussian \ conv Gaussian = Gaussian. Harapan itu membantu!

Neuronator
sumber
Namun, ini adalah Gaussian yang digeneralisasi, bukan Gaussian biasa. Itu bukan transformasi sendiri. Lihat gambar: docs.scipy.org/doc/scipy/reference/generated/…
endolith